ResumeJSON

Resume parser API that returns fields, not text

Send a PDF, a DOCX or plain text. 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.

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, fastest 2.0 s, slowest 3.2 s over five parses of a real two-page CV. The highest-scoring resume parser on RapidAPI answers in 16.5 s. You can parse on upload instead of queueing a job.

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.p.rapidapi.com/v1/parse' \
  -H 'x-rapidapi-key: YOUR_KEY' \
  -H 'x-rapidapi-host: resumejson.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"}'
{
  "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, "model": "google/gemini-2.5-flash-lite", "durationMs": 2212 }
}

What it handles

Questions

How fast is the resume parser API?

Median 2.2 seconds end to end, measured against this endpoint rather than in a lab: five parses at 1.97 s, 2.06 s, 2.21 s, 2.53 s and 3.16 s. Every response also carries an X-Parse-Ms header with the server-side time, so you can see the latency you are paying for without timing the call yourself.

Does it work with scanned resumes?

Not yet. A scanned CV is an image with no text layer, so extraction returns nothing and the API answers 422 unreadable_file and tells you to send the text instead. Image input is the next thing being built.

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.

What does a parse cost?

Pricing is per request on RapidAPI. The free tier is there to test the shape of the response against your own CVs before you subscribe.