The Splice field guide
How to Automate Data Extraction from Invoices
Learn how to automate data extraction from supplier invoices: field maps, validation rules, a sample walkthrough, and a cost worksheet for small businesses.
15 min readBy Splice Work

Here is a task that accumulates time cost quietly: treating data entry as a solved problem because you have always done it. Someone opens the PDF, reads the invoice number, types it into the spreadsheet, moves to the next field. It works. It is also the kind of task that accumulates quietly until it is suddenly a Tuesday afternoon.
When you automate data extraction, that transcription step is replaced by a process that reads the document, fills the fields, flags problems, and waits for a human to check the exceptions. This guide walks through what that process actually looks like on a real-ish invoice, what can go wrong on a small test batch, and how to decide whether the economics make sense before you wire anything together.
Your turn · A one-minute experiment
Which invoices pass all validation rules and which must go to the review queue?
Fictional one-minute exercise. All supplier names, invoice numbers, and figures below are invented for practice.
The situation
FICTIONAL INVOICE VALIDATION SCENARIO Business: Drumlin Office Goods (fictional) Extraction platform: fictional tool called FieldPull Validation rules in force: — EXPORT: All eight required fields present, no duplicate invoice_id in destination, arithmetic check passes (subtotal + tax = total within ±$0.02), due_date is after issue_date. — REVIEW QUEUE: Any single rule failure routes the entire row to the review queue. The Finance Lead resolves it. No row exports with an unresolved flag. Three rows returned by FieldPull after processing today's batch: ROW A — Invoice DRN-0091 supplier: Wexford Paper Ltd | invoice_id: DRN-0091 | issue_date: 2026-11-03 | due_date: 2026-12-03 | currency: USD | subtotal: 610.00 | tax: 48.80 | total: 658.80 DRN-0091 does not exist in the destination system. ROW B — Invoice DRN-0092 supplier: Wexford Paper Ltd | invoice_id: DRN-0092 | issue_date: 2026-11-04 | due_date: [BLANK] | currency: USD | subtotal: 940.00 | tax: 75.20 | total: 1015.20 DRN-0092 does not exist in the destination system. ROW C — Invoice DRN-0093 supplier: Wexford Paper Ltd | invoice_id: DRN-0093 | issue_date: 2026-11-05 | due_date: 2026-12-05 | currency: USD | subtotal: 2200.00 | tax: 176.00 | total: 2430.00 DRN-0093 does not exist in the destination system.
Choose what you would do, then open it to see the reasoning. You can explore every option.
A · Export Row A only; send Row B and Row C to the review queue.
Row A passes every rule: all eight fields are present, no duplicate key, and the arithmetic check holds (610.00 + 48.80 = 658.80 ✓). Row B fails on a missing required field — due_date is blank. The article is explicit: 'Do not invent a value. The correct response is to flag this row for human review and hold it out of the export batch.' Row C fails the arithmetic check: 2200.00 + 176.00 = 2376.00, not 2430.00 — a $54.00 discrepancy. The article states a mismatch 'should not proceed to export' and goes to the review queue with the discrepancy flagged for the Finance Lead to resolve.
B · Export Row A and Row B; send Row C to the review queue.
Row B cannot export. The due_date field is blank, which is a required-field failure under the validation rules. The article states clearly that a blank required field routes the row to the review queue — the extraction tool's job is to notice the gap and stop. Inventing or skipping a due_date to allow export is the error the review queue exists to prevent. Row C also fails arithmetic and must be queued, so this option is doubly incorrect.
C · Export all three rows because supplier and invoice_id are present on every row.
Having some required fields present does not satisfy the validation rules. Row B is missing due_date — a required field — which is a rule failure regardless of what other fields contain. Row C has an arithmetic mismatch of $54.00, well outside the ±$0.02 tolerance. The article describes validation rules as the logic that 'catches what extraction cannot,' and a row that breaks any rule goes to the queue. Exporting rows with unresolved flags defeats the entire purpose of building validation into the pipeline.
D · Send all three to the review queue because none have been confirmed by the Finance Lead.
Finance Lead confirmation is required before export, but it applies after validation — not instead of it. Row A passes all six validation checks and is the correct candidate for Finance Lead sign-off before export. Routing a clean row to the queue without cause adds unnecessary delay. The article draws a clear distinction: the review queue is for rows with unresolved flags; a clean row moves forward to the Finance Lead confirmation step, then export.
Validation rules act as a filter, not a formality. A single failed check — a blank required field or an arithmetic mismatch — holds the entire row in the review queue regardless of how many other fields are correct. Export only follows Finance Lead confirmation on rows that have passed every rule.
Extraction vs. Interpretation: Get This Straight First
People use "data extraction" and "data capture" interchangeably, which muddies what you are actually building.
Extraction means pulling defined field values out of a document: supplier name, invoice number, date, total. The result is structured data — rows and columns, typed values, ready to compare or load.
Interpretation means deciding what to do with those values: is this invoice approved? Is the total within the purchase order limit? Should it be paid today or queued? That is a business-logic step, not an extraction step, and it belongs downstream.
Keeping these two things separate is not pedantry. It is what lets you test extraction independently and catch problems before anything reaches your accounting system. BILL's invoice capture documentation draws the same line: capture is the first step; approval and payment are downstream, separate steps (BILL Learning Center — Invoice Capture).
Native PDF vs. Scanned PDF: Why It Matters
Not all PDFs are the same kind of document, and the extraction method has to match.
A native (digital) PDF is generated by software — an accounting system, a Word export, a web form. It contains encoded, selectable text. An extraction library can read it directly, the same way you would copy and paste from a browser.
A scanned PDF is a photograph of a page. It looks like text on screen, but the underlying file is an image. To extract field values, you first need optical character recognition (OCR) to convert the image into machine-readable text. Microsoft Azure Document Intelligence confirms this: scanned PDFs and photos of documents require OCR processing before structured extraction can occur (Microsoft Azure Document Intelligence — Overview). Google Cloud Document AI makes the same distinction: for non-searchable PDFs — scanned pages or PDFs with text inside images — OCR processing is recommended; searchable (native) PDFs generally do not require it (Google Cloud Document AI).
OCR accuracy depends on image quality, scan angle, resolution, and font. A supplier who photographs their invoice on a phone at an angle gives your tool a harder problem than one who exports a PDF from their accounting software.
Practical rule: know which document types arrive in your inbox before you choose a tool or set accuracy expectations. A workflow tuned for native PDFs will struggle on a scanned batch without OCR in the pipeline.
A Fictional Invoice and a Field Map
To make this concrete, here is a fictional supplier invoice. Everything that follows — the supplier name, amounts, and problems — is illustrative only.
Document: Northgate Supply Co. Invoice
Northgate Supply Co.
Invoice ID: NGS-0041
Issue Date: 14 Sep 2026
Due Date: 14 Oct 2026
Currency: USD
Subtotal: $4,200.00
Tax (8%): $336.00
Total: $4,536.00
This invoice is a clean case. Let's define the field map first, then introduce the problems.
Field Map
| Field | Source Location | Expected Type |
|---|---|---|
supplier | Header / sender name | Text |
invoice_id | Invoice number field | Text (unique key) |
issue_date | Invoice date | Date (YYYY-MM-DD) |
due_date | Payment due date | Date (YYYY-MM-DD) |
currency | Currency symbol or label | ISO code (USD, GBP…) |
subtotal | Pre-tax amount | Number |
tax | Tax amount | Number |
total | Amount due | Number |
Azure Document Intelligence's prebuilt invoice model extracts fields in this family — customer name, billing address, due date, amount due, line items — and returns them as strongly typed values: dates as dates, currency amounts as numbers, not raw strings (Microsoft Azure Document Intelligence — Prebuilt Invoice). That typed output is what makes downstream validation possible.
Three Problems on a Small Test Batch
Running three invoices through a new extraction workflow before enabling any automatic writes is an important habit to build early. Here is what a realistic three-invoice test reveals.
Invoice 1: NGS-0041 (Clean)
supplier: Northgate Supply Co.
invoice_id: NGS-0041
issue_date: 2026-09-14
due_date: 2026-10-14
currency: USD
subtotal: 4200.00
tax: 336.00
total: 4536.00
Passes extraction. Arithmetic check: 4200 + 336 = 4536. ✓
Invoice 2: NGS-0042 (Duplicate Invoice ID)
supplier: Northgate Supply Co.
invoice_id: NGS-0042
issue_date: 2026-09-15
due_date: [BLANK]
currency: USD
subtotal: 1,150.00
tax: 92.00
total: 1,242.00
Two problems here.
Missing due date. The field is blank. Do not invent a value. The correct response is to flag this row for human review and hold it out of the export batch. BILL's validation guidance confirms that data anomalies should route to manual verification rather than pass through automatically (BILL Learning Center — Invoice Validation).
Duplicate key check. Suppose NGS-0042 already exists in your system from a previous import. Your workflow needs a duplicate key rule: before writing any row, check whether invoice_id already exists in the destination. If it does, route to the review queue — do not overwrite silently. BILL's own documentation notes that an initial check should confirm your organisation has not already paid an invoice before processing continues.
Invoice 3: NGS-0043 (Arithmetic Mismatch)
supplier: Northgate Supply Co.
invoice_id: NGS-0043
issue_date: 2026-09-16
due_date: 2026-10-16
currency: USD
subtotal: 2,800.00
tax: 224.00
total: 3,100.00
Check: 2800 + 224 = 3024. The invoice states 3100. That is a $76 discrepancy.
This invoice should not proceed to export. It goes into the review queue with the discrepancy flagged clearly. The reviewer — let's call them the Finance Lead — decides whether to contact the supplier, correct the total, or reject the invoice. The extraction tool's job is to notice the mismatch and stop; the Finance Lead's job is to resolve it.
Review Queue
What Belongs in the Queue
A row enters the review queue when any of the following are true:
- A required field is blank (missing
due_date, missingsupplier, missinginvoice_id) - The
invoice_idmatches an existing record in the destination system - The arithmetic check fails:
subtotal + tax ≠ total(within a small rounding tolerance, e.g., ±$0.02) - The extraction tool returns a low-confidence score on any field
- The currency does not match the expected value for that supplier
What the Reviewer Sees
Each queued row should show the original document alongside the extracted values, so the reviewer can compare directly. The review task is not re-keying data — it is confirming or correcting one specific problem and approving the row for export.
Do not send rows with unresolved flags to the destination system. Extraction precedes export; export precedes any downstream action.
Defining Your Validation Rules Before You Build
Validation rules are the logic that catches what extraction cannot: business-policy problems rather than technical ones.
Write these down before you configure anything:
- Duplicate key rule. Which field uniquely identifies an invoice? (For example,
invoice_idcombined withsupplier.) What happens on a match — reject, flag, or update? - Required fields. Which fields must be present for a row to export? (Minimum:
invoice_id,supplier,issue_date,total.) - Arithmetic tolerance. How large a rounding difference is acceptable? (For example, ±$0.02. Anything larger goes to queue.)
- Date sanity check. Should
due_datealways be afterissue_date? Shouldissue_datebe within the last 90 days? - Currency whitelist. If you only transact in USD, flag anything else.
- Named reviewer. Who resolves queued items? For a small business this is usually the Finance Lead or the owner. Make it explicit so flagged rows do not sit unread.
Documenting rules before you build gives you a test specification. Any row that breaks a rule should end up in the queue. Any row that passes all rules should look identical to one you would have keyed manually.
Extraction Is Not Approval. Approval Is Not Payment.
This distinction matters enough to say plainly.
Extracting an invoice into a spreadsheet does not approve it. Approving it does not pay it. These are three separate steps with three separate humans (or human decisions) involved.
An extraction workflow ends when clean, validated rows reach the destination system or a review queue. What happens next — matching against a purchase order, getting sign-off from a budget holder, scheduling a payment run — is a downstream business process. BILL's workflow confirms this sequence: capture → validate → route exceptions → approve → pay (BILL Learning Center — Invoice Capture).
If you are building automation, start with extraction only. Prove the field map works on a real sample batch. Then consider which downstream steps are candidates for further automation, with appropriate approval gates.
Acceptance-Test Checklist
Before enabling automatic export to any live system, run this checklist on a sample of at least ten documents covering all document types you expect to receive.
Acceptance-Test Checklist — Extraction Workflow
- All eight required fields extract correctly for at least one clean native PDF
- All eight required fields extract correctly for at least one clean scanned PDF (OCR path tested)
- All eight required fields extract correctly for at least one email attachment
- A row with a blank
due_dateroutes to the review queue, not the export batch - A row with a duplicate
invoice_idroutes to the review queue with the conflict flagged - A row with an arithmetic mismatch routes to the review queue with the discrepancy shown
- All exported rows have been confirmed by the named reviewer before reaching the destination system
- Source documents are retained alongside extracted output for audit comparison
Do not mark this checklist complete until every item passes on your actual document sample, not on synthetic test files.
Cost Worksheet: Does It Make Sense?
No invented numbers here. Fill in your own.
| Input | Your figure |
|---|---|
| Invoices processed per month | ___ |
| Average minutes to key one invoice manually | ___ |
| Total manual minutes per month | (multiply) |
| Estimated % of invoices flagged for review | ___ % |
| Minutes to review one flagged invoice | ___ |
| Review minutes per month | (multiply flag % × volume × review time) |
| Tool cost per month (license or usage) | $___ |
| Setup cost amortised over 12 months | $___ /mo |
Calculate: time saved = (manual minutes per month) − (review minutes per month). Convert to hours. Multiply by the hourly cost of the person doing it. Compare to tool cost plus setup amortisation.
If review time is high because your documents are inconsistent — mixed layouts, scanned photos, handwritten fields — factor that into the tool cost comparison. Some tools handle variance better than others, but none eliminate human review entirely for exception-heavy batches.
review_lab
Field Map: Expected vs. Extracted Output
Use the table below to evaluate your first test batch before enabling automatic export. Fill in the "Extracted" column from your tool's actual output. Compare every field. Note flags.
| Field | Expected (NGS-0041) | Extracted | Match? | Flag? |
|---|---|---|---|---|
supplier | Northgate Supply Co. | |||
invoice_id | NGS-0041 | |||
issue_date | 2026-09-14 | |||
due_date | 2026-10-14 | |||
currency | USD | |||
subtotal | 4200.00 | |||
tax | 336.00 | |||
total | 4536.00 |
Then test each failure case: blank due_date (NGS-0042), duplicate invoice_id (NGS-0042 if already in system), arithmetic mismatch (NGS-0043 total 3100 vs. calculated 3024). Confirm all three route to the review queue rather than the export batch.
An Exercise You Can Do This Week
Pick five recent supplier invoices from your inbox. Mix sources if you can: one from a supplier who emails a native PDF, one from a supplier who sends a scanned copy.
For each invoice:
- Write down the eight field values manually.
- Run the document through whichever extraction tool you are evaluating.
- Compare field by field.
- Note any blank, misread, or missing value.
You will know, from five real documents, whether the tool handles your actual supplier formats — not a vendor's demo invoice. Five is a small number. Run it before you commit to a workflow, not after.
Where Automated Data Extraction Fits in a Bigger Workflow
Extraction is the input step. Once clean rows reach your spreadsheet or accounting system, you might want agents to handle what comes next: matching against open purchase orders, routing for approval in Slack, or updating records in QuickBooks or Salesforce.
That is where the pipeline gets more complex — and more specific to how your systems are connected. For teams whose document formats vary or whose stack spans several tools, a custom-built extraction pipeline may be more practical than an off-the-shelf product that handles one document type well and the rest poorly.
Splice Work's Custom AI Solutions service includes a documents-and-data agent example: an agent that reads PDFs, emails, and forms and enters the data into the system that should have it, with a person checking the exceptions. Listed connectors include Salesforce, QuickBooks Online, BILL, Stripe, Airtable, Gmail, Slack, and Twilio. An approval step in Slack or email is built in before anything financial happens, and every action is logged. If you need a connector or integration that differs from what's listed, Splice Work notes that anything with a reliable API or export can usually be connected — worth raising on a first call.
This is proposed/custom work: the scope, connectors, and approval logic are designed around your documents and systems, not a fixed product SKU. If your extraction need is straightforward and a standard tool covers it, that is probably the right call. If your documents are inconsistent, your stack is unusual, or you want the extraction wired directly into downstream approval and booking workflows, a custom build is worth scoping properly.
The AI for repetitive tasks guide on the Splice Work blog covers how to assess which tasks are genuine candidates for automation before committing to a build — useful reading before you decide what scope to bring to a first conversation.
diagram
Extraction Pipeline: Document to Review Queue or Export
Incoming document
│
▼
Native PDF? ──Yes──▶ Direct text extraction
│
No
│
▼
Scanned PDF / image ──▶ OCR processing ──▶ Text extraction
│
▼ (both paths join here)
Field mapping
(supplier, invoice_id, issue_date, due_date,
currency, subtotal, tax, total)
│
▼
Validation rules
┌─────────────────────────────┐
│ Missing required field? │──Yes──▶ Review queue
│ Duplicate invoice_id? │──Yes──▶ Review queue
│ Arithmetic mismatch? │──Yes──▶ Review queue
│ Low-confidence score? │──Yes──▶ Review queue
└─────────────────────────────┘
│
All pass
│
▼
Finance Lead confirmation
│
▼
Export to destination system
(spreadsheet / QuickBooks / BILL / etc.)
│
▼
Downstream: approval → payment
(separate process, separate step)
Illustrative workflow. Actual integration paths depend on your document types and systems.
Automated data extraction does not remove human judgment from your invoice process — it moves that judgment upstream, to exceptions that genuinely need it, rather than spreading it across every field of every document. That is the useful trade. Run the five-invoice exercise before you decide whether the trade makes sense for your volume and document mix.
Automated Voice Messaging System: A Small Business Guide
Landscape Company Software: What It Does and What It Misses
Text Message Bot for Small Business: When You Need One