Priya Shah. Senior Engineer, Northwind, 2021 to now. Engineer, Contoso, 2018 to 2021. Go, Postgres, Kafka.
{ "name": "Priya Shah", "roles": 2, "current": "Northwind", "skills": ["Go", "Postgres", "Kafka"] }
Where resume parsing usually starts
Most teams parse resumes with a template parser that breaks on unusual layouts, or a frontier model asked for JSON on every upload. The parser misses fields, and the model costs too much per resume at scale. A Facet model returns your fields, in your shape, on every resume.
How it works
- Describe the task. Paste the prompt you use today, or write it plainly: “From each resume’s text, return name, each role with company and dates, and skills as a list.” Add a few real examples if you have them.
- Agree on what good looks like. Facet writes plain statements of a good answer, like “a current role has no end date, and is never marked as ended”, each with examples. Edit any that are off.
- Create, then correct. Facet builds the model on its own, in the background, and tests it against every statement before it goes live. When a field comes back wrong, say what it should have been. Facet quotes the fix before it spends anything.
Two ways to use it
- From your agent: connect Claude, Cursor, ChatGPT, Codex or VS Code to Facet, then paste:
Use Facet to build a model that reads resume text and returns name, each role
with company and dates, and skills as JSON. Here are fifteen real resumes as text:
... Show me the draft and the price before you approve anything.
- In your code: keep your OpenAI SDK and change two lines, the address and the model name.
import os
from openai import OpenAI
client = OpenAI(base_url=os.environ["FACET_BASE_URL"], api_key=os.environ["FACET_API_KEY"])
reply = client.chat.completions.create(model="resume-fields", messages=[{"role": "user", "content": resume_text}])
Why Facet for resume parsing
- Any layout. It reads the text, not a template, so unusual resumes don’t break it.
- The same shape every time. Every answer is ready for your hiring tool.
- Checked before every update. An update goes live only if it keeps every statement the live version passes, and any update rolls back in one step.
- Yours. Export it any time, free, and run it wherever you like.
Questions
Can Facet read a resume PDF?
Facet reads text today. Turn the PDF into text with any text extraction tool first, then send the text to your model.
Do resumes I send get stored?
Facet keeps only call details such as token counts, never the text. Our GPU provider holds each call for up to 7 days to run it, then deletes it. Resumes you add as examples stay in your workspace until you delete them.
Can it leave out details we must not use in hiring?
Yes. Make it a rule, such as "never return age, photo or marital status", and Facet tests every version against it before it goes live.