QuickBooks Invoice Sync
A weekly sync pulls every invoice out of QuickBooks and maps it to the CRM, so revenue truth lives in one place. The books stay the source of truth; the CRM stays current without anyone copying numbers.
Four steps, once a week, unattended
This is the automation behind our Monthly Invoicing cadence: humans run the billing rhythm, the sync keeps every system telling the same story.
How each step works
Two routines run every Monday. At 12:00 a token keepalive refreshes each connected company's QuickBooks connection, because Intuit retires an idle refresh token after about a hundred days; it warns the ops Lark chat if a refresh fails or the token has under two weeks left. At 12:30 the invoice sync runs on the fresh tokens. Weekly is deliberate: fresh enough that the dashboard is trusted, calm enough that the books close before the numbers move. An admin can also press Sync on the invoices page between runs.
Every invoice dated since January 2025 is pulled from each connected company, Edge8 and AIO: new ones, updated ones, payments applied. Each is upserted by its QuickBooks id and its status is derived from the balance and due date, so nothing is ever deleted and a paid invoice flips on the next pass. QuickBooks remains the accounting source of truth. The sync never writes back to it.
The mapping from QuickBooks customer to CRM company lives on the company record, set once by an admin from the invoices page, so each invoice lands on the right company's page. A customer without a mapping is stored with no company and counted in the run result instead of being guessed; mapping it later attaches its invoices on the next pass. Most AIO customers are individuals and stay unmapped by design.
Dashboards, client pages, and revenue reviews all read from the synced ledger. When someone asks what a client is worth this year, the answer comes from one system, and it agrees with the books.
The seven elements
Every workflow we document has the same anatomy: seven elements, each assigned to a human, a machine, or both. This is the Centaur Map from our workflow design method.
Two routines fire every Monday: the token keepalive at 12:00 (+07), the invoice sync at 12:30. No one remembers to run them because no one has to.
Invoices since January 2025 from each connected QuickBooks company (Edge8 and AIO), and the customer-to-company mapping kept on each CRM company record.
Which QuickBooks customer belongs to which CRM company. Mapped by a human once, from the invoices page, applied by the machine forever.
Every invoice is upserted by its QuickBooks id, nothing is ever deleted, and an unmapped customer is stored with no company and reported rather than guessed.
A complete, current invoice ledger inside the admin, attached to the right companies, with paid, open, overdue and voided derived from the balance.
The revenue dashboard and the invoices page read directly from the synced ledger. No exports, no spreadsheets.
Every run logs fetched, upserted and unmapped counts per company on Settings → Agents; a failed sync or a dying token warns the ops Lark chat.
The standing rules
- QuickBooks is the source of truth; the sync only reads
- Mapping decisions are made by humans, once, and remembered
- Unmapped customers get reported, never guessed; a company that is not connected stays quiet
- Nobody copies invoice numbers between systems, ever
Why it works
- One truth ends the weekly “which number is right?” conversation
- Client revenue history sits next to the relationship, where decisions happen
- A weekly pass catches drift the week it appears, not at year end
- The finance team's tool stays theirs; everyone else gets a live view