# Résumé → structured JSON — Claude XML example

> Convert a free-form résumé into a normalized candidate profile.
>
> Source: https://claudexml.com/examples/resume-to-json/ · Last updated 2026-05-25

Home / Examples / Résumé → structured JSON
    Extraction · intermediate

# Résumé → structured JSON

    Convert a free-form résumé into a normalized candidate profile.

    Recruiting pipelines need structured candidate data: contact info, experience with normalized dates, education, skills — extracted from wildly varied résumé formats.


## The prompt

    Copy this verbatim. Replace the `{{ … }}` placeholders with your values.


```xml
<instructions>
Extract candidate data from the résumé in <resume>. Return JSON inside <result> tags.

Rules:
- Dates are ISO YYYY-MM. If only a year is given, use YYYY-01.
- "present" or "current" in end_date → null.
- Skills: include only items the candidate lists. Do not infer from job descriptions.
- Do not include personal info beyond name, email, phone, location (city/country).
</instructions>

<format>
{
  "name": "string",
  "email": "string or null",
  "phone": "string or null",
  "location": "string or null",
  "headline": "string or null",
  "experience": [
    { "company": "string", "title": "string",
      "start_date": "YYYY-MM", "end_date": "YYYY-MM or null",
      "highlights": ["string"] }
  ],
  "education": [
    { "institution": "string", "degree": "string or null",
      "field": "string or null", "graduation_year": 2024 }
  ],
  "skills": ["string"]
}
</format>

<resume>{{ resume_text }}</resume>

Return inside <result> tags.
```


## Sample input


```xml
Maya Chen — Senior SRE
maya@example.com · +1 415 555 0142 · San Francisco, CA

Experience
- Acme Cloud, Staff SRE, Jan 2022 – present
  * Cut p99 latency from 800ms to 120ms across the API tier
  * Led incident response for 3 SEV-1s
- Globex, SRE, 2019 – 2021

Education
B.S. Computer Science, UC Berkeley, 2019

Skills: Go, Kubernetes, Terraform, Prometheus
```


## Expected output


```xml
<result>
{
  "name": "Maya Chen",
  "email": "maya@example.com",
  "phone": "+1 415 555 0142",
  "location": "San Francisco, CA",
  "headline": "Senior SRE",
  "experience": [
    {"company": "Acme Cloud", "title": "Staff SRE",
     "start_date": "2022-01", "end_date": null,
     "highlights": ["Cut p99 latency from 800ms to 120ms across the API tier",
                    "Led incident response for 3 SEV-1s"]},
    {"company": "Globex", "title": "SRE",
     "start_date": "2019-01", "end_date": "2021-01", "highlights": []}
  ],
  "education": [
    {"institution": "UC Berkeley", "degree": "B.S.",
     "field": "Computer Science", "graduation_year": 2019}
  ],
  "skills": ["Go", "Kubernetes", "Terraform", "Prometheus"]
}
</result>
```


## Notes & tuning tips


- PII restriction prevents the model from inventing demographic inferences.
- If résumés routinely include photos or addresses, strip those upstream before extraction.
- Always validate emails / phones with format checks server-side; the model isn't a validator.


## What this example uses

    Tags: <instructions> <format>

    Patterns: structured output


## More like this


      extraction
### Structured JSON extractor from email
Pull sender, subject, intent, urgency, and action items from a raw email body.

      extraction
### Invoice / receipt line-item extractor
Convert an OCR'd invoice into structured JSON: vendor, totals, line items.

      extraction
### Email → calendar event
Detect meeting requests in email and emit a structured event with start/end in ISO format.




Cite this page

`Résumé → structured JSON. claudexml.com. https://claudexml.com/examples/resume-to-json/`
