How to OCR Scanned PDFs by Asking Claude
Every company has that folder: leases from the nineties, signed contracts that only exist as scans, supplier paperwork someone photographed in a hurry. To a computer they're photos — you can't search them, quote them, or ask about them.
If you already work with Claude, you don't need OCR software for this. Connect it to Apdf over MCP once, and “make this searchable” becomes a sentence — with the follow-up questions answered from the recovered text in the same conversation.
Connect Claude to Apdf
The MCP server lives at a single OAuth-signed endpoint — no API keys, no token files:
https://apdf.io/mcp/main
In Claude Desktop add it under Settings → Connectors → custom connector and sign in when the OAuth window opens. In Claude Code it's a one-liner:
claude mcp add --transport http apdf https://apdf.io/mcp/main
Confirm what you're dealing with
Point Claude at the scan (any publicly reachable URL) and ask. The agent checks the text layer before promising anything:
https://storage.example.com/lease-1997-scan.pdf
The read-pdf-content tool returns the evidence:
{
"pages_total": 2,
"characters_total": 0,
"pages": [
{ "page": 1, "characters": 0, "content": "" },
{ "page": 2, "characters": 0, "content": "" }
]
}
Make it searchable
OCR is heavy work, so the tool runs asynchronously: the agent gets a job id,
polls check-job-status, and comes back with the
result. You just keep talking:
The finished job carries the new file:
{
"id": "01KY70KVEE9KZKHF0WCXJ74R9A",
"created": "2026-07-23T08:14:03.000000Z",
"status": "successful",
"result": {
"file": "https://apdf-files.s3.eu-central-1.amazonaws.com/841339df6a61cd66582fc.pdf",
"size": 118042,
"pages": 2,
"expiration": "2026-07-23T09:14:32.656458Z"
}
}
Ask the document, don't read it
For a whole archive you don't even need the converted files —
search-pdf-content-with-ocr and
read-pdf-content-with-ocr run the OCR pass and
answer directly from the recovered text:
The search result pins the claim to the page and line it came from:
{
"search_text": "renew",
"results_total": 1,
"results_pages": 1,
"results": [
{
"page": "2",
"matched_line": "5. RENEWAL OPTION. Tenant shall have one option to renew for an additional five-year term, with",
"exact_word": "RENEW"
}
]
}
Where to go from here
The same connection carries every PDF operation — and the engagement layer behind them.
Related tutorials
Extract Text from Scanned Invoices for Automated Data Entry
Automate data entry from scanned invoices and receipts using Node.js and the Apdf OCR Read API. Extract vendor names, invoice numbers, and totals from image-based PDFs and feed them directly into your accounting system.
Convert Scanned PDFs to Searchable Documents with Python
Transform image-based scanned PDFs into fully searchable documents using Python and the Apdf OCR API. Perfect for digitizing paper archives, enabling text selection, and making legacy documents ready for modern search systems.
Search a PDF From Your Editor
The integration spec is a PDF and your questions arrive mid-function. With the editor connected over MCP, 'what's the retry policy?' comes back with the exact line and page — and a regex search turns 'list every error code' into one call with three cited matches.
Your code made the PDF.
Then it went dark.
Opened, read, re-read, dropped on page 4 — you never see any of it. Share the PDFs you generate through Apdf recipient links, and every signal becomes something you can act on: ping Slack, update the CRM, let an agent follow up. Same account, same API token, one more call.
API · Webhook · MCP