AVX-CS-002 · Construction SaaS · Product We Engineered
StructumAI Estimating & Billing
A complete estimating-to-billing module, from the first bid to the final AIA pay application, with QuickBooks, Plaid, and AI receipt capture, integrated into a multi-tenant construction platform.

one connected workflow
Estimate, contract, schedule of values, pay applications, change orders, and the owner billing ledger, one workspace, one source of truth.
accounting & banking integrations
QuickBooks Online, QuickBooks Desktop (Web Connector/qbXML), and Plaid, productized so every customer connects their own accounts independently.
estimate line types
Standard, allowance, alternate, unit-price, deduct, contingency, and internal-only, with per-line markup and owner-visibility control.
Executive Summary
What we built, and why it matters.
StructumAI needed one module to carry a construction project end to end: estimate → awarded contract → schedule of values → AIA-style pay applications → change orders → billing ledger, plus the full cost side: budgets, purchase orders, and vendor invoices. Avrixo designed, architected, built, and deployed it as a standalone Next.js application integrated natively into the multi-tenant platform.
The result is a production revenue-and-cost loop where a number entered at bid time stays traceable through every downstream document, accounting-ready through QuickBooks Online, QuickBooks Desktop, and Plaid bank feeds, with AI-assisted receipt capture feeding purchase orders automatically.
The Core Problem
The bottleneck beneath the business goal.
Construction firms run estimating, owner billing, change orders, purchase orders, vendor invoices, and accounting sync across spreadsheets and disconnected tools. Values get re-keyed between documents, retainage is calculated by hand, and a single change order can silently desync the whole billing trail: profitability stays invisible until the project is over.
The platform had to enforce real financial rules: retainage accrual and release, schedule-of-values integrity, AIA pay-application math, and change-order lineage, while staying fast and familiar enough that estimators would actually use it instead of falling back to Excel. And it had to slot into an existing multi-tenant platform: shared login, shared projects, shared database with sibling modules, without colliding with the platform's own finance tables.
The Technical Solution
Engineered for accuracy, scale, and trust.
The estimating surface is an Excel-fast grid with seven line types (standard, allowance, alternate, unit-price, deduct, contingency, internal-only), per-line and rule-based markup, and internal-vs-owner visibility. Estimates carry versioning with lock/approve controls, import from Excel through a preview-then-commit flow with AI special-row detection flagging unusual lines for review, and clone from company-level estimate and line-item templates.
An awarded estimate converts into a contract and a balanced Schedule of Values. From there: AIA-compatible pay applications with retainage, stored materials, and a submit → approve → owner-approve → record-payment flow; owner change orders with full lineage back to the contract and SOV; a cross-contract billing ledger; and PDF + XLSX export that balances exactly to AIA math.
On the cost side: budget baselines from the awarded estimate, commitments and purchase orders, vendor invoices with approval and posting, and reports for profit fade, change-order gap, and billing-vs-cost. An AI receipt pipeline extracts vendor, total, line items, CSI codes, and date from an uploaded receipt and auto-aggregates it into a per-project purchase order.
The module ships as its own Next.js 16 application on a dedicated subdomain, but feels native inside StructumAI: single sign-on via a shared JWT cookie scoped to the platform domain (no second login, logged-out users redirect to the platform login), and a shared multi-tenant PostgreSQL database that reads the platform's real projects and membership, the same projects shown across Plans and Schedule. Where the module's tables would have collided with the platform's own finance tables, they were namespaced so each side stays isolated.
What's Inside
Every capability, grouped by workflow.
Estimating
- Excel-fast estimate grid: 7 line types with per-line and rule-based markup
- Internal-vs-owner visibility on every line
- Versioning with lock/approve controls
- Excel import: preview-then-commit, with AI special-row detection
- Company-level estimate and line-item templates
Contracts, SOV & Owner Billing
- Convert an awarded estimate into a contract with a balanced Schedule of Values
- AIA-compatible pay applications: retainage, stored materials, period billing
- Submit / approve / owner-approve / record-payment workflow
- Owner change orders with lineage back to the contract and SOV
- Cross-contract billing ledger with PDF + XLSX export that balances to AIA math
Cost Side
- Budget baselines generated from the awarded estimate
- Commitments and purchase orders
- Vendor invoices with approval and posting
- Profit-fade, change-order-gap, and billing-vs-cost reporting
AI-Assisted Receipts
- Upload a receipt: extraction pulls vendor, total, line items, CSI codes, date
- Auto-aggregated into a per-project purchase order
Accounting & Banking
- QuickBooks Online: push approved POs as payable Bills, sync paid % back
- Duplicate-bill guard and full audit trail on every QBO push
- QuickBooks Desktop: Web Connector + qbXML, per-customer .QWC provisioning
- Plaid: bank-transaction import with weighted transaction-to-receipt matching
- Missing-receipt flagging on unmatched bank transactions
Permissions & Audit
- Granular tenant-scoped RBAC: role templates and project memberships
- Per-user permission overrides
- Full permission and billing audit log
Architecture Notes
System decisions that made the product viable.
Shared-database coexistence: introspected the live platform schema, namespaced the colliding finance tables, and migrated cleanly with zero impact to the platform's existing data.
Multi-tenant accounting connectivity: QuickBooks Desktop has no cloud API, so Avrixo built a productized Web Connector/qbXML/SOAP subsystem with per-customer provisioning and encrypted credentials. Each customer connects independently.
Production data migration: re-homed an existing dataset (estimates, contracts, SOV, pay-apps, commitments and more) into the shared platform database, re-tenanted and relationship-preserving, idempotently.
AIA document fidelity: pay-application PDFs and XLSX balance exactly (Original + approved COs = Contract-to-Date; Completed − Retainage − Previous = Current Due).
Hardened data layer: resilient PostgreSQL pooling with transient-error retry and environment-aware SSL for managed (RDS) and serverless (Neon) databases.
Connected from the platform UI: a top-nav entry carries project context straight from the StructumAI dashboard into the module.
Tech Stack Matrix
Infrastructure behind the outcome.
Experience Layer
Next.js 16 (App Router, Turbopack) · React · TypeScript (strict) · Tailwind CSS v4
Application & Data
Next.js API Routes · PostgreSQL (raw pg) · Repository + Service Layers · Multi-Tenant RBAC
Integrations
QuickBooks Online (OAuth2/REST) · QuickBooks Desktop (Web Connector/qbXML/SOAP) · Plaid · AWS S3
Documents & Ops
AIA PDF/XLSX Generation · Shared-JWT SSO · Audit Logging · pm2 / Docker, Subdomain Deploy
Start a Conversation
Need a system built like this?
Fixed scope, clear milestones, and a team that ships production systems end to end.