One API for documents and the web
Invoices, receipts, forms, IDs — and any live URL. Point a document at
POST /api/v1/extract, a page at
/api/v1/screenshots, or do both: capture
a URL, then extract its data in one call.
dOCR captures PDFs, images, and live web pages — and returns the exact fields you define as JSON. Skip the browser cluster and the OCR-plus-parsing pipeline; call one API.
$ curl -X POST docr.dev/api/v1/screenshots -d '{"url":"stripe.com"}'
{
"title": "INV-2042",
"amount": "1,280.00",
"date": "2026-07-15"
}
structured JSON, ready to use
Trusted by teams processing millions of documents
Capabilities
dOCR owns the messy parts — rendering pages and parsing documents — so you get clean screenshots and typed, validated JSON instead of a browser cluster and a wall of OCR text.
Invoices, receipts, forms, IDs — and any live URL. Point a document at
POST /api/v1/extract, a page at
/api/v1/screenshots, or do both: capture
a URL, then extract its data in one call.
dOCR returns the typed fields you defined — each one located, validated, and scored — so you write zero parsing code.
Render any page to PNG, JPEG, WebP, or PDF — full-page, any device viewport, retina. dOCR blocks ads and cookie banners for you. No headless browser to babysit.
Most documents come back in a couple of seconds — multi-page PDFs included — so dOCR fits inside a request, not a nightly batch job.
Define the fields you want once as a
documentType, and every extraction
returns that exact shape — same keys, same types, every time.
Upload in the dashboard to try things out and browse Extraction History, then automate
the same extraction from your backend — one
POST, no infrastructure to run.
Developer experience
No SDK to learn, no browser cluster, no model to host. Call a single endpoint from any language and dOCR returns a rendered page or the fields you defined as JSON.
const form = new FormData();
form.set('file', await openAsBlob('invoice.pdf')); // PDF, image, or DOCX
form.set('documentType', 'invoice');
const res = await fetch('https://docr.dev/api/v1/extract', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.DOCR_API_KEY}` },
body: form,
});
const { data } = await res.json();
// → { invoiceNumber: 'INV-2042', total: '1280.00', dueDate: '2026-07-15' } const res = await fetch('https://docr.dev/api/v1/screenshots', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.DOCR_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ url: 'https://stripe.com', fullPage: true, blockCookieBanners: true }),
});
const { screenshot } = await res.json();
// → { id: 'cap_…', status: 'ready', format: 'png', url: 'https://…' } curl https://docr.dev/api/v1/extract \
-H "Authorization: Bearer $DOCR_API_KEY" \
-F file=@invoice.pdf \
-F documentType=invoice Transparency
Every extraction is traced from upload through OCR, field extraction, and schema validation — with structured logs alongside. When a field looks off, you know which stage produced it and how confident dOCR was.
Every extraction is logged to your dashboard — confidence scores, page counts, and timings, no setup required.
Customers
“We deleted an entire OCR-and-regex pipeline. dOCR returns the exact fields we defined as clean JSON — invoice processing that took our team days now runs in seconds.”
“Custom document types were the moment it clicked. We described the fields once, and accuracy on our messy scanned receipts jumped immediately.”
“We prototyped in the dashboard in an afternoon, then moved the same extraction to the API in a few lines. No model to train, no infrastructure to run.”
Screenshot a URL or pull structured data from any document — same key, same endpoint family. Start free — no credit card, no pipeline to build. Pay as you scale.