The problem
Tax preparers get buried every intake season re-keying client-submitted W-2s, 1099s, and prior-year returns by hand — and the bottleneck is worst exactly when volume peaks, January through April.
How Dokyumi solves it
Build one schema per form type — a W-2 schema, a 1099 schema, a 1040 schema — and select the right slug on the shared extraction endpoint. Give clients a white-label upload portal (available on every plan, with more portals on Growth and Enterprise) so they submit documents directly instead of emailing PDFs back and forth.
Dokyumi returns structured data with a model-reported confidence map and validation details. Resolve review results before mapping the fields into your tax software's intake step.
Example schema and result
A real schema shape for tax prep documents, and the JSON you get back from one extraction.
Example schema definition
{
"slug": "w2-parser",
"name": "W-2 Parser",
"description": "Extracts wage and withholding data from employee W-2 forms",
"ocr_mode": "standard",
"fields": [
{
"key": "employer_name",
"type": "string",
"required": true
},
{
"key": "employer_ein",
"type": "string",
"required": true
},
{
"key": "employee_name",
"type": "string",
"required": true
},
{
"key": "wages_box1",
"type": "currency",
"required": true
},
{
"key": "federal_tax_withheld_box2",
"type": "currency",
"required": false
},
{
"key": "ss_wages_box3",
"type": "currency",
"required": false
},
{
"key": "medicare_wages_box5",
"type": "currency",
"required": false
},
{
"key": "state",
"type": "string",
"required": false
}
]
}Result — POST /api/v1/extract
{
"id": "865b0cef-e441-48d2-9d91-07131ac700f4",
"status": "completed",
"request_id": "10bc808d-7b36-4cc9-a0c1-6110fd266a8b",
"schema": "w2-parser",
"data": {
"employer_name": "Brightline Manufacturing Inc.",
"employer_ein": "84-1234567",
"employee_name": "R. Chen",
"wages_box1": 68450,
"federal_tax_withheld_box2": 8760,
"ss_wages_box3": 68450,
"medicare_wages_box5": 68450,
"state": "CA"
},
"confidence": {
"wages_box1": 0.99,
"employer_ein": 0.97,
"federal_tax_withheld_box2": 0.98
},
"validation": {
"valid": true,
"errors": [],
"low_confidence_fields": []
},
"meta": {
"processing_time_ms": 1050,
"page_count": 1,
"credits_used": 1,
"ocr_cached": false,
"model": "anthropic/claude-sonnet-4"
}
}How it works
Build a schema per form type
W-2, 1099, and 1040 each get their own schema.
Send clients a branded portal link
Or accept uploads directly via the API.
Inspect the structured response
Review the data, confidence map, validation errors, and low-confidence fields.
Import after review
Resolve review results before mapping the direct API response into tax software; upload-site submissions can also use a configured webhook.
Tax Prep FAQ
Does this replace my tax prep software?+
Can clients upload documents themselves?+
What if a client only needs W-2 or 1099 parsing, not a custom schema?+
How does Dokyumi handle SSNs and other sensitive fields on tax forms?+
Can one schema handle every 1099 variant (NEC, MISC, INT, DIV)?+
Related use cases
Lending & Underwriting
Pull income and asset figures from pay stubs, bank statements, and tax returns without re-keying a single number.
Accounts Payable
Extract vendor, line-item, and total data from invoices and receipts — no template building, no AWS Textract setup.
Healthcare Billing
Pull claim numbers, billed/allowed amounts, and CPT codes off EOBs and medical bills instead of re-typing them.