# Job Posting Parser API

> Job Posting Parser API is a hosted REST API that turns a job posting (title, location and description as text or HTML) into structured JSON: seniority, job function, remote/hybrid/onsite with the countries and regions allowed, annualized salary, skills and flags such as visa sponsorship. It is rules-based with no LLM, so the same input always gives the same output, and every label comes with a reason.

Last updated: 2026-10-24

## Use it when
- You run a job board, ATS, HR-tech product, recruiting tool, job aggregator or labour-market analysis.
- You need the same filters on every posting: seniority, job function, remote/hybrid/onsite, which countries a remote job is open to, salary in one annual figure, skills, visa sponsorship.
- You want deterministic, explainable output rather than an LLM prompt.

## Endpoints
- `POST /v1/parse` with `{"title": "...", "location": "...", "description": "...", "company": "..."}` (only title required; description is text or HTML, max 50,000 characters) returns the parsed posting.
- `POST /v1/parse/batch` with `{"postings": [...]}` parses 1 to 20 postings per call.
- `GET /v1/taxonomy` lists every value the parser can return.

## Output fields
- `seniority.level`: intern, junior, mid, senior, staff, principal, lead, manager, director, exec.
- `function.name`: engineering, data, design, product, marketing, sales, support, ops, finance, hr, legal, other; plus `specialty` for engineering and data roles.
- `remote.type` (remote, hybrid, onsite, unknown), `remote.regions_allowed` (ISO country codes and region slugs such as worldwide, emea, europe, latam), `remote.timezones`.
- `salary`: min, max, currency, period, annualized_min, annualized_max.
- `employment_type`, `experience_years`, `skills`, `flags` (visa sponsorship, clearance, equity, relocation, travel, degree, languages, talent pool, AI/ML role), `reasons`.

## Accuracy (44 real held-out postings, title and location only)
- Seniority 97.7%, job function 93.2%, remote type 100%, regions 95.5% (after one round of generic fixes).
- Before those fixes: 95.5%, 68.2%, 97.7%, 93.2%.

## Get access
- [RapidAPI (API key, monthly plans)](https://rapidapi.com/keithkmlai/api/job-posting-parser)
- [Apify Store (bulk, pay per posting)](https://apify.com/keith-apis/job-posting-parser)
- [OpenAPI schema](https://job-parser-api.fly.dev/openapi.json)
- [Docs and examples](https://job-parser-api.fly.dev/)

## Pricing
- RapidAPI: free 100 requests/month; $9.99 for 10,000; $29.99 for 60,000; $99 for 300,000 per month.
- Apify: $0.002 per posting ($2 per 1,000), pay per result, up to 1,000 postings per run.

## FAQ
- **How do I extract salary, seniority and remote location from a job posting?** Send the posting's title, location and description to POST /v1/parse. Job Posting Parser API returns the seniority level, job function, remote type with allowed countries and regions, the salary range with currency, period and an annualized min and max, employment type, years of experience, skills and flags, each with a human-readable reason.
- **Is there an API that tells me which countries a remote job is open to?** Yes. Job Posting Parser API returns remote.regions_allowed: ISO country codes such as US or DE and region slugs such as worldwide, emea, europe or latam. They come from the title, the location and eligibility sentences in the description ("must be based in…", "open to candidates in…"); office lists are ignored.
- **How do I normalize job titles and seniority levels across job boards?** Job Posting Parser API cleans the title (gender tags such as m/w/d, requisition IDs, "Remote - US" suffixes and pay snippets are removed, Sr./Mgr/SWE are expanded) and maps it to one of 10 levels: intern, junior, mid, senior, staff, principal, lead, manager, director, exec. People managers are kept apart from IC titles such as Product Manager, and II, III and L5 are understood.
- **How do I annualize hourly, daily or monthly salaries from job ads?** Job Posting Parser API detects the pay period and annualizes with 2,080 hours, 260 days, 52 weeks or 12 months a year. It reads $, €, £, 30 ISO currency codes, European number formats (€60.000, CHF 120'000), k-ranges and "up to" amounts, and ignores funding rounds, stipends and 401(k).
- **How accurate is Job Posting Parser API?** On 44 real held-out postings (title and location only): seniority 97.7%, job function 93.2%, remote type 100% and allowed regions 95.5%. Before one round of generic fixes the same set scored 95.5%, 68.2%, 97.7% and 93.2%. Job function is the weakest field because many titles are ambiguous.
- **Should I use ChatGPT or another LLM to parse job descriptions instead?** An LLM handles any wording but can return different answers for the same posting and costs tokens per call. Job Posting Parser API is deterministic, takes about 1 ms per posting and explains every label, so results are consistent filters you can audit. Use an LLM for free-form questions about a posting; use this API for the same fixed fields on every posting.
- **How much does Job Posting Parser API cost?** On RapidAPI: free for 100 requests a month, then $9.99 for 10,000, $29.99 for 60,000 and $99 for 300,000 a month. On Apify it is pay per result at $0.002 per posting ($2 per 1,000).
- **Can I parse thousands of job postings in bulk?** Yes. POST /v1/parse/batch takes 1 to 20 postings per call. For a large list, the Apify Actor takes up to 1,000 postings per run and writes one dataset row per posting, charged per posting; empty postings are skipped and not charged.
- **Does it store the job postings I send?** No. The API is stateless: there is no database, nothing is written to disk, and it makes no outbound calls.
