// feature · parse

Paste any job description. Structured data in under two seconds.

Paste a job description. The parser returns the fields you would otherwise type by hand. Company, title, experience level, required skills, salary range, and the keywords an ATS will match against. Each one lands in the correct field in the tracker, so you are not re-reading the same posting three times to remember what it asked for.

In · Raw job posting
Stripe is hiring a Senior
Frontend Engineer on the
Payments team. React,
Next.js, TypeScript.
$190K to $240K plus equity
Parse
Out · Structured JSON
company: Stripe
title: Senior Frontend Engineer
level: senior
skills: [React, Next.js, TS]
salary: $190K to $240K
// how it works

How to use job description parser.

3 steps. Each one runs in seconds. Scroll in order.

  1. Step 01

    Paste the raw posting

    Copy the full job description out of LinkedIn, Indeed, Glassdoor, or a company careers page and drop it into the box. No character limit on free or paid plans.

  2. Step 02

    The model extracts the fields

    The posting goes to a fast extraction model configured with a tight prompt. Output is a strict JSON shape: company, title, experience level, required skills, nice-to-have, salary range if listed, ATS keywords.

  3. Step 03

    Every field lands in your tracker

    The parsed record populates the job form in one pass. You can edit anything before saving. The full raw JD stays attached to the record so later steps (tailoring, keyword match, rejection analysis) can read it.

// worked example

What the output actually looks like

One real example, same input reshaped two ways.

// raw jd (first few lines)
Stripe is hiring a Senior Frontend Engineer on the Payments team. You will partner with product and design to turn Figma prototypes into shippable UI using React, Next.js, TypeScript, and our internal design system. You will care about Core Web Vitals, WCAG 2.1 AA, and writing Jest + Playwright tests for everything you ship. Experience in fintech or a regulated environment is a plus. Salary range: 190k to 240k plus equity.
// parsed json (abbreviated)
{
  "company_name": "Stripe",
  "job_title": "Senior Frontend Engineer",
  "experience_level": "senior",
  "key_skills": ["React", "Next.js", "TypeScript"],
  "nice_to_have": ["fintech", "regulated environment"],
  "salary_range": "$190K to $240K + equity",
  "ats_keywords": ["Core Web Vitals", "WCAG 2.1 AA", "Jest", "Playwright", "design system"]
}
TakeawayEvery field above is what the downstream AI uses. The resume tailor reads key_skills. The keyword match scores against ats_keywords. The rejection analyzer considers experience_level. Clean extraction is what makes the whole loop work.
// under the hood

The mechanics nobody hides.

You should be able to tell how a feature works before you trust it with your job search.

01

A small fast model, not a heavyweight one

Extraction is a classification task, not a creative one. A small, fast model handles it in roughly a second and costs pennies per parse. A larger model would be overkill and slow the paste-to-saved flow.

02

Strict JSON shape

The prompt enforces a JSON schema so we never have to parse free-form paragraphs out of the model. If a field is not in the posting (say, salary is absent) we return null for that field instead of guessing.

03

Structured fields drive every downstream step

The tailor, keyword match, cover letter, and interview prep all read the parsed structured fields rather than re-reading the full 2,000-word posting. The parse runs once per job and is cached so downstream calls do not re-parse.

04

Works with any board format

The parser is format-agnostic. LinkedIn reels, Indeed bullet lists, company careers pages with three paragraphs of "about us" before the role. All supported. The extraction prompt is designed to surface the required skills and ATS keywords from the body of the posting, not the surrounding boilerplate.

// guardrails

What it deliberately does not do.

Honest limits read as trust signals. Hiding them does the opposite.

  • We do not fetch a posting from a URL. Paste the text. This keeps the feature deterministic and avoids scraping.
  • We do not parse PDF job descriptions inside the web app. Paste the text from the PDF.
  • We do not claim 100% field accuracy. Unusual postings (single-paragraph descriptions, screenshots pasted as text) can miss fields. Everything is editable before save.
// questions

Common questions.

If your question isn't here, email support and you'll hear back from the founder.

How long does a parse take?

Roughly one to two seconds on a typical JD. Very long postings (3,000+ words) can push toward three seconds. Still under the threshold where you feel the wait.

How does the parser work?

A small, fast extraction model with a tight prompt. A larger general-purpose model would buy us nothing here and cost more. Free and Pro tiers use the same parser with the same prompt.

Is there a character limit?

No soft limit. Very large pastes (over 20,000 characters) get truncated before parsing, but we keep the full text on the record so tailoring still sees everything.

Can I edit the parsed fields before saving?

Yes. Everything is a regular form field after parsing. If the model missed the experience level or misread the salary range, type over it before you save the job.

Does the Chrome extension parse the JD on save?

No. Extension saves are intentionally cheap. The popup captures company, title, and the raw posting from the page via DOM scrape, no AI call at save time. The parse runs lazily the first time you open the saved job in the dashboard, so speculative saves (when you Save 30 postings while browsing but only act on 3) do not burn AI cost. Same parser, same accuracy, just deferred to the moment you actually engage with the job.

// try job description parser

Stop reading about it. Run it on a real job.

Create a free account in under a minute. First job tracked, first tailored resume, and first keyword breakdown all happen inside the onboarding flow.

No credit card · 2-minute setup · Cancel anytime