Affinda icon
developer-tools

Affinda

Best overall resume parsing API here for clean, multi-column, and messy PDFs with rich structured JSON.

Visit Affinda
PDF resume parsingStructured JSONMulti-layout supportSkill taxonomy metadata

Best overall parser in this test, set with cleanup still needed.

Affinda is the clear overall winner in this test set: it parsed all three resumes end-to-end, returned structured JSON, and stayed strong on clean, multi-column, and messy layouts. The tradeoff is that CGPA scores, some certifications, URL handling, and skill hygiene still need downstream validation.

Walkthrough of uploading resumes into the Affinda workspace and reviewing parsed fields in the document viewer.

In-Depth Review

Our detailed analysis of Affinda — features, performance, and real-world testing.

AD
AI Demos Team
Expert Reviewer
Verified Review

Feature-by-Feature Breakdown

Resume PDF Parsing to Structured JSON
Reliable
9/10
Test Summary
Feature tested: Resume PDF Parsing to Structured JSON
Result: Partial (9/10) — Reliable

Feature tested: Resume PDF Parsing to Structured JSON

Result: Partial (9/10)

Verdict: Reliable

Expected behavior: Accepts uploaded resume PDFs and turns them into machine-readable JSON, extracting core profile, work, education, certification, and related resume fields without manual mapping or template setup. In the evidence set it was exercised on a clean single-column resume, a two-column resume, and a messy resume.

Test case: PDF document → Text/code file

Input type: PDF document

Input used: Input artifact (PDF document): Clean resume input — Affinda Input.1.pdf

Observed output: Output artifact (Text/code file): Structured JSON was produced for the clean resume, with the main candidate fields, work history, education, certifications, and skills exported in named fields. — json output 1.txt

Input artifact: Input artifact (PDF document): Clean resume input — Affinda Input.1.pdf

Output artifact: Output artifact (Text/code file): Structured JSON was produced for the clean resume, with the main candidate fields, work history, education, certifications, and skills exported in named fields. — json output 1.txt

What changed: PDF document transformed into Text/code file

Test case: PDF document → Text/code file

Input type: PDF document

Input used: Input artifact (PDF document): Multi-column resume input — Affinda Input.2.pdf

Observed output: Output artifact (Text/code file): Structured JSON was produced for the multi-column resume, with both columns parsed into named fields. — json output 2.txt

Input artifact: Input artifact (PDF document): Multi-column resume input — Affinda Input.2.pdf

Output artifact: Output artifact (Text/code file): Structured JSON was produced for the multi-column resume, with both columns parsed into named fields. — json output 2.txt

What changed: PDF document transformed into Text/code file

Test case: PDF document → Text/code file

Input type: PDF document

Input used: Input artifact (PDF document): Messy resume input — Affinda Input.3.pdf

Observed output: Output artifact (Text/code file): Structured JSON was produced for the messy resume, with candidate data exported despite the non-standard formatting. — Json output 3.txt

Input artifact: Input artifact (PDF document): Messy resume input — Affinda Input.3.pdf

Output artifact: Output artifact (Text/code file): Structured JSON was produced for the messy resume, with candidate data exported despite the non-standard formatting. — Json output 3.txt

What changed: PDF document transformed into Text/code file

Test case: PDF document → Text/code file

Input type: PDF document

Input used: Input artifact (PDF document): input-1-clean-resume-rugved.pdf — Affinda Input.1.pdf

Observed output: Output artifact (Text/code file): Full JSON output — Affinda parsing clean resume — Affinda output.1.txt

Input artifact: Input artifact (PDF document): input-1-clean-resume-rugved.pdf — Affinda Input.1.pdf

Output artifact: Output artifact (Text/code file): Full JSON output — Affinda parsing clean resume — Affinda output.1.txt

What changed: PDF document transformed into Text/code file

Test case: PDF document → Text/code file

Input type: PDF document

Input used: Input artifact (PDF document): nput-2-multicolumn-resume-priya.pdf — Affinda Input.2.pdf

Observed output: Output artifact (Text/code file): Full JSON output — Affinda parsing multi-column resume — Affinda output.2.txt

Input artifact: Input artifact (PDF document): nput-2-multicolumn-resume-priya.pdf — Affinda Input.2.pdf

Output artifact: Output artifact (Text/code file): Full JSON output — Affinda parsing multi-column resume — Affinda output.2.txt

What changed: PDF document transformed into Text/code file

Test case: PDF document → Text/code file

Input type: PDF document

Input used: Input artifact (PDF document): input-3-messy-resume-john.pdf — Affinda Input.3.pdf

Observed output: Output artifact (Text/code file): Full JSON output — Affinda parsing messy resume — Affinda output.3.txt

Input artifact: Input artifact (PDF document): input-3-messy-resume-john.pdf — Affinda Input.3.pdf

Output artifact: Output artifact (Text/code file): Full JSON output — Affinda parsing messy resume — Affinda output.3.txt

What changed: PDF document transformed into Text/code file

Why it matters / Conclusion: A strong core parser pipeline: it accepted every PDF tested and returned structured JSON consistently.

Accepts uploaded resume PDFs and turns them into machine-readable JSON, extracting core profile, work, education, certification, and related resume fields without manual mapping or template setup. In the evidence set it was exercised on a clean single-column resume, a two-column resume, and a messy resume.

pdf
Affinda Input.1.pdf
txt
json output 1.txt
Loading file...
Structured JSON was produced for the clean resume, with the main candidate fields, work history, education, certifications, and skills exported in named fields.
pdf
Affinda Input.2.pdf
txt
json output 2.txt
Loading file...
Structured JSON was produced for the multi-column resume, with both columns parsed into named fields.
pdf
Affinda Input.3.pdf
txt
Json output 3.txt
Loading file...
Structured JSON was produced for the messy resume, with candidate data exported despite the non-standard formatting.
PDF
Affinda Input.1.pdf
JSON
Affinda output.1.txt
Loading file...
PDF
Affinda Input.2.pdf
PDF
Affinda output.2.txt
Loading file...
PDF
Affinda Input.3.pdf
PDF
Affinda output.3.txt
Loading file...
Bottom Line
A strong core parser pipeline: it accepted every PDF tested and returned structured JSON consistently.
From our researchParse resumes into structured data using an API
Skills Extraction with Taxonomy Metadata
Deep but noisy
Test Summary
Feature tested: Skills Extraction with Taxonomy Metadata
Result: Partial — Deep but noisy

Feature tested: Skills Extraction with Taxonomy Metadata

Result: Partial

Verdict: Deep but noisy

Expected behavior: Builds a detailed skills list from resume content, including taxonomy-style metadata and inferred technical skills. The tested outputs also showed duplicate skills and occasional contamination from certification names or unrelated taxonomy terms.

Test case: PDF document → Image

Input type: PDF document

Input used: Input artifact (PDF document): Clean resume input — Affinda Input.1.pdf

Observed output: Output artifact (Image): The skills panel shows repeated entries such as Research and Python, indicating duplicate skill extraction from the same resume. — image-3.png

Input artifact: Input artifact (PDF document): Clean resume input — Affinda Input.1.pdf

Output artifact: Output artifact (Image): The skills panel shows repeated entries such as Research and Python, indicating duplicate skill extraction from the same resume. — image-3.png

What changed: PDF document transformed into Image

Test case: PDF document → Image

Input type: PDF document

Input used: Input artifact (PDF document): Clean resume input — Affinda Input.1.pdf

Observed output: Output artifact (Image): The skills panel includes certification names as skills and shows IBM Mainframe even though it is not in the resume. — image-4.png

Input artifact: Input artifact (PDF document): Clean resume input — Affinda Input.1.pdf

Output artifact: Output artifact (Image): The skills panel includes certification names as skills and shows IBM Mainframe even though it is not in the resume. — image-4.png

What changed: PDF document transformed into Image

Test case: PDF document → Image

Input type: PDF document

Input used: Input artifact (PDF document): Multi-column resume input — Affinda Input.2.pdf

Observed output: Output artifact (Image): The skills panel shows a hallucinated skill term, American Welding Society Codes, that does not appear anywhere in the source resume. — image-8.png

Input artifact: Input artifact (PDF document): Multi-column resume input — Affinda Input.2.pdf

Output artifact: Output artifact (Image): The skills panel shows a hallucinated skill term, American Welding Society Codes, that does not appear anywhere in the source resume. — image-8.png

What changed: PDF document transformed into Image

Test case: PDF document → Image

Input type: PDF document

Input used: Input artifact (PDF document): Messy resume input — Affinda Input.3.pdf

Observed output: Output artifact (Image): The skills panel injects Business Education as a skill, which is another term that does not exist in the resume. — image-13.png

Input artifact: Input artifact (PDF document): Messy resume input — Affinda Input.3.pdf

Output artifact: Output artifact (Image): The skills panel injects Business Education as a skill, which is another term that does not exist in the resume. — image-13.png

What changed: PDF document transformed into Image

Why it matters / Conclusion: Useful for rich skill metadata, but the output needs deduping and hallucination filtering before production use.

Builds a detailed skills list from resume content, including taxonomy-style metadata and inferred technical skills. The tested outputs also showed duplicate skills and occasional contamination from certification names or unrelated taxonomy terms.

pdf
Affinda Input.1.pdf
image
Output artifact for "Skills Extraction with Taxonomy Metadata" test: The skills panel shows repeated entries such as Research and Python, indicating duplicate skill extraction from the same resume., image-3.png
The skills panel shows repeated entries such as Research and Python, indicating duplicate skill extraction from the same resume.
pdf
Affinda Input.1.pdf
image
Output artifact for "Skills Extraction with Taxonomy Metadata" test: The skills panel includes certification names as skills and shows IBM Mainframe even though it is not in the resume., image-4.png
The skills panel includes certification names as skills and shows IBM Mainframe even though it is not in the resume.
pdf
Affinda Input.2.pdf
image
Output artifact for "Skills Extraction with Taxonomy Metadata" test: The skills panel shows a hallucinated skill term, American Welding Society Codes, that does not appear anywhere in the source resume., image-8.png
The skills panel shows a hallucinated skill term, American Welding Society Codes, that does not appear anywhere in the source resume.
pdf
Affinda Input.3.pdf
image
Output artifact for "Skills Extraction with Taxonomy Metadata" test: The skills panel injects Business Education as a skill, which is another term that does not exist in the resume., image-13.png
The skills panel injects Business Education as a skill, which is another term that does not exist in the resume.
Bottom Line
Useful for rich skill metadata, but the output needs deduping and hallucination filtering before production use.
From our researchParse resumes into structured data using an API
Structured List Section Extraction
Useful
Test Summary
Feature tested: Structured List Section Extraction
Result: Passed — Useful

Feature tested: Structured List Section Extraction

Result: Passed

Verdict: Useful

Expected behavior: Extracts structured list sections such as languages, projects, and hobbies from resumes, returning items as arrays when present. In the tested resumes it captured language proficiency levels, multiple projects, and hobbies as list-like output.

Test case: PDF document → Text/code file

Input type: PDF document

Input used: Input artifact (PDF document): Multi-column resume input — Affinda Input.2.pdf

Observed output: Output artifact (Text/code file): The multi-column resume included extracted language entries with proficiency levels and both project entries in the JSON output. — json output 2.txt

Input artifact: Input artifact (PDF document): Multi-column resume input — Affinda Input.2.pdf

Output artifact: Output artifact (Text/code file): The multi-column resume included extracted language entries with proficiency levels and both project entries in the JSON output. — json output 2.txt

What changed: PDF document transformed into Text/code file

Test case: PDF document → Text/code file

Input type: PDF document

Input used: Input artifact (PDF document): Messy resume input — Affinda Input.3.pdf

Observed output: Output artifact (Text/code file): The messy resume exported hobbies as a structured array, while the language field stayed null because no languages were present. — Json output 3.txt

Input artifact: Input artifact (PDF document): Messy resume input — Affinda Input.3.pdf

Output artifact: Output artifact (Text/code file): The messy resume exported hobbies as a structured array, while the language field stayed null because no languages were present. — Json output 3.txt

What changed: PDF document transformed into Text/code file

Why it matters / Conclusion: Good at structured list sections, but some project text can be truncated and absent fields are not inferred.

Extracts structured list sections such as languages, projects, and hobbies from resumes, returning items as arrays when present. In the tested resumes it captured language proficiency levels, multiple projects, and hobbies as list-like output.

pdf
Affinda Input.2.pdf
txt
json output 2.txt
Loading file...
The multi-column resume included extracted language entries with proficiency levels and both project entries in the JSON output.
pdf
Affinda Input.3.pdf
txt
Json output 3.txt
Loading file...
The messy resume exported hobbies as a structured array, while the language field stayed null because no languages were present.
Bottom Line
Good at structured list sections, but some project text can be truncated and absent fields are not inferred.
From our researchParse resumes into structured data using an API

Pricing & Access

Plans as of May 2026. Tested on the free plan

TESTED
Basic Testing
Free
14-day free trial with all features, parsing limit of 200 documents, expires after 1 month
Advanced Testing
$80 one-time
3-month trial period for full integration testing, parsing limit of 2,000 documents, expires after 3 months
Tier 1
$800/year
6,000 parses per year, all features included, API access
Higher Tiers
Custom pricing
Bulk parsing packages available, more parses per year at lower cost per parse as volume increases, self-hosted annual subscription also available

Pricing checked May 2026. We re-check quarterly. Visit affinda.com for current enterprise pricing.

✓ Use This If
You need a resume parser API that handles clean single-column, multi-column, and messy PDF resumes without manual setup
You need structured JSON output with work history, education, skills, certifications, and list-style sections
You want language proficiency and project entries extracted when the source resume includes them
You are willing to post-process CGPA scores, dedupe skills, and validate a few edge cases
✕ Skip This If
You need CGPA numeric scores to be captured reliably without review
You need zero-hallucination skill output with no duplicate or taxonomy-driven noise
You need the full LinkedIn profile path preserved exactly
You need experience totals to always respect the resume's stated years instead of being calculated from dates
developer-toolsapisother
Yes. In this test set it accepted all three PDFs directly, with no manual field mapping or template setup, and produced structured JSON for each.
Not reliably. It recognized the grade unit as CGPA on the clean and multi-column resumes, but the numeric score fields stayed empty.
Not in the clean resume test. The LinkedIn value was split into separate website fields and the /in/ path segment was missing.
Yes, but incompletely. It extracted certifications on the clean and multi-column resumes, but on the messy resume it only captured one certification and missed the AWS Coursera entry.
Yes. On Priya Sharma's resume it returned English as Advanced C1 and Hindi and Marathi as Native/Bilingual C2.
Yes. The output included duplicates like Research and Python, plus noise such as AWS Certified Cloud Practitioner, IBM Mainframe, American Welding Society Codes, and Business Education.

Banner Preview

How the embed badge will look on your site

Affinda featured on AI Demos

Embed HTML

Copy this code to your website source

<a target="_blank" href="https://aidemos.com/tools/affinda?utm_source=affinda_embed" style="width: 250px; height: 80px; border-radius:4px;" width="250" height="80"> <img src="https://aidemos-website-images.s3.amazonaws.com/featured.png" alt="Affinda | Featured on AI Demos" style="width: 250px; height: 80px; border-radius:4px;" width="250" height="80"> </a>

Quick Integration Guide

  • 1Copy the HTML code block above.
  • 2Paste it into your site's HTML or CMS editor.
  • 3Banner appears instantly on your page.
  • 4Links back to your tool profile here.
Similar Tools

Similar Tools

Discover more AI tools like Affinda to enhance your workflow.

Comments (0)

Please Log in to join the discussion.

Back to Top