Appearance
Accounting sync
QuickBooks Online, properly.
Push invoices, pull payments, reconcile nightly. UK VAT computed server-side from per-line tax codes — no hand-typed tax lines, no rounding drift. The accounting platform stays the source of truth for receivables; OpsMerge stays the source of truth for the work.
- OAuth, no scraping
Native OAuth with Intuit and FreeAgent (Xero coming soon). Per-realm token storage. Reconnect adopts orphans by name and rate so a re-link is not a reset.
- UK VAT done right
Per-line tax codes drive server-side VAT calculation in QuickBooks Online. We never send hand-typed tax lines — the accounting platform owns the maths.
- Webhook payment pull
HMAC-verified inbound webhooks materialise payments back into the OpsMerge ledger. A daily reconciliation worker catches anything the webhook missed.
How it flows
Invoices out, payments in, reconciliation overnight.
- Invoice issued in OpsMerge — pushes to QuickBooks Online with line items, tax codes, customer reference.
- Customer pays you the way they always have. The payment lands in QuickBooks Online.
- QuickBooks Online fires a payment webhook — OpsMerge verifies the HMAC, materialises the payment row in the local ledger, marks the invoice paid.
- Daily reconciliation worker pulls the previous 24 hours of payments to catch any webhook drops.
UK VAT
Tax computation lives in the accounting platform.
- Each invoice line carries a tax_code_id that maps to a QuickBooks tax code.
- We never send TxnTaxDetail.TaxLine — UK QBO computes VAT server-side from the per-line code.
- Tax codes are different from tax rates in the QBO data model; OpsMerge models both correctly.
- Default tax codes load via helper so every code path inserting an invoice line carries the right code.
Reliability under throttling
Token-bucket per-realm governor. Semaphore caps concurrent calls per QuickBooks tenant. Retry-After honoured on 429s. Exponential backoff with jitter on 5xx. 4xx surfaces immediately so the operator can fix bad data rather than waiting on a silent retry loop.
Disconnect & reconnect
Disconnect cleanly wipes the QuickBooks breadcrumb fields. Reconnect adopts existing items by name and rate, with a deduplication migration cleaning up legacy duplicates — so a re-link is not a reset.
FreeAgent, same pattern
MSPs who run their books in FreeAgent get the same flow: native OAuth, invoice push with VAT-aware tax codes, payment pull back into the OpsMerge ledger, and a watermark-based sync that keeps the two sides reconciled. Push per-invoice on demand or as part of the billing run.
What we deliberately do not do
OpsMerge does not become your accountant. We do not produce statutory accounts, run year-end, or replace the accounting platform. We push invoices and reconcile payments because the day-to-day handoff is broken in most MSP stacks; everything else stays in QuickBooks Online where your accountant already works.
Pairs well with