[ Accounts payable ]

Accounts payable automation, built on extraction you can trust

Sensible is the extraction layer under your AP workflow: schema-validated and traced to source coordinates, so your finance team can trust the data without checking it by hand.

14-day free trial · No credit card
Source document
Northbridge Studio
INVOICE
NB-2024-0418
Bill to
Stillwater Robotics, Inc.
2840 Innovation Way, Suite 410
Cambridge, MA 02142
Issue date
Apr 18, 2024
Due date
May 18, 2024
PO #
PO-2024-0284
Terms
Net 30
DescriptionQtyAmount
Strategy workshop facilitation2$3,700.00
UX research interviews8$3,400.00
Design system audit1$4,200.00
Account management12$2,220.00
Travel & expenses1$684.00
Subtotal
$14,204.00
Sales tax (MA 6.25%)
$887.75
Total due
$15,091.75
POST
/v0/extract/invoice
200 OK
{
"parsed_document": {
"invoice_number": {
"value": "NB-2024-0418",
"type": "string"
},
"vendor": {
"value": "Northbridge Studio",
"type": "string"
},
"bill_to": {
"value": "Stillwater Robotics, Inc.",
"type": "string"
},
"po_number": {
"value": "PO-2024-0284",
"type": "string"
},
"issue_date": {
"source": "Apr 18, 2024",
"value": "2024-04-18T00:00:00.000Z",
"type": "date"
},
"due_date": {
"source": "May 18, 2024",
"value": "2024-05-18T00:00:00.000Z",
"type": "date"
},
"payment_terms": {
"value": "Net 30",
"type": "string"
},
"line_items": [
{
"description": "Strategy workshop facilitation",
"qty": 2,
"amount": 3700
},
{
"description": "UX research interviews",
"qty": 8,
"amount": 3400
},
// + 3 more rows
],
"subtotal": {
"source": "$14,204.00",
"value": 14204,
"unit": "$",
"type": "currency"
},
"tax_total": {
"source": "$887.75",
"value": 887.75,
"unit": "$",
"type": "currency"
},
"total_due": {
"source": "$15,091.75",
"value": 15091.75,
"unit": "$",
"type": "currency"
}
},
"validations": {
"line_items_sum_to_subtotal": "pass",
"tax_matches_rate": "pass",
"total_reconciles": "pass",
"po_number_format": "pass"
}
}
11 fields
every value traces to page + bounding box
Source document
Stillwater Robotics, Inc.
PURCHASE ORDER
PO-2024-0284
Vendor
Northbridge Studio LLC
114 Brattle Street
Cambridge, MA 02138
Order date
Mar 28, 2024
Terms
Net 30
Project
Phoenix Rebrand
DescriptionQtyAmount
Strategy workshop facilitation2$3,700.00
UX research interviews8$3,400.00
Design system audit1$4,200.00
Account management12$2,220.00
Travel & expenses (NTE)1$700.00
Subtotal
$14,220.00
Order total
$14,220.00
POST
/v0/extract/purchase_order
200 OK
{
"parsed_document": {
"po_number": {
"value": "PO-2024-0284",
"type": "string"
},
"order_date": {
"source": "Mar 28, 2024",
"value": "2024-03-28T00:00:00.000Z",
"type": "date"
},
"buyer": {
"value": "Stillwater Robotics, Inc.",
"type": "string"
},
"vendor": {
"value": "Northbridge Studio LLC",
"type": "string"
},
"payment_terms": {
"value": "Net 30",
"type": "string"
},
"project": {
"value": "Phoenix Rebrand",
"type": "string"
},
"line_items": [
{
"description": "Strategy workshop facilitation",
"qty": 2,
"amount": 3700
},
{
"description": "UX research interviews",
"qty": 8,
"amount": 3400
},
// + 3 more rows
],
"subtotal": {
"source": "$14,220.00",
"value": 14220,
"unit": "$",
"type": "currency"
},
"total": {
"source": "$14,220.00",
"value": 14220,
"unit": "$",
"type": "currency"
}
},
"validations": {
"line_items_sum_to_subtotal": "pass",
"total_reconciles": "pass",
"po_number_format": "pass"
}
}
9 fields
every value traces to page + bounding box
Source document
Northbridge Studio
CREDIT MEMO
CM-2024-0031
Credit to
Stillwater Robotics, Inc.
2840 Innovation Way, Suite 410
Issue date
May 2, 2024
Against invoice
NB-2024-0418
PO #
PO-2024-0284
Reason
Hours adjustment
DescriptionQtyAmount
Account management: hours credited−2−$370.00
Subtotal
−$370.00
Sales tax (6.25%)
−$23.13
Total credit
−$393.13
POST
/v0/extract/credit_memo
200 OK
{
"parsed_document": {
"credit_memo_number": {
"value": "CM-2024-0031",
"type": "string"
},
"original_invoice": {
"value": "NB-2024-0418",
"type": "string"
},
"po_number": {
"value": "PO-2024-0284",
"type": "string"
},
"issue_date": {
"source": "May 2, 2024",
"value": "2024-05-02T00:00:00.000Z",
"type": "date"
},
"vendor": {
"value": "Northbridge Studio",
"type": "string"
},
"reason": {
"value": "Hours adjustment",
"type": "string"
},
"line_items": [
{
"description": "Account management: hours credited",
"qty": -2,
"amount": -370
}
],
"subtotal": {
"source": "−$370.00",
"value": -370,
"unit": "$",
"type": "currency"
},
"tax_total": {
"source": "−$23.13",
"value": -23.13,
"unit": "$",
"type": "currency"
},
"total_credit": {
"source": "−$393.13",
"value": -393.13,
"unit": "$",
"type": "currency"
}
},
"validations": {
"tax_matches_rate": "pass",
"total_reconciles": "pass",
"references_known_invoice": "pass"
}
}
10 fields
every value traces to page + bounding box

Hover a field to trace it to the source. Sample data; output is illustrative.

Per field

LLM or deterministic method

Per document

pricing, whatever the page count

SOC 2 + HIPAA

independently audited

No credit card

14-day free trial

Trusted by teams turning documents into production data

Why AP extraction is hard

Every vendor invoices differently. Your ledger needs one format.

  • Each supplier lays out fields in its own way
  • Line-item tables run across pages, merge cells and wrap descriptions
  • Totals that don’t add up reach the ledger unchecked
  • A PO number captured as a string can’t be matched to its receipt
Vendor chaos
One schema
Why AP extraction is hard in production

Where invoice extraction breaks in production

Headers, totals and line-item tables land somewhere different on every vendor’s document. Hybrid extraction handles the variation, and validation re-checks the math before anything reaches your ledger.

01

Vendor format diversity

QuickBooks exports, SAP invoices, handwritten bills, custom ERP outputs: each one places fields somewhere different. Hybrid extraction (LLM parsing plus SenseML rules) absorbs the variation instead of breaking on it.

02

Line item table extraction

Multi-page tables, merged cells, multi-line descriptions and varying tax codes. Quantity, unit price, tax and amount stay attached to the right row, and page breaks are handled without you noticing them.

03

Calculation validation

Do the line items sum to the subtotal? Does the tax match the rate? Does the grand total reconcile? This check catches a bad extraction before it reaches the ledger, not after.

04AP-specific

PO and three-way-match readiness

An invoice’s PO number is only useful if it can be checked against the PO and goods receipt it references. Extraction has to keep that reference clean enough to match on, not just capture it as a string.

What Sensible extracts

The fields we extract

Grouped the way AP teams ask for them. Each field comes back typed, keeps the text as printed, and points to where it sits on the page.

Field
Schema key
How Sensible handles it
Validated in
Invoice number
invoice_numberstring
Kept as printed; part of a duplicate-check key in your system.
Invoice date
invoice_datedate
ISO 8601 value, with the printed text kept as source.
Due date
due_datedate
ISO 8601 value, printed text kept.
PO number
po_numberstring
Format-checked and clean enough to match a PO and receipt.
PO format
Vendor name
vendor_namestring
Mapped from “From”, “Billed by”, “Seller” and the like.
Vendor address
vendor_addressstring
As printed, from the header or footer.
Bill-to name
bill_to_namestring
The billed entity, for routing.
Bill-to address
bill_to_addressstring
As printed.
Payment terms
payment_termsstring
As written (Net 30, 2/10 Net 30).
Field
Schema key
How Sensible handles it
Validated in
Description
descriptionstring
Multi-line descriptions stay in one row.
Quantity
quantitynumber
Parsed to a number; credit-memo negatives handled.
Unit price
unit_pricecurrency
A number, with the printed text kept as source.
Unit of measure
unit_of_measurestring
Hours, each, per diem: whatever is printed.
Discount
discountcurrency
Row-level, when present.
Tax amount
tax_amountcurrency
Row-level tax for mixed tax codes.
Tax
Extended amount
extended_amountcurrency
The row total. Tables across page breaks read as one.
Subtotal
SKU / part number
skustring
When present, so lines can match PO lines.
Field
Schema key
How Sensible handles it
Validated in
Subtotal
subtotalcurrency
Checked against the sum of the lines.
Subtotal
Discount total
discount_totalcurrency
Document-level discount.
Tax total
tax_totalcurrency
Checked against the stated tax rate.
Tax
Shipping / freight
shipping_freightcurrency
Kept apart from goods so the subtotal check stays clean.
Grand total
grand_totalcurrency
Must reconcile: subtotal + tax + shipping − discount.
Total
Amount paid
amount_paidcurrency
For part-paid invoices and deposits.
Balance due
balance_duecurrency
What is actually payable now.
Currency
currencystring
As printed, so multi-currency AP does not guess.
Your schema, not a fixed list.
Every AP team’s schema is different, so this is a starting point mapped to yours. Commonly added: GL code, cost center, ship-to, remit-to details, vendor tax ID, GRN number, project code, early-pay terms.
How it works

How an invoice moves through Sensible

Five stages, and every field keeps its page and bounding box all the way through.

01

Ingest

PDF, scan, email attachment or spreadsheet. Any source, no pre-sorting.

in files, email, API
out normalized pages
02

Classify

Document type identified (invoice, PO, credit memo, remittance) before extraction runs.

in normalized pages
out typed document
03

Extract

Hybrid AI plus deterministic SenseML rules pull header, line item and total fields, whatever the layout.

in typed document
out candidate fields
04

Validate

Calculation checks run automatically: line items to subtotal, tax to rate, PO reference format. Discrepancies are flagged for review.

in candidate fields
out checked fields + flags
05

Deliver

Schema-enforced JSON, every field traced to page and bounding box, sent by webhook or pulled by API.

in checked fields
out JSON to your system
Sensible: the extraction layer
Then

Webhook or API into your AP system, ERP or matching engine. Three-way matching, approval routing, posting and payment happen there. Sensible hands over data you can trust; it doesn’t run those steps.

Every field is traceable
total_due → page 1
bbox [412, 688, 540, 712]
source "$15,091.75"
Validation, not just extraction

How the numbers get checked

Getting a number out of a PDF is the easy part. The question your finance team asks is whether it’s the right number, so Sensible checks each invoice the way an AP clerk would. When a check fails, the field is flagged and can be routed for review instead of flowing into your ledger.

Validation results
NB-2024-0418
✓
Line items sum to subtotal
5 lines add up to the stated subtotal
$14,204.00
✓
Tax matches rate
6.25% of the subtotal equals the stated tax
$887.75
✓
Grand total reconciles
Subtotal + tax − discount = total due
$15,091.75
✓
PO reference format
Matches your PO number pattern
PO-2024-0284
!
A check that fails
Lines sum to $14,204.00 but the subtotal reads $14,240.00, so the field is flagged and sent to review
review
Our position

We don’t publish a flat accuracy percentage. Accuracy depends on document quality and configuration, and a single number hides both.

Sensible
Self-serve or managed

Don’t want to build the AP config yourself? Our team can run the extraction backend for you.

Solutions engineers handle plan, build, deploy and adjust on your behalf. You see clean JSON in your API response. Same engine as self-serve, with the configuration work done for you.

01

Plan

Engineers review your samples and pick the right method.

02

Build

SenseML configs written from your samples.

03

Deploy

Same engine as self-serve, ready for production.

04

Adjust

Configs updated when formats shift or new edge cases appear.

05

Integrate

Help with custom integration into your downstream systems.

Supported formats

Any vendor, any accounting system, any country

The extraction logic is written out in SenseML rather than buried in prompts, so a new format can be added and reviewed.

By source

QuickBooks · Xero · NetSuite · SAP · Oracle · FreshBooks · Wave · Custom / manual invoices

By invoice type

Standard invoices · Credit memos · Debit notes · Proforma invoices · Recurring invoices · Construction progress billing

Purchase orders

Extracted against the same schema as the invoices that reference them, so the two can be compared field for field.

Goods receipts

Received quantities captured in the same shape, so invoice lines can be matched against what actually arrived.

Remittance advices

Payment references pulled out so they can be tied back to open invoices.

File formats

PDF (native or scanned) · Word · XLSX / XLS / CSV · JPEG / PNG · TIFF · Email bodies with attachments

Common questions

Questions from AP teams

Matching, duplicates, pricing, and where Sensible stops and your AP system starts.

Does Sensible do invoice-to-PO-to-receipt three-way matching itself?+

No. Sensible is the extraction layer. It reads the invoice, the purchase order and the goods receipt, and captures the reference fields that tie them together (PO number, line quantities, unit prices, totals) in a consistent, schema-validated shape. The matching logic itself, including tolerances and exception handling, lives downstream in your AP system, ERP or matching engine.

Can Sensible flag likely duplicate invoices?+

Not as a built-in feature. Sensible’s validation rules run against one document at a time, and spotting a duplicate needs a comparison across documents you have already processed.

What Sensible does give you is a reliable duplicate key on every invoice: vendor, invoice number, invoice date and grand total, extracted the same way each time. Checking that key against your history belongs in your AP system or ERP. If you want that wired in as part of the pipeline, our managed-services team can help with the integration.

How does per-document pricing work for high-volume AP teams?+

Sensible prices per document, not per token, so cost is predictable at 500 invoices a month or 50,000. There is no token-volatility surprise when a vendor sends a 40-line invoice instead of a 4-line one. Volume discounts are available for higher throughput; see pricing or talk to our team for a volume quote. Per-page pricing is also available for AP teams that prefer it. Talk to our team for more information.

How does Sensible catch bad extractions before they reach the ledger?+

Validation rules cross-check that line items sum to the subtotal, that tax matches the stated rate, and that the grand total reconciles. Discrepancies are flagged automatically and can be routed to human review. Results are delivered by webhook or API.

How accurate is the extraction?+

Accuracy depends on document quality and configuration, so we don’t quote a single flat number. What we can tell you is how the output is checked: schema enforcement and calculation validation, so weak extractions are flagged instead of passed through silently. The best way to know is to run your own invoices, including the ugly ones, through it.

How is invoice data secured, and how long is it retained?+

Sensible is SOC 2 Type II certified and HIPAA compliant, with data encrypted in transit and at rest. Document data is stored indefinitely by default; custom retention policies are available, including same-day deletion.

Try Sensible on your documents.

Bring the document your team dreads. If it works on that one, you'll know.

14-day free trial on the Growth Plan · No credit card