Job description analyzer — pull out the real requirements
Most job descriptions are written to obscure the role. Paste any JD into the box below and you get the seniority signal, the actual required skills, the red-flag phrases, the comp hints, and the remote-work mode — instantly, in your browser, with nothing uploaded to a server.
Paste the JD
100% client-side. No tracking, no upload.Why job descriptions hide the real role
A job description is a translation layer. The hiring manager wants a person who can ship feature X by quarter Y on a team that is short two engineers and has on-call every fourth week. By the time that intent reaches a recruiter, then a JD template, then legal review, then the careers-page CMS, what comes out is a document full of bullet points like “experience working with cross-functional teams” and “strong communication skills.” The translation is lossy in both directions. The recruiter loses the urgency. The candidate loses the context that would tell them if this is a fit.
On top of that, JDs get copy-pasted across roles. A staff infra hire and a junior frontend hire often share 60% of the same template at the same company. The real differences live in three or four sentences buried mid-document, and in the phrasing around “ideally,” “preferred,” and “you might also.” The header says “Senior Engineer,” but the actual level is encoded in the years-of-experience number further down, in the comp band hint, and in whether they mention mentoring junior engineers.
The analyzer above is built around the same heuristics a tenured recruiter or hiring manager uses when they scan a JD: where the seniority signal lives, which keywords are real requirements versus filler, which phrases telegraph culture problems. You can do the read manually after seeing a hundred JDs. The tool just shortcuts you to the same answer.
How to read between the lines
Seniority is the first thing to anchor. Look for explicit titles — junior, senior, staff, principal — but also for numeric experience requirements. “5+ years” in a JD usually maps to senior. “2–4 years” is mid. “Less than 2 years” or “new grad” is junior. The years-of-experience number is more honest than the title because titles inflate every two years across the industry, while the years number gets calibrated against an actual salary band.
The required-skills section is the second anchor. The trick: required skills are the ones that appear three or more times across the document — once in the headline, once in “responsibilities,” once in “qualifications.” Skills that appear only once are decoration. Skills that appear only under “nice to have” are exactly that — useful for the interviewer to ask about, but you will not be rejected for not having them. The analyzer counts hits per skill so you can sort signal from filler at a glance.
The third anchor is the cultural language. “Fast-paced,” “demanding,” “wear many hats,” “we’re a family,” “rockstar” — these phrases all mean specific things, and once you have seen enough JDs you can predict the company before you read the header. A heavy concentration of these phrases is a structural warning: either the team is in chronic firefighting mode, or HR did not have a tight enough lens to filter the hiring manager’s raw text. Neither is good for you on day one.
The fourth anchor is the comp signal. If the JD names a band, take it at face value — that is the band. If the JD says “competitive salary” with no number, assume the band is 10–20% below the market for your level. Companies that pay market publish a number because the number is their recruiting weapon. Companies that pay below market use vague language and hope you anchor low.
The fifth anchor is location. “Remote-first” means the whole company is built around remote work, including infrastructure and meeting culture. “Remote-friendly” usually means there is an office and a few remote employees who feel like second-class citizens. “Hybrid” means three days in the office and is rarely flexible. Watch for “relocation expected” or “visa sponsorship not available” — these are hard gates.
Red flag dictionary
The analyzer flags around twenty common phrases. Here are the most common ones with longer explanations so you can argue with yourself about whether it is truly a flag or just unfortunate copy.
“Fast-paced environment”
Almost every JD says this. It is meaningful only in the absence of other signals — clear roadmap, defined OKRs, named team. Fast-paced plus “wear many hats” plus no manager mentioned is the holy trinity of a team in survival mode. Fast-paced inside a 5,000-person company with a roadmap and a clear scope is just filler.
“We’re a family”
Families do not lay you off in a 15-minute Zoom. This phrase shows up disproportionately in JDs from companies that have recently had — or are about to have — tough firings. It also correlates with weekend Slack expectations and emotional debt as a management tool. A workplace is a workplace. Saying it is a family is either marketing or warning.
“Wear many hats”
Two interpretations. Healthy: a small team where you genuinely get to learn adjacent skills, with explicit support. Unhealthy: scope creep as a feature, with no extra comp, no extra title, and no extra time. Ask the recruiter to name the three hats they expect you to wear in the first six months. If they cannot, it is the unhealthy version.
“Rockstar / ninja / 10x engineer”
Title inflation in the JD itself. Correlates with hero culture, lack of process, and a team that has built fragile systems they are now paying down. The implicit message is “we expect you to outwork three normal engineers,” and the overtime is baked in. Not always a deal-breaker, but worth a calibrated question about average hours.
“Competitive salary”
The single most reliable signal of below-market pay. Companies that pay well publish numbers. Companies that pay poorly use the word “competitive.” If they refuse to share a band on the recruiter screen, the band is bad enough that they would rather keep negotiating from a position of asymmetric information.
“Self-starter who thrives in ambiguity”
The polite version of “no onboarding, no playbook, no manager support, figure it out.” In a senior role this can be honest — leadership often does come with ambiguity. In a mid or junior role it is a structural problem. Ask who your first-week buddy is. If they cannot name a person, assume you will be navigating blind.
“Unlimited PTO”
Counterintuitive: employees at unlimited-PTO companies statistically take less time off than employees with a fixed allotment, because there is no accrual to spend. The policy is also a balance-sheet move — accrued PTO is a liability the company no longer has to carry. Not a dealbreaker, but ask about average days taken last year. If they cannot answer, it is theater.
Worked example
Take this fragment: “We’re looking for a senior backend engineer with 5+ years of Python and PostgreSQL experience. You’ll own the entire data pipeline. Self-starter, comfortable with ambiguity. Competitive salary, unlimited PTO, equity in lieu of higher base. Fully remote, US time zones.”
Run that through the analyzer and you get: seniority signal — senior (explicit title plus 5+ years), hard skills — python, postgresql, backend, data pipeline, red flags — self-starter, comfortable with ambiguity, competitive salary, unlimited PTO, equity in lieu, comp — none declared, location — fully remote, US TZ gate. The take is: the role is real and senior, but the comp situation is opaque, you should expect to define your own scope with no onboarding, and you need to validate the equity story with a real number before treating it as compensation. Two-minute read instead of fifteen.
What to do with the output
The analyzer gives you a structured read, but the read is only useful if you act on it. Three plays, in order of how often they pay off.
First, use the required-skills list as the keyword spine for your resume tailoring. If the JD lists Python, PostgreSQL, and AWS three times each, those three words should appear verbatim in your resume — in your experience bullets, not just your skills section. Recruiter searches and the ATS’s built-in match score both look for keyword overlap, and a tailored resume gets dramatically more first-screen pulls than a generic one. The companion guide on tailoring resume to job description walks the full process.
Second, use the red flags as the question list for your recruiter screen. If the JD said “fast-paced” and “wear many hats,” ask the recruiter directly: “What does a typical week look like for the engineer in this role, in terms of hours and scope?” The answer either dissolves the flag or confirms it. Either outcome is useful.
Third, use the comp hints and remote-mode signals to pre-filter. If the JD said “competitive salary” and refused a band on the screen, and the location is hybrid with no flexibility, you can decide that’s a no before you waste four hours on a take-home. Pre-filtering is the highest-leverage move in any job hunt, and most candidates skip it.
Once you have decided to push forward, log the application in your tracker so you can compare offers side-by-side at the end. The job application tracker page covers a tracker setup that surfaces exactly the comp, seniority, and red-flag fields the analyzer produces, so you can keep the structured read alongside the application status.
FAQ
Is the analyzer really free, and is anything uploaded?
Yes, it’s free, and nothing leaves your browser. The JS file parses the text in-place using regex and dictionary matching. No fetch, no analytics on the text content, no server-side storage. You can verify by opening DevTools and watching the Network tab.
How does it differ from pasting the JD into ChatGPT?
Two things. First, the analyzer is deterministic — paste the same JD twice, get the same output. Large language models drift between runs. Second, the analyzer applies a specific recruiter heuristic (seniority via years and title overlap, red-flag phrase dictionary, comp-language patterns), where ChatGPT will give you a generic summary unless you prompt it carefully. For a deeper, opinionated take with company-specific context, use the full vacancy intake, which combines parsing with an LLM and your resume.
The skill list missed something important. Why?
The analyzer uses a curated dictionary of ~120 common engineering and product skills plus a fallback for uppercase acronyms and tech-glyph tokens (C++, .NET, Vue.js). Niche tools or company-specific tech names may not appear. The output is a strong signal, not a complete extraction. Treat “top 15” as “the most-mentioned terms the dictionary knows about.”
What counts as a red flag? Could I tune it?
The flag list is around twenty phrases that consistently correlate with overwork, vague scope, or below-market comp in the industry. The list is opinionated. If you don’t agree with a specific call (some teams genuinely are fast-paced in a healthy way), treat the flag as a prompt for a question on the recruiter screen, not as a verdict. The tool is fully client-side; you can fork the JS file at /consumer/jd-analyzer-tool.js and tune the dictionary if you want.
Does it work for non-engineering JDs?
The seniority detection, red-flag dictionary, comp-language detection, and remote-mode detection are general. The skill dictionary is engineering-heavy, so for sales, marketing, or design JDs the “required hard skills” section will be sparser. Everything else still works.