Invoice to QuickBooks — Real Extraction Walkthrough
A real vendor invoice processed by Parsli and posted to QuickBooks Online as a Bill — with the original PDF attached. Here's exactly what went in, what came out, and what landed in QuickBooks.
Document comes in
Sample vendor invoice (Intuit QuickBooks public-docs sample, format-preserved)
AI extracts to your schema
11 fields defined · Google Gemini 2.5 Pro
QuickBooks Online
Structured, validated, ready to post
The schema
The fields we asked Parsli to extract. Defined once in the no-code schema builder (no per-vendor templates).
| Field | Type | Required | Description |
|---|---|---|---|
| vendor_name | string | Supplier name — matched against your QuickBooks Vendor list | |
| vendor_address | string | — | Billing address on the invoice |
| invoice_number | string | Vendor's invoice number | |
| invoice_date | date | Date the invoice was issued (ISO 8601) | |
| due_date | date | — | Payment due date |
| po_number | string | — | PO reference if present |
| subtotal | currency | — | Pre-tax total in invoice currency |
| tax | currency | — | Tax amount |
| total | currency | Amount due — maps to QuickBooks Bill total | |
| payment_terms | string | — | e.g. Net 30, Net 60 |
| line_items | table | Table of line items: description, quantity, unit_price, total |
The extraction
Exact JSON returned by Parsli for this document. Confidence scores included for every field so you can flag low-confidence extractions for review.
{
"vendor_name": "Acme Manufacturing Co.",
"vendor_address": "4521 Industrial Blvd, Columbus, OH 43215, USA",
"invoice_number": "INV-2026-04821",
"invoice_date": "2026-04-15",
"due_date": "2026-05-15",
"po_number": "PO-18472",
"subtotal": 2847,
"tax": 256.23,
"total": 3103.23,
"payment_terms": "Net 30",
"line_items": [
{
"description": "Widget assembly — SKU W-104",
"quantity": 50,
"unit_price": 42,
"total": 2100
},
{
"description": "Shipping and handling",
"quantity": 1,
"unit_price": 147,
"total": 147
},
{
"description": "Expedite fee",
"quantity": 1,
"unit_price": 600,
"total": 600
}
],
"confidence_scores": {
"vendor_name": 0.98,
"invoice_number": 1,
"total": 1,
"line_items": 0.95
}
}Lands in QuickBooks Online
What happens after extraction — where the data goes, what it looks like in the destination system.
Bill #INV-2026-04821 posted under vendor "Acme Manufacturing Co." with all 3 line items expanded to line-level detail in QuickBooks. The original invoice PDF is attached to the Bill as an Attachable. Total: $3,103.23, due 2026-05-15. Parsli matched the extracted vendor name against the existing QuickBooks Vendor list; had it been a new vendor, the delivery would have failed loudly (auto-create-vendor toggle is OFF by default) so no duplicate vendor ever gets silently created.
See the QuickBooks Online integrationWalkthrough
What we did
We defined an 11-field Parsli schema for vendor invoices (vendor name, dates, totals, PO, line items as a table) and pointed the parser at Acme's PDF. The AI read the document end-to-end in one pass — no template zones, no per-vendor training — and returned structured JSON matching the schema in under 4 seconds. The parser was configured with QuickBooks as a destination: the same extraction went straight to QuickBooks Online as a Bill, with the PDF attached.
Why it worked
Invoice layouts vary wildly between vendors but the semantic fields (who's billing whom, for what, for how much, due when) are stable. Google Gemini 2.5 Pro, which powers Parsli's extraction, is strong at mapping these semantic fields across layout variations — so the same schema works for Acme's invoice as for a completely different format from a different vendor. The `line_items` table field preserved each row with quantity, unit price, and line total — critical for QuickBooks Bills that need line-level detail for coding against expense accounts.
How it's different from template-based tools
A template-based parser (Docparser, Parseur) would have required someone to draw field zones on a sample Acme invoice. When Acme redesigns their invoice next quarter, the template breaks silently — missing fields, wrong extractions, or worse, Bills posting with wrong amounts. Parsli's AI approach adapts automatically. And because the QuickBooks integration is native (OAuth 2.0, Intuit App Assessment approved), there's no Zapier subscription in the middle — just invoice in, Bill out.
Try your own document.
Upload an invoice, email, or PDF. Define the fields you want. Get back structured JSON — same shape as this example, your data. Free plan included.