The client and the problem
The client is a mid-sized distribution business managing procurement across 40+ active suppliers. Their accounts payable process was entirely manual: invoices arrived through email, WhatsApp forwards, supplier portals, and paper scans faxed from their warehouse. Each one landed with a different team member, who would then manually key the data into Zoho Books and chase the relevant purchase order for matching.
With 700–900 invoices processed per month, the AP team of three was perpetually behind. Discrepancies between purchase orders and invoices were caught late — sometimes after payment had already been made. Duplicate invoices slipped through when the same document arrived via two channels. Month-end was chaotic.
Because we are an Authorised Zoho Partner, we were able to go significantly deeper into the Zoho Books API than a general developer would — using advanced API endpoints for vendor management, bill creation, purchase order reconciliation, and custom field automation that aren't accessible to non-partner integrations.
Zoho Partner
Why Zoho Partner status matters for this build: As an Authorised Zoho Partner, we have access to advanced Zoho Books API endpoints, partner support escalation, and direct integration testing environments. This meant we could build purchase order reconciliation, three-way matching logic against live Zoho data, and custom approval workflow automation that a general developer would not be able to access or test reliably.
The full pipeline — 8 stages
We designed the same eight-stage pipeline architecture used across our AP automation projects, configured specifically for Zoho Books and the client's procurement workflow.
Stage 1 — Multi-Source Intake
Stage 2 — Pre-Processing
Stage 3 — AI Extraction
Stage 4 — Three-Way Matching
Stage 5 — Approval Routing
Stage 6 — Zoho Books Posting
Stage 7 — Storage & Traceability
Stage 8 — Dashboard & Analytics
Three-way matching — how we built it
Three-way matching is the core financial control in any serious AP process: the purchase order (what was ordered), the invoice (what the supplier is charging), and the delivery note (what was actually received) must all agree before payment is approved. Most AP automation tools do two-way matching at best. We built full three-way matching against live Zoho Books data.
| Match Type | What We Compare | Tolerance | Pass Action | Fail Action |
|---|---|---|---|---|
| Vendor match | Extracted name + VAT vs Zoho contacts (fuzzy + exact) | — | Map to Zoho contact ID | Create new vendor or manual map |
| PO vs Invoice — quantity | Each line item quantity on invoice vs purchase order | 0% | Proceed | Flag line with difference |
| PO vs Invoice — pricing | Unit price on invoice vs agreed price on PO | ≤ 2% | Proceed | Flag with % difference |
| Delivery note vs PO | Received quantities on delivery note vs PO quantities | 0% | Proceed | Short delivery — flag before payment |
| Duplicate detection | Invoice number + vendor ID vs last 24 months in Zoho | — | Proceed | Block + alert — do not process |
| Tax validation | Recalculate GST/VAT vs extracted tax figure | 0.5% | Proceed | Flag for finance review |
When all six checks pass, the invoice is auto-approved and posted to Zoho Books without any human involvement. When any check fails, the invoice enters the exceptions queue with a detailed diff report — not just "failed", but specifically which line item, which field, and by how much.
AI extraction — the JSON output
The extraction layer uses Azure Document Intelligence for layout analysis (table detection, bounding boxes, reading order) and GPT-4o for semantic field extraction. The combination handles invoice formats we've never seen before without requiring templates or training data per supplier.
{
"vendor_id": "ZOHO-VENDOR-00142",
"bill_number": "BILL-INV-2024-03821",
"date": "2024-11-18",
"due_date": "2024-12-18",
"reference_number": "PO-2024-0441",
"line_items": [
{
"item_id": "ITEM-SKU-8821",
"description": "Steel Rod 12mm x 6m — Grade B",
"quantity": 200,
"rate": 8.50,
"amount": 1700.00,
"account_id": "ZOHO-ACC-5000",
"tax_id": "TAX-GST18"
}
],
"sub_total": 1700.00,
"tax_total": 306.00,
"total": 2006.00,
"currency_code": "INR",
"notes": "Auto-posted by Infomaze AP Automation v2.1",
"attachment_id": "DOC-2024-INV-03821-ORIG"
}
Zoho Books integration — what we built into the API
As Authorised Zoho Partners, we built directly against the full Zoho Books API — not a third-party connector or middleware. This gave us control over every aspect of the integration and allowed us to use endpoints that aren't accessible to general developers.
Vendor Lookup
PO Fetch
Validation
Bill Create
Attach & Link
-
Vendor auto-creation:
If the extracted vendor doesn't exist in Zoho Books, a new Contact is created automatically from the invoice data — name, address, VAT/GST number, payment terms — and then linked to the bill.
-
PO reconciliation:
When a bill is posted, the linked purchase order in Zoho is updated — billed quantity, billed amount, and status. Fully invoiced POs are marked as closed automatically.
-
Custom fields:
We used Zoho Books custom fields to tag each auto-posted bill with the extraction confidence score, processing timestamp, and source channel — visible to the finance team in their existing Zoho interface.
-
Document attachment:
The original invoice PDF is attached directly to the Zoho bill record. The AP team never needs to leave Zoho to access source documents.
The exception dashboard
Not every invoice auto-approves — and when exceptions occur, the team needs to understand exactly what's wrong and act quickly. We built a lightweight exception dashboard that shows the AP team their exception queue with everything they need to make a decision without switching tabs.
Prakash Steel Suppliers
Global Packaging Co
Reliance Logistics Ltd
Mehta Office Supplies
Results after 90 days
0
96%
−28h
82%
<2min
−4d
The 18% of invoices that require human review still benefit significantly — they arrive in the approver's portal pre-filled, with the specific discrepancy flagged, the relevant Zoho PO linked, and a one-click approve or reject button. Average exception resolution time dropped from 2.8 days to 4 hours.
Duplicate invoice catches in the first 90 days: 14 duplicates blocked — invoices that had already been submitted through a different channel and would previously have been paid twice.