Resume parser API that returns fields, not text
Send a PDF, a DOCX, plain text, or a photo or scan of the page. Get back a typed JSON resume: name, contact details, every role with normalised dates, education, skills, certifications and languages. Median parse 2.2 seconds, measured against the live endpoint.
Pricing is on RapidAPI, with a free tier for testing against your own CVs.
Why another resume parsing API
OCR gives you the words on the page. An applicant tracking system needs the fields: which company, which title, which month the role started, whether it is still current. Turning one into the other is the whole job, and it is where most resume parser APIs are either slow, wrong, or abandoned.
Fast enough to run inline
Median 2.2 s against the live endpoint, on a real two-page CV. You can parse on upload instead of queueing a job, and every response carries an X-Parse-Ms header so you can see the latency you are paying for. Size your timeout off the p90, 2.4 s over 160 parses in three separated sittings.
Dates you can sort by
start_date is always YYYY-MM or YYYY, never "Summer 2019". A role with no end date comes back with is_current: true, so a current job never reads as a job with missing dates.
It never invents
A field the CV does not state is null. No guessed job titles, no inferred skills, no country filled in from an area code. A caller cannot tell an invented value from a read one, so we do not produce them.
One request
curl -X POST 'https://resumejson-resume-cv-parser-api.p.rapidapi.com/v1/parse' \
-H 'x-rapidapi-key: YOUR_KEY' \
-H 'x-rapidapi-host: resumejson-resume-cv-parser-api.p.rapidapi.com' \
-H 'content-type: application/json' \
-d '{"text": "Sarah Okonkwo\nStaff Engineer\nsarah@example.com\n\nEXPERIENCE\nMonzo — Staff Engineer, March 2022 to Present"}'RapidAPI shows the exact x-rapidapi-host for your subscription in the code snippet on the listing. Copy it from there — it is the authoritative value.
{
"resume": {
"basics": {
"full_name": "Sarah Okonkwo",
"email": "sarah@example.com",
"phone": null,
"location": null,
"headline": "Staff Engineer",
"links": []
},
"work": [
{
"company": "Monzo",
"title": "Staff Engineer",
"start_date": "2022-03",
"end_date": null,
"is_current": true,
"location": null,
"highlights": []
}
],
"education": [],
"skills": [],
"certifications": [],
"languages": [],
"total_years_experience": 4.5
},
"meta": { "source": "text", "characters": 118, "durationMs": 2212 }
}What it handles
- PDF, DOCX, plain text, and scans. The file type is detected from the bytes, not from the header a browser guessed. A PDF with no text layer, or a JPEG/PNG/WebP of the page, is read as images instead.
- Two-column layouts. PDF text extraction interleaves columns, so a phone number lands inside a job block. The parser reads for meaning, not position.
- Any language, in or out. An Indonesian CV returns Indonesian job titles, and only the date format is normalised. Ask for
output_languageand the same CV comes back in the language you name. - Date formats as written.
09/2016,Sept 2019,since January 2023,2014 – 2018all normalise correctly. - Documents that are not resumes. An invoice returns
422 not_a_resume, not a resume object with every field empty.
Questions
How fast is the resume parser API?
Median 2.2 seconds end to end, measured against this endpoint rather than in a lab. Every response carries an X-Parse-Ms header with the server-side time, so you can see the latency you are paying for on every call rather than taking a number off this page.
The spread is narrow: over 160 parses in three separated sittings the p90 was 2.4 seconds. Nothing runs past 45 seconds either way: the request is bounded, so past that you get a 503 with a Retry-After rather than a hung connection. Set your client timeout above that and you will never see a truncated call.
Does it work with scanned resumes?
Yes. A scanned or photographed CV has no text layer, so there is nothing to extract — the model reads the pages as images instead. You can also upload a JPEG, PNG or WebP of the page directly. It takes a few seconds rather than two, and meta.read comes back as vision so you can tell which way a document was read. Multi-page scans need to be one PDF; a single image is a single page.
What happens to the resumes I send?
They are parsed in a Cloudflare Worker and not stored. There is no database in this service.
Can I get the raw OpenAPI spec?
Yes — /openapi.json. It is the same document the reference page and the RapidAPI listing are generated from.
Can I try it before subscribing?
Yes, and without an account: the free resume parser runs your own CV through this same endpoint in the browser and shows you the JSON it returns. No signup, no key, nothing stored.
What does a parse cost?
Pricing is per request on RapidAPI, with a free tier for testing the shape of the response against your own CVs before you subscribe.