A multi-entity specialty contractor running four operating entities on one Sage Intacct instance, with AP clerks reconciling invoice, PO, and GRN by hand across four books. We rebuilt the AP desk as a pipeline: LlamaParse on the intake, Amazon Textract as fallback, Sage Intacct as the system of record. The controller's month-end backlog cleared the same business day.
| Invoice | Vendor | Entity | PO match | GRN match | Retainage | Status |
|---|---|---|---|---|---|---|
| INV-44218 | Northwood Mechanical | ENT-01 | 100% | 100% | 10% | posted |
| INV-44219 | Buckeye Steel & Rebar | ENT-02 | 100% | 100% | 10% | posted |
| INV-44220 | Riverline Electric | ENT-02 | 100% | awaiting | 5% | pending GRN |
| INV-44221 | Cardinal Concrete Co. | ENT-03 | 100% | 100% | 10% | posted |
| INV-44222 | Maple Ridge Drywall | ENT-01 | 96% | 100% | 10% | variance |
| INV-44223 | Lakeside HVAC Supply | ENT-04 | 100% | 100% | 0% | posted |
| INV-44224 | Tri-State Plumbing | ENT-02 | 100% | 100% | 10% | posted |
| INV-44225 | Summit Glazing LLC | ENT-04 | 100% | awaiting | 10% | pending GRN |
| INV-44226 | Hilltop Roofing Inc. | ENT-03 | 100% | 100% | 10% | posted |
At a glance
One AP team, four entity books, the vendor contract as the source of truth for retainage. Everything else was implementation detail.
The engagement
The stack
ISO 27001 · ISO 9001 · DPA and NDA signed at kickoff.
Before, the AP desk
The desk worked. It worked the way desks work when AP clerks reconcile three documents by hand, across four entity books, and the vendor contract lives in a binder. These were the three patterns we found in discovery.
AP clerks opened the invoice PDF, pulled the PO from Sage Intacct, and looked up the GRN in the warehouse system. They picked the correct entity by vendor, then matched pieces, amount, and unit price by eye. On a clean invoice, 18 minutes. On a cross-entity invoice, up to 35.
Pre-build baseline: 18 minutes per clean match, 35 minutes per cross-entity exception.
The first week of every month, 2,400 invoices hit the AP queue. The clerks cleared 400 a day on a clean cycle. The rest piled up. By the time the controller closed the books, about 600 invoices sat unmatched, and the close slipped accordingly.
Pre-build baseline: 5-day backlog at month-end, average, across the prior fiscal year.
Specialty contractor AP ran different retainage rules per sub: 10% flat, 10% stepping to 5% at substantial completion, 0% on professional services. The clerks applied the rule by hand, on a spreadsheet, then posted the net amount. Retainage reconciliations at year-end took a full week.
Pre-build baseline: approximately 6% of retainage balances reconciled incorrectly at year-end, caught at audit.
What we built
The pipeline follows the same five stages we run on every AP engagement. The details below are the ones we actually implemented for this contractor, not a generic template.
AP inbox polled on a 5-minute cadence. Vendor portals polled hourly. Mailroom scan-to-folder picked up on write. All normalised to one invoice ID, with the entity tagged from the vendor master.
Document type tagged on ingest. Typed vendor invoices routed to LlamaParse, paper scans routed to LandingAI, tabular line data backed by Amazon Textract. Below 0.90 confidence, the invoice holds for AP tagging.
Vendor, invoice number, line amounts, unit price, quantity, GL hint. Entity resolved against the vendor master. Retainage terms pulled from the vendor contract record.
Invoice matched to open PO for the correct entity. GRN pulled from the warehouse system. Retainage applied per vendor contract. Below 0.90 confidence, the invoice holds for AP review.
Matched invoices posted to Sage Intacct via the Bills API with entity, department, and project dimensions. Source documents attached. Exceptions routed to a named AP clerk with the flag in plain English.
After, the numbers the desk signs off
Same AP team, same vendors, same Sage Intacct chart, same four entity books. The pipeline matched invoice, PO, and GRN per entity and applied retainage per contract. What changed was the backlog, not the team.
AP clerks still own the exceptions. They still sign off every cross-entity invoice. The difference is that on a clean day, the invoice matches, posts to Sage Intacct, and carries retainage per the vendor's contract. On a bad day, a clerk sees one flagged line instead of four tabs and a spreadsheet.
From the desk
We kept our approval chain, our ERP, and our chart of accounts. The pipeline just made the data show up on time.
ControllerSpecialty contractor, Ohio
Handover
The engagement ends at a clean handover. The AP team runs the pipeline; Hexaa stays on call for a fixed retention period, then steps back.
Related cases
Each links to a named client, a named document, and the system the clean data lands in. We publish only what the client signed off to publish.
AP coding suggestions trained on two years of the client's own ledger history. 86% first-pass coding accuracy.
→Construction · 2024Infra contractor · AIA pay-app routingAIA G702/G703 reconciled against the schedule of values with retainage rules inside the approval path. 98% first-pass accuracy.
→Construction · 2025Commercial GC · submittal queue against the primeSubmittal log reconciliation against the prime contract spec. 1,200 submittals per project, Procore as the system of record.
→Free 30-minute call
You'll leave with a clear next step.
The invoice names a vendor and an amount, the PO carries the contracted price and entity, the GRN carries the received quantity. The pipeline compares all three at the line level, applies the vendor's retainage rule, and holds the invoice until amount, quantity, and entity agree.