The keyword filter step is the first thing the ATS runs. We surface exactly which required skills you have, which preferred skills you mention, which the role asked for that you forgot, and the bullets that mention them weakly.
Paste the full text of the JD or drop a link to the posting and we'll extract it. We support structured JDs (with explicit REQUIRED_SKILLS / PREFERRED_SKILLS / MIN_EXPERIENCE / MIN_DEGREE blocks) and free-form prose alike.
Required skills present, required skills missing, preferred skills present, preferred skills missing. Each one shows the exact line of the JD it came from so you can dispute the parse.
We score Experience, Skills, Projects, Education separately. A missing keyword in Skills is a 4-point hit. A missing keyword that also appears in three of your bullets is automatically credited.
For every bullet flagged as 'mentions a missing skill weakly' we propose a rewrite that lands the keyword with a quantified outcome. You accept, edit, or skip. Score recomputes live.
Same template. New text. Score now reflects the JD-matched version of your CV. Original CV stays untouched on your dashboard so you can run this for the next role from a clean baseline.
A naive keyword scanner uses regex. It looks for the literal string "Machine Learning" and gives up when your bullet says "ML pipelines". That's the failure mode that makes 65% of ATS-rejected CVs look like they shouldn't have been rejected at all.
Our skill graph is a hand-curated ontology of thousands of canonical skill names, their abbreviations, their tool families, and the common typos. "ML" maps to "Machine Learning". "k8s" maps to "Kubernetes". "tensorlfow" still matches "TensorFlow". The graph also knows that "PyTorch" implies the broader "deep learning" competency so we credit you correctly when a JD asks for the latter and your CV proves the former.
If you spot a missing synonym we add it within a day. The graph is open to operator review and every miss is a graph edit, not a model retrain.
We parse the JD into structured fields (required skills, preferred skills, minimum experience, minimum degree) and run a per-section diff against your CV. The skill graph behind the diff handles synonyms (ML / machine learning, k8s / kubernetes) and misspellings so legitimate matches aren't missed.
Yes. Every CV in your workspace can hold a different JD. The score and the bullet rewrite suggestions are recomputed per JD. Your original baseline CV is never overwritten.
We fall back to running the same skill graph over the whole JD text. The extracted skill list is shown so you can override it if the parse missed something, before the diff runs.
We don't compute one keyword similarity number over the whole document. We score Experience, Skills, Projects, and Education separately because a missing keyword in Skills is fixable in 30 seconds, but a missing keyword in Experience usually means you need a different role on your CV.
No. We add or rewrite bullets to land the JD's keywords, but we never invent skills you don't have, and we never strip out content that other employers might want. The base CV stays intact in your workspace.
Yes. The skill graph is curated for every major job family. For marketing, that means landing 'demand gen', 'lifecycle marketing', 'ABM', 'attribution', the standard tool stack (HubSpot, Marketo, Salesforce), and quantified outcomes (pipeline created, MQL conversion lift).
Score the baseline before tailoring. If parseability is below 70, fix that first.
The matcher flags weak bullets. The rewriter turns them into bullets that land the keyword.
The full guide. Format, sections, action verbs, and the formatting mistakes that crash parsers.
Free side-by-side diff. No credit card. Your baseline CV stays intact.
Run a JD match →