Skip to main content
Nerve Centre KPIs · Audit Profile · Sentiment Settings The questions an SMB-to-mid-market finance lead asks at 9am on Monday: did yesterday’s storefront orders all post into QuickBooks Online as invoices / sales receipts, who owes me and who is tipping past 60 days while still ordering, is QBO inventory drifting from the storefront, and are the books clean enough to close the month and file tax. Cross-references the ecommerce platforms (BigCommerce / Shopify / Adobe Commerce) - an order with no matching QBO invoice, AR aged 60+ days on a still-ordering customer, or inventory variance on active-order SKUs are the killer reconciliation findings no single tool can see.

What this audit checks

Authentication & access

  • OAuth2 refresh against https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer succeeds (client_id + client_secret + refresh_token; rotated refresh token captured)
  • Granted scope includes com.intuit.quickbooks.accounting (read access to Invoice / Bill / Customer / Vendor / Item / Account / report entities)
  • realmId resolves - GET /v3/company//companyinfo/ returns the company without a 401 (bad token) or 403 (realmId mismatch)
  • Throttle headroom - sustained 429 with Retry-After indicates the ~500 req/min per-realm or 10-concurrent limit is saturated by other integrations or the report-heavy cards

Order-to-books reconciliation

  • Storefront orders with no matching QBO invoice / sales receipt after the sync window (revenue not on the books, tax base understated)
  • Sync-app backlog - gap between latest ecom order timestamp and latest QBO invoice TxnDate widening beyond the expected sync cadence
  • Invoices missing a sales-tax / VAT line (TxnTaxDetail) on taxable customers / taxable orders
  • Duplicate invoices for the same ecom order reference (double-counted revenue from a misconfigured sync app)

AR & AP cycle health

  • AR aged 60+ days above 15% of total AR balance (Aged Receivables report)
  • Days Sales Outstanding (DSO) above 60 days
  • Open invoices (Balance > 0) past DueDate concentrating on a small set of customers
  • AP aged 60+ days above 30% of total AP - vendor relationship / cash-timing risk (Aged Payables report)

Inventory & GL hygiene

  • Inventory Item QtyOnHand negative (oversell or receipt/shipment posting error - QBO Plus inventory only)
  • Inventory items with QtyOnHand = 0 on SKUs with active ecom orders (stockout risk)
  • Manual JournalEntry adjustments as an unusual share of total transactions (control weakness)
  • Bank-classified accounts with stale CurrentBalance / no recent reconciliation

Cross-channel: QuickBooks vs ecommerce reconciliation

  • Storefront order has no matching QBO invoice/sales-receipt after the sync window (sibling = bigcommerce.order / shopify.order / adobe_commerce.order, by DocNumber=order reference)
  • QBO aggregate QtyOnHand drifts >5% from storefront available qty on SKUs with active orders (sibling = bigcommerce.product / shopify.product / adobe_commerce.product, by Sku=sku - QBO Plus inventory only)
  • Ecom customer with completed orders absent from the QBO customer master after 7d (sibling = bigcommerce.customer / shopify.customer, by email)
  • Customer with AR aged 60+ days still placing new ecom orders (credit risk compounding, sibling = ecommerce customer by email)

Data sources

  • GET /v3/company/{realmId}/companyinfo/{realmId} - Auth / company validation probe
  • GET /v3/company/{realmId}/query - SQL-like read for Invoice / Bill / Customer / Vendor / Item / Account / JournalEntry
  • GET /v3/company/{realmId}/reports/ProfitAndLoss - Net income, revenue, expense - P&L health
  • GET /v3/company/{realmId}/reports/AgedReceivables - AR aging buckets, DSO base, 60+ concentration
  • GET /v3/company/{realmId}/reports/AgedPayables - AP aging buckets, 60+ concentration