resumes APIresumes.fyi ↗
Access 1900+ real resumes from resumes.fyi that passed screens at top tech companies. Filter by role, level, company, school, and verification status.
What is the resumes API?
The resumes.fyi API exposes data from over 1,900 real resumes that cleared hiring screens at top tech companies, across 2 endpoints. list_resumes lets you paginate and filter the full catalog by role, experience level, company, school, and verification status, returning resume image URLs alongside structured metadata. get_resume retrieves a single resume in detail, including complete skill lists, education records, and company tags.
curl -X GET 'https://api.parse.bot/scraper/3526a972-388a-49e4-b3f3-ce1a8880114e/list_resumes?page=1&role=software-engineer&level=intern&limit=5&school=Stanford+University&company=google&verified_only=False' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace resumes-fyi-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Resumes.fyi SDK — browse and analyze tech resumes."""
from parse_apis.resumes_fyi_api import ResumesFyi, Role, Level, ResumeNotFound
client = ResumesFyi()
# List software engineer resumes, capped at 5 total items
for resume in client.resumes.list(role=Role.SOFTWARE_ENGINEER, limit=5):
print(resume.first_name, resume.last_name, "-", resume.role, "|", resume.view_count, "views")
# Drill into a single resume for full details
resume = client.resumes.list(level=Level.INTERN, company="google", limit=1).first()
if resume:
detail = client.resumes.get(username=resume.username)
print(detail.first_name, detail.last_name)
print("Skills:", detail.skills[:5])
for exp in detail.experiences:
print(f" {exp.position} at {exp.company} ({exp.start_date} - {exp.end_date})")
for edu in detail.educations:
print(f" {edu.degree} from {edu.school}, GPA: {edu.gpa}")
# Typed error handling for a non-existent username
try:
client.resumes.get(username="this-user-does-not-exist-xyz")
except ResumeNotFound as exc:
print(f"Not found: {exc.username}")
print("exercised: resumes.list / resumes.get / Role enum / Level enum / ResumeNotFound error")List resumes with metadata and image URLs. Supports pagination and filtering by role, level, company, school, and verified status. Returns resume summaries including user info, companies, skills, experiences, and education. Results are sorted by most-screened. Each page returns up to 50 results; use the page parameter to advance through the full set.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (1-indexed). |
| role | string | Filter by role slug. |
| level | string | Filter by level. |
| limit | integer | Results per page (max 50). |
| school | string | Filter by school/university name. |
| company | string | Filter by company slug (e.g. google, meta, amazon). |
| verified_only | boolean | Only show verified resumes. |
{
"type": "object",
"fields": {
"page": "integer - current page number",
"limit": "integer - results per page",
"total": "integer - total number of matching resumes",
"resumes": "array of resume summary objects with username, user_id, first_name, last_name, resume_id, resume_image_url, role, role_slug, level, education, country, verified, like_count, view_count, created_at, company_name, companies, skills, experiences, educations, profile_urls, user_image",
"has_more": "boolean - whether more pages exist",
"total_pages": "integer - total number of pages"
}
}About the resumes API
Browsing and Filtering Resumes
The list_resumes endpoint returns a paginated array of resume objects sortable by most-screened. Each item includes username, resume_id, resume_image_url, role, role_slug, level, and associated companies and education. You can narrow results with query parameters: role accepts slugs like software-engineer, data-scientist, product-manager, and product-designer; level accepts values like intern, new-grad, full-time, and contract; and company accepts slugs such as google, meta, or amazon. The verified_only boolean restricts results to resumes that carry verified status. Pagination is controlled via page (1-indexed) and limit (up to 50 per page), with total, total_pages, and has_more returned to support cursor-style traversal.
Retrieving a Single Resume
The get_resume endpoint accepts a username — obtainable from list_resumes results — and returns the full detail record for that resume. Response fields include skills (an array of strings), companies (array of objects with name, slug, and domain), educations (array with school, degree, major, and gpa), resume_image_url, role_slug, and the unique resume_id and user_id. This is the right endpoint when you need the complete skills list or full education history rather than the summary fields returned in list results.
Coverage and Scope
The dataset covers roles across software engineering, data science, product management, and product design. Experience levels span intern through freelance and contract. Resumes can be optionally filtered to those marked verified, which resumes.fyi uses to indicate the candidate successfully cleared a resume screen at a named company. The companies field on each resume reflects where the resume was accepted, not merely where the candidate worked.
The resumes API is a managed, monitored endpoint for resumes.fyi — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when resumes.fyi changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official resumes.fyi API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Analyze which skills appear most frequently on verified software-engineer resumes at FAANG companies by aggregating the
skillsarray across filtered results. - Build a resume benchmark tool that compares a user's education details against the
educationsfield from resumes at their target company. - Scrape resume image URLs via
resume_image_urlto create a visual gallery of accepted resumes for a specific role and level combination. - Generate a dataset of GPA distributions among new-grad hires at top tech firms using the
gpafield fromeducations. - Power a job-prep app that surfaces real resumes for a given
companyslug so candidates can study formats that passed screening. - Filter by
schoolparameter to identify which universities are most represented among verified resumes at specific companies. - Compare resume structures across
levelvalues (intern vs. full-time) to study how detail and length shift with seniority.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does resumes.fyi have an official developer API?+
What does `get_resume` return that `list_resumes` doesn't?+
get_resume returns the complete skills array, full educations records (including degree, major, and gpa), and the full companies array with domain fields. list_resumes returns a summary subset of these fields sufficient for browsing but not for detailed analysis.Does the API return the actual resume PDF or only an image?+
resume_image_url field, which points to an image rendering of the resume. PDF files are not exposed. You can fork this API on Parse and revise it to add a PDF download endpoint if the source makes that format available.Can I filter resumes by a specific skill, such as 'Python' or 'Figma'?+
role, level, company, school, and verified_only. Skill-level filtering is not a supported parameter. You can fork this API on Parse and revise it to add a skill-based filter endpoint.How fresh is the resume data, and how many resumes are available in total?+
total field in list_resumes responses always reflects the current count matching your filters. Freshness depends on when resumes.fyi's own catalog is updated; the API returns whatever is currently available in the catalog.