DeepRead Resume Parser
/install deepread-resume-parser
DeepRead Resume Parser
Turn any resume or CV — PDF, scanned, or wildly creative two-column design — into clean, structured JSON: contact details, work history with dates and titles, education, skills, and computed years of experience. Each field carries a needs_review flag, so your ATS ingests the confident fields and routes only the ambiguous ones to a recruiter.
This skill instructs the agent to POST documents to
https://api.deepread.techand poll for results. No system files are modified.
Why resumes break normal parsers
Resumes have no standard layout: two columns, sidebars, icons, tables, graphics, dates as "Jan 2021 – Present." Regex/template parsers shatter on the first creative design. DeepRead reads the document the way a human does — visual + semantic — runs multi-model consensus, and flags low-confidence fields instead of silently mangling a job title.
What You Get Back
{
"schema_version": "dp02",
"status": "completed",
"extraction": {
"fields": [
{"key": "full_name", "value": "Priya Nair", "needs_review": false, "location": {"page": 1}},
{"key": "email", "value": "[email protected]", "needs_review": false, "location": {"page": 1}},
{"key": "phone", "value": "+1 415 555 0148", "needs_review": false, "location": {"page": 1}},
{"key": "years_experience", "value": 7, "needs_review": true, "review_reason": "Computed from overlapping roles", "location": {"page": 1}},
{"key": "work_history", "value": [
{"company": "Stripe", "title": "Senior Backend Engineer", "start_date": "2021-06", "end_date": "present", "location": "Remote"},
{"company": "Shopify", "title": "Backend Engineer", "start_date": "2018-08", "end_date": "2021-05", "location": "Toronto, CA"}
], "needs_review": false, "location": {"page": 1}},
{"key": "education", "value": [
{"institution": "UC Berkeley", "degree": "B.S. Computer Science", "year": "2018"}
], "needs_review": false, "location": {"page": 1}},
{"key": "skills", "value": ["Python", "Go", "PostgreSQL", "Kubernetes", "gRPC"], "needs_review": false, "location": {"page": 1}}
]
}
}
Setup
open "https://www.deepread.tech/dashboard/?utm_source=clawhub"
export DEEPREAD_API_KEY="sk_live_your_key_here"
No key yet? clawhub install uday390/deepread-agent-setup and your agent fetches one via OAuth device flow.
Resume Schema
{
"type": "object",
"properties": {
"full_name": {"type": "string", "description": "Candidate's full name"},
"email": {"type": ["string", "null"], "description": "Email address"},
"phone": {"type": ["string", "null"], "description": "Phone number"},
"location": {"type": ["string", "null"], "description": "City / region of residence"},
"headline": {"type": ["string", "null"], "description": "Professional headline or current title"},
"years_experience": {"type": ["number", "null"], "description": "Total years of professional experience"},
"work_history": {
"type": "array",
"description": "Employment history, most recent first",
"items": {"type": "object", "properties": {
"company": {"type": "string", "description": "Employer name"},
"title": {"type": "string", "description": "Job title"},
"start_date": {"type": ["string", "null"], "description": "Start (YYYY-MM)"},
"end_date": {"type": ["string", "null"], "description": "End (YYYY-MM) or 'present'"},
"location": {"type": ["string", "null"], "description": "Role location"}
}, "required": ["company", "title"]}
},
"education": {
"type": "array",
"description": "Education history",
"items": {"type": "object", "properties": {
"institution": {"type": "string", "description": "School / university"},
"degree": {"type": ["string", "null"], "description": "Degree and field"},
"year": {"type": ["string", "null"], "description": "Graduation year"}
}, "required": ["institution"]}
},
"skills": {"type": "array", "items": {"type": "string"}, "description": "Listed skills / technologies"}
}
}
Parse a Resume
Python
import requests, json, time
API_KEY = "sk_live_YOUR_KEY"
BASE = "https://api.deepread.tech"
headers = {"X-API-Key": API_KEY}
schema = json.dumps({
"type": "object",
"properties": {
"full_name": {"type": "string", "description": "Candidate full name"},
"email": {"type": ["string", "null"], "description": "Email"},
"phone": {"type": ["string", "null"], "description": "Phone"},
"years_experience": {"type": ["number", "null"], "description": "Total years experience"},
"work_history": {"type": "array", "items": {"type": "object", "properties": {
"company": {"type": "string"}, "title": {"type": "string"},
"start_date": {"type": ["string", "null"]}, "end_date": {"type": ["string", "null"]}
}, "required": ["company", "title"]}},
"skills": {"type": "array", "items": {"type": "string"}, "description": "Skills"}
}
})
with open("resume.pdf", "rb") as f:
job = requests.post(f"{BASE}/v1/process", headers=headers,
files={"file": f}, data={"schema": schema}).json()
job_id = job["id"]
delay = 5
while True:
time.sleep(delay)
result = requests.get(f"{BASE}/v1/jobs/{job_id}", headers=headers).json()
if result["status"] in ("completed", "failed"):
break
delay = min(delay * 1.5, 20)
if result["status"] == "completed":
cand = {f["key"]: f["value"] for f in result["extraction"]["fields"]}
print(f"{cand.get('full_name')} — {len(cand.get('work_history', []))} roles, skills: {', '.join(cand.get('skills', [])[:5])}")
# Route only flagged fields to a recruiter
for f in result["extraction"]["fields"]:
if f.get("needs_review"):
print(f" REVIEW {f['key']}: {f.get('review_reason')}")
cURL
curl -s -X POST https://api.deepread.tech/v1/process \
-H "X-API-Key: $DEEPREAD_API_KEY" \
-F "[email protected]" \
-F 'schema={"type":"object","properties":{"full_name":{"type":"string"},"email":{"type":["string","null"]},"skills":{"type":"array","items":{"type":"string"}},"work_history":{"type":"array","items":{"type":"object","properties":{"company":{"type":"string"},"title":{"type":"string"}}}}}}'
Use Cases
- ATS ingestion — auto-populate candidate records from uploaded resumes, no manual entry
- Talent sourcing — bulk-parse a folder of CVs into a searchable, structured database
- Recruiting agencies — standardize candidates from every format into one schema
- Skills matching — extract the
skillsarray and match against a job's requirements - Job boards — let applicants upload a resume and pre-fill the application form (pair with
deepread-form-fill)
Bias-Free Screening — Redact PII First
For blind/anonymized first-pass screening, redact names, photos, addresses, and other PII before the resume reaches a reviewer — reducing unconscious bias and supporting fair-hiring policies:
curl -X POST https://api.deepread.tech/v1/pii/redact \
-H "X-API-Key: $DEEPREAD_API_KEY" \
-F "[email protected]"
Install: clawhub install uday390/deepread-pii
Tips for Best Accuracy
- Describe fields precisely — "Total years of professional experience" beats "experience".
- Use
["string","null"]for optional fields (email/phone often missing) so they default to null cleanly. - High-volume from one source? Build a blueprint at
https://www.deepread.tech/dashboard/optimizerfor a 20–30% lift. - Check
needs_review— overlapping roles and gap years are the usual flags; everything else auto-imports.
BYOK — Zero Processing Costs
Bring your own OpenAI/Google/OpenRouter key in the dashboard — processing routes through your account, page quota skipped. https://www.deepread.tech/dashboard/byok
Related DeepRead Skills
- deepread-ocr — general OCR + structured extraction —
clawhub install uday390/deepread-ocr - deepread-form-fill — fill application forms from parsed data —
clawhub install uday390/deepread-form-fill - deepread-pii — redact for blind screening —
clawhub install uday390/deepread-pii
Support
- Dashboard: https://www.deepread.tech/dashboard
- Issues: https://github.com/deepread-tech/deep-read-service/issues
- Email: [email protected]
Get started free: https://www.deepread.tech/dashboard/?utm_source=clawhub
- 确保已安装 OpenClaw(本地或 Docker 部署)
- 在对话框中输入安装命令:
/install deepread-resume-parser - 安装完成后,直接呼叫该 Skill 的名称或使用
/deepread-resume-parser触发 - 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
DeepRead Resume Parser 是什么?
Parse resumes and CVs into structured JSON — contact info, work history, education, skills, and total years of experience. Works on PDF, Word-exported PDF, a... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 34 次。
如何安装 DeepRead Resume Parser?
在 OpenClaw 或 Claude Code 对话框中运行命令「/install deepread-resume-parser」即可一键安装,无需额外配置。
DeepRead Resume Parser 是免费的吗?
是的,DeepRead Resume Parser 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。
DeepRead Resume Parser 支持哪些平台?
DeepRead Resume Parser 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。
谁开发了 DeepRead Resume Parser?
由 DeepRead.tech(@uday390)开发并维护,当前版本 v1.0.0。