Paste a job posting. Get an ATS match report against your real experience, resume bullets rewritten in the posting's own vocabulary, and the eight behavioural stories every interview turns on. Every one of them traceable to something you actually did.
Most tools rewrite you to fit the posting. That works right up until an interviewer asks a follow-up about something you never did, and then the whole application is suspect, not just that line.
This works the other way round. You write down what actually happened, once. Every output ( the match report, the bullets, the eight stories) gets assembled from that record and nothing else. When the material is thin, it says so instead of filling the gap for you.
Ten entries are pre-loaded from your record. Add detail, especially the parts that went badly. Those make the best stories.
Requirements get extracted and matched against your bank. You see what you can evidence and what you can't. No key needed.
Tailored bullets in the posting's vocabulary, and eight STAR briefs shaped for this specific employer.
Print the briefs and say them. Ninety seconds each. The likely follow-up questions are printed on every card.
Everything is stored in this browser only: your experience bank, your key, your generated briefs. Nothing is uploaded and there is no server.
The flow: paste the posting → Scan (free, instant) → Save to tracker → Draft tailored bullets (uses your key). The score verdict tells you whether to apply as-is or tailor first. The Playbook below explains the bands.
PDF, DOCX, or TXT. When set, scans and generated bullets use this file instead of your experience bank. Read entirely in your browser. Never uploaded anywhere.
Weighted: terms under a Required heading count triple, body mentions double, Preferred once. No real applicant tracking system publishes a match percentage, so treat this as a relative signal for prioritising your effort, not a score any employer will see.
These are what actually eliminate applications: knockout questions on the form and filters a recruiter sets. They sit outside the percentage, because a strong keyword match with a missing mandatory credential is still a rejection.
Parsing runs before matching. If the system cannot pull your fields into structured data, keyword work never gets read. This runs against the text actually extracted from your file, which is what a parser sees.
Candidate search inside these systems is literal rather than semantic, so two names for one thing are two different tokens. Where you have genuinely done the thing the posting names, switch to its phrasing. Where you have not, leave it alone and treat it as a gap.
Ranked by overlap with this posting. Put them in this order on the page.
Clean plain text, ready to paste into your resume. Check every line against what you actually did before it goes out.
The flow: company + role → paste the posting → Generate. Eight STAR stories built from your bank (or an uploaded resume), shaped for this employer. Then hit Rehearse and say them out loud.
When set, the eight stories are built from this file instead of your experience bank. Read entirely in your browser.
Slower, and worth it. This is what lets the briefs mirror how this employer actually talks. Needs Gemini or Claude; Groq can't search the web, so it's skipped automatically there.
This site ships with Fahim's record as the example. Replace it with your own. Paste your resume and parse it into an experience bank, or start blank and add entries by hand.
PDF, DOCX or TXT, extracted in your browser into the box below, then hit Parse.
Parse into entries uses your saved API key (the free Gemini one works). No key? Add as one entry, then split it by hand.
The only material any output is allowed to draw from. Write plainly. Rough honest detail produces better stories than polished summary. Edits save as you type.
Scan a posting in ATS match, save it here. Load any row to bring its posting, score, and briefs back exactly as they were.
The flow: set your target → Scan sources (free, no key) → Score matches (uses your key). Openings are pulled from public company job feeds, filtered against your resume, then scored. Everything is read and kept in this browser.
Comma separated. A posting must match one of these to be considered.
Comma separated. Remote roles always pass this check.
Scoring calls the model once per posting, so this is the main cost control.
One per line: type | slug | name. Types: greenhouse, lever, ashby, smartrecruiters. The slug is the company identifier in its careers URL, for example boards.greenhouse.io/datadog.
The flow: paste the posting → add the few things only you know → Generate (uses your key). It writes a specific, plainly-worded letter drawn only from your record and the posting. No invented enthusiasm, no manufactured stories, no em dashes. Then it flags any phrasing that reads generic so you can fix it in your own words.
Anything you write here is used verbatim as the honest core of the letter. Leave it blank and the letter stays factual rather than inventing a reason you care.
Uses your experience bank, or an uploaded resume if you set one in the ATS match tab. Nothing here is stored on a server.
Read it aloud before you send it. If a sentence is not true, or you would not say it in an interview, cut it. This is a draft to make yours, not a finished artifact.
These are the patterns that make a letter feel machine-written to a recruiter and to a detector. This is a heuristic, not a detector, and it cannot promise anything about any specific screening tool. Fix what it flags in your own words and the letter reads like you.
The site works out of the box: no key, no account. The Settings below are only if you'd rather use your own provider key.
Cleared from this box once saved. One key per provider. Switching providers keeps both.
Everything this site keeps lives in this browser: your key, your bank edits, your last briefs.
The ATS is rarely what rejects you. A rushed human skimming a pile is. These eight moves survive both. Every one of them is checkable with the tools above.
Keyword matching is literal. If the posting says "Microsoft Sentinel," write "Microsoft Sentinel," not just "SIEM." The scanner above shows you exactly which words to mirror.
Tables, text boxes, icons and two-column layouts scramble resume parsers. One column, standard fonts, .docx or a text-layer PDF. Boring formats get read; pretty ones get mangled.
Parsers key on "Experience," "Skills," "Education." A clever section name like "My Journey" makes your best work invisible to the software reading it first.
Every bullet: strong verb + what you did + a measurable result. "Cut analyst reporting time 75% by automating vulnerability matching in Python" survives a six-second skim. Adjectives don't.
Recruiters average about six seconds on the first pass, almost all of it above the fold. Your summary and your first role's bullets carry everything. Tailor those hardest, per posting.
Every skill on the page is a future interview question. If you can't talk about it fluently for two minutes, it isn't a keyword. It's a trap you set for yourself.
70%+ match: apply today, as-is. 40-69%: close one or two gaps and tailor the top third first. Under 40%: it's a stretch. That hour is worth more spent on tip 08.
Most "ATS rejections" are humans skimming a pile. One message to a team member, professor or alum moves you off the pile entirely. Application plus referral is the play, not application times one hundred.
It ships loaded with his record as a working example so you can see every feature working. Which are you?
Say it out loud from memory first. Then reveal and check yourself against what you wrote.