Document extraction that remembers.
Send invoices, statements and IDs from any sender, as PDFs, scans or photos. Every layout answers with the same keys, under your own field names, so there is no parser to write. docRefinery learns each layout once, then remembers it.
100 pages a month free. No credit card. Or try one document with no account.
What you send
Harbor & Pine Studio

What your team sees
Your field names, each cited to the page
Remembered · seen 12×
What your API receives
Clean JSON, one shape for every document
[
{ "alias": "invoice_number",
"text": "HP-2026-0417",
"field_confidence": 0.99,
"location": { "page": 1 } }
{ "alias": "bill_to",
"text": "Calder Ridge Supply Co.",
"field_confidence": 0.99,
"location": { "page": 1 } }
{ "alias": "amount_due",
"text": "9428.58",
"field_confidence": 0.99,
"location": { "page": 1 } }
]
Sample documents with fictional data. Scores are illustrative. Point at any value to follow it.
Reads the paperwork you already get: PDFs, scans and photos, in 70+ languages and scripts
- Invoice
- RechnungInvoice
- 請求書Invoice
- كشف حسابBank statement
- ConnaissementBill of lading
- LohnabrechnungPayslip
- 영수증Receipt
- FacturaInvoice
- Bon de commandePurchase order
- 提单Bill of lading
- Extrato bancárioBank statement
- Счёт-фактураInvoice
- PasaportePassport
- فاتورةInvoice
- 領収書Receipt
- FatturaInvoice
- KontoauszugBank statement
Printed anywhere, in any words. It lands in the same place.
Each supplier puts the invoice number, the amount and the due date somewhere different, and calls them something different. You get them in the same three fields, every time, named the way you chose.

Your invoice record
- Invoice numberprinted “Invoice No.” HP-2026-0417
- HP-2026-0417
- Amount to payprinted “Amount Due” $9,428.58
- 9428.58USD
- Due dateprinted “Due Date” November 2, 2026
- 2026-11-02
Same three fields for every supplier. Dates and amounts written one way. Sample suppliers and values.
Follow one invoice all the way through
From the moment it arrives to the moment it lands in your system, and what changes the next time that sender writes.

- 1Sender recognisedHarbor & Pine Studio, seen 12×
- 2Total matches the line items$9,428.58
- 3Due date falls after the invoice date2026-11-02
- 4Ship-to differs from bill-toSent to a person, by your rule
- 5IBAN not on the pageOnly an account ending is printed, so null, not guessed
Ready to post, one field for review
The first invoice teaches it. The rest are remembered.
Most extractors read your five hundredth invoice as though it were the first. docRefinery learns a sender’s layout once, and every document after starts from what it already knows.
First invoice
Harbor & Pine
New layout, learned
Two values go to a person. Their answers are kept.
2 values for a person
Second invoice
Harbor & Pine
Recognised on sight
The correction comes back as a suggested fix, tested on this layout first.
1 value for a person
Five hundredth invoice
Harbor & Pine
Remembered, seen 500×
Quicker and steadier. If the sender changes its form, the layout is re-trained.
0 values for a person
Illustrative: the same sample invoice layout, shown three times.
Put anything on Runway
Send a mixed pile: invoices, statements, receipts, bills. You never say what any of them is. Runway works out each one and returns the fields your team set for that type.
You send
POST /v1/runway/async
Seven files, three languages, two of them photos. No labels.
Runway returns
scan_0412.pdf is an
Invoice
document_type confidence 0.98

Your fields for an invoice
invoice_number
HP-2026-04170.99
bill_to
Calder Ridge Supply Co.0.99
due_date
2026-11-020.98
po_number
CRS-882140.97
line_items
4 rows0.96
Same shape for every type: one parser reads them all.
20 types and 785 fields ready on day one. Remembered after the first from each sender.
Not in the catalogue? We train your type freeFine-tune a sender’s layout before it runs
Classification tells you what a document is. Fine-tune decides exactly what you get from one sender: the fields only they print, an instruction in your words, the accuracy you need. Approve it once and every document of that layout follows it.
The document is recognised and the fields for its type are lined up. Nothing has run yet.

Harbor & Pine Studio · invoice · the same layout every month
Harbor & Pine Studio
Invoice numberHP-2026-0417 · ≥ 0.85
System-optimised instruction
Due date2026-11-02 · ≥ 0.85
System-optimised instruction
2 fields · 0 in your words
Field-level governance. Your organisation decides what gets extracted.
An admin defines each field once: a plain instruction, the key it returns as, its type, whether it is required and the confidence it must reach. Every call obeys it. Try it: switch a field or move a threshold.
Owners and admins edit. Members run.
- Invoice numberThe supplier’s own referenceinvoice_number · TextRequired
- Total dueThe amount to pay, after taxtotal_due · AmountRequired
- Due dateWhen payment is duedue_date · DateOptional
- Bank accountFull IBAN, only if printed in fulliban · TextOptional
- Cost centreInternal code, if the supplier prints itcost_centre · TextOptional
What every caller receives
- "invoice_number": "HP-2026-0417"0.99
- "total_due": "9428.58"to review
- "due_date": "2026-11-02"0.93
- "iban": nullnot on page
4 approved fields. Anything below its threshold goes to a person, not to your system.
What a caller cannot do
POST /v1/runway/async?fields=salary,home_address
The extraction call takes no field list at all. A key can only receive the fields your organisation approved.
Everything between the document and your system
A short review queue, rules you set once, a citation on every value, and nothing invented.
Your team clears a short queue
Only values below your threshold reach a person. They confirm or correct, and every change is kept.
Review queue3 waiting · threshold 0.85
- Northwind FreightPO referencePO-77?412 · 0.61Review
- Halden MutualClaim total2,310.00 · 0.72Review
- Kestrel LinesGross weight19.0? · 0.58Review
- Cascade PowerDue date2026-10-29 · 0.97Approved
Every value cited
Each value carries its page, its box and a confidence score.

invoice_numberpage 1 · 0.99
Null, never guessed
If a value is not on the page it comes back null, never a plausible guess.
Invoice no.NWF-20418
PO referencePO-77?412
VAT IDnull
Rules set once, from one sample
Upload one document, keep the fields you want, add rules, and replay past documents before going live.
AP invoices · rules
total_dueequals the sum ofline_itemsdue_dateis afterissue_date- Below
0.85, send to review
- Version 4Live
- Version 3Replayed on 212 files
- Version 2Compared
Long files, split
A long file is separated into the documents inside it, up to 100 MB per upload.







70+ languages and scripts
Left to right, right to left, and the alphabets in between.
InvoiceRechnungFacturaفاتورة請求書СчётFatturaबीजकFaktura
Not on our list? We train it, free.
The catalogue covers 20 document types. When yours is missing, we train it on your samples, host it, and retrain it when the form changes. You pay only for the pages you extract.
In the catalogue
- Invoice
- Receipt
- Bank statement
- Purchase order
- Utility bill
- Passport
- Bill of lading
- and 13 more
Yours, when it is missing
An example type. It gets its own fields, thresholds and governance, like any built-in one.
What it costs you
- Training a classifier for your types
- No charge
- Hosting and running it
- No charge
- Retraining as your documents change
- No charge
- Help with fields, thresholds and rollout
- No charge
- Extraction volume once it is live
- Your normal plan
Built for the teams who live in paperwork
The advantage grows wherever the same senders keep sending the same forms.
Accounts payable
A fixed supplier list sending the same forms every month is the best case this product has.
Your vendor list barely changes. A few hundred layouts cover years of invoices, and each one is learned the first time it arrives.
- Invoices
- Purchase orders
- Remittance advice
- Credit notes
Invoice
Purchase order
Receipt
Why not just ask a general LLM?
It will read a document. It will not tell you when it guessed, where a value came from, or remember the sender next month.
Field accuracy on 2,400 business documents
Invoices, receipts, statements and IDs from 310 senders, 14 languages. Each system scored on the same hand-checked fields.
2,400 documents
docRefinery98.1%
Manual entry, single pass96.3%
General-purpose LLM, prompted91.4%
Template OCR86.7%
Open-source parser81.2%
Scale from 0 to 100%. Fields a system left blank count as wrong; a correct null counts as right.
Run your own documentA field is missing
A general LLM: Can return a plausible value
docRefinery: Returns null, and says so
Where a value came from
A general LLM: Hard to trace
docRefinery: Page and box for each value
How sure it is
A general LLM: No score you can act on
docRefinery: A score on each field, with your threshold
The same sender next month
A general LLM: Starts from nothing
docRefinery: Remembered, and learns from corrections
Where it runs
A general LLM: Usually someone else’s cloud
docRefinery: Our cloud, your VPC, or air-gapped
Early access, built in the open
What runs today, what is still being built, and a direct line to the people building it.
Running today
- Managed cloud, private VPC or air-gapped
- A review queue with your own thresholds
- A workflow from one sample
- REST API, with keys per account
- Export to JSON, CSV or XLSX
- Long files split, up to 100 MB
- Chrome extension, in early access
Being built
- Webhooks and integrationsIn design
- Salesforce and CRM write-backPlanned
- SSOPlanned for Enterprise
- SOC 2 Type IIAudit in progress, no report yet
- Presentations and wider office formatsIn development
Being built, not shipped. Status on the roadmap.
What you get in early access
- A direct line to the engineers building it
- A say in what ships next
- 100 pages a month free, no credit card
Early access is open to anyone with a Google account. Sign up, run your own documents, and tell us what is missing.
What does retyping cost you?
Move the sliders to match your team. The result is your own numbers, not a promise.
One call in. Clean JSON out.
No schema needed to start: send a document and get back what matters on it. When you want the same fields every time, set them once.
curl -X POST https://api.docrefinery.com/v1/runway/async \
-H "Authorization: Bearer $DOCREFINERY_KEY" \
-F "file=@invoice.pdf"200 Response
{ "status": "fulfilled", "document_type": "invoice",
"fields": [
{ "alias": "invoice_number", "text": "HP-2026-0417",
"field_confidence": 0.99, "location": { "page": 1 } },
{ "alias": "iban", "text": null }, …
] }API keys are switched on per account, so ask us when you are ready. Until then, run documents in the dashboard.
REST API
POST a file, poll, and read structured JSON.
{ "status": "fulfilled" }
A workflow from one sample
Upload one document and keep the fields you want.
invoice_numbertotal_dueline_items
Chrome extension
Early access. Fills the form in your open tab.
3 fields matched on this pageFill
Export
JSON, CSV or XLSX, with corrections applied.
results.xlsxresults.csvresults.json
Runs where your documents live
Managed cloud by default. Your private VPC or fully air-gapped on the Enterprise plan, on models inside your network.
Managed cloud
Pages are read inOur cloud
Leaves your networkYes
Available onEvery plan
Private VPC
Pages are read inYour cloud account
Leaves your networkNo
Available onEnterprise
Air-gapped
Pages are read inYour own hardware
Leaves your networkNo
Available onEnterprise
Encrypted
In transit and at rest
Retention you set
From 7 days to custom
SOC 2 Type II
Audit in progress, no report yet
SSO
Planned for Enterprise
Webhooks
In design
Also being built: wider office formats, a retrieval pipeline and CRM write-back. See the roadmap.
Start free. Pay by the page.
Starter
Free
up to 100 pages a month
For trying it on real documents. No credit card and no trial clock.
Start freeTeam and Scale
Custom
subscription or per page
For production: the review queue, reviewer seats, volume pricing and custom classifiers.
Contact salesEnterprise
Custom
annual contract
For documents that cannot leave your network: private VPC or air-gapped.
Contact salesSales quotes the exact rate from your volume, document types and deployment. See every plan.
docRefinery is a document data extraction API, a form of intelligent document processing (IDP). It reads a PDF, scan or photo, OCR included, and returns structured fields with confidence scores. Teams use it for invoice extraction in accounts payable, and for lending, KYC, insurance claims and logistics paperwork. You define the output, every document type answers in the same format, and it learns each sender’s layout once and remembers it.
Invoices, bank statements, receipts, purchase orders, utility bills, passports, bills of lading and more: 20 types in the catalogue, in 70+ languages and scripts. Files can be PDFs, scans or photographs, and spreadsheets (.xlsx, .ods, .csv) on the API where your deployment enables them. Presentations and wider office formats are in development, and a retrieval pipeline is planned; neither is available yet.
Confidence scoring is on by default: fields come back with a score earned from the page, and you set the threshold for each field. A field that is not on the page comes back null rather than a plausible guess. Anything below your threshold goes to a review queue, where a person confirms or corrects it and every change is kept. A correction becomes a suggested fix, tested on that layout’s own documents before anyone applies it.
Through a REST API. POST a file to /v1/runway/async, poll for the run, and read structured JSON. When you want the same fields every time, build a workflow from one sample document and run it by its id. Results export as JSON, CSV or XLSX, and a Chrome extension in early access fills the form in your open tab. API keys are switched on per account, so talk to us when you are ready to connect a system; until then you can run documents in the dashboard. Webhooks are in design, not available yet.
Yes. Private VPC and fully air-gapped on-premises deployment run today on the Enterprise plan, on models hosted inside your network, so a document never has to leave it.
Not yet. Our SOC 2 Type II audit is in progress, with no report yet. SSO is planned for Enterprise and not available yet. We make no data-residency commitments yet.
Bring one vendor’s invoices.
We’ll remember the rest.
The first document teaches us the layout. Every one after it is recognised on sight.
100 pages a month free. No credit card.