QuickBooks Reporting & Lookups
Working QuickBooks Online — the query-first approach to lookups, standard financial report recipes (P&L, balance sheet, A/R aging), CSV export for reconciliation, and the sync-token rule for safe edits.
How to get answers out of QuickBooks Online (QBO) and make changes without
fighting its concurrency model. The one habit that makes this easy: reach for
quickbooks_query first, fall back to reports for the standard statements,
and respect the sync token on every write.
Signatures are on quickbooks; this page is the recipes.
Query first
QBO exposes queryable tables, and quickbooks_query runs a SQL-like query
against them. It’s the workhorse for almost every lookup — far more flexible
than per-record getters.
# Open invoices (non-zero balance)
quickbooks_query(query="SELECT * FROM Invoice WHERE Balance > '0'")
# A customer by name
quickbooks_query(query="SELECT * FROM Customer WHERE DisplayName = 'Acme Corp'")
# Recent invoices, paged
quickbooks_query(query="SELECT * FROM Invoice ORDER BY TxnDate DESC",
max_results=50, start_position=1)
Standard financial reports
For the canonical statements, use quickbooks_report — it hits QBO’s report
endpoints directly, which is cleaner than reconstructing a P&L from raw rows.
# Profit & Loss for a period
quickbooks_report(report_type="ProfitAndLoss",
start_date="2026-01-01", end_date="2026-03-31",
accounting_method="Accrual")
# Balance sheet as of a date
quickbooks_report(report_type="BalanceSheet", date="2026-03-31")
# A/R aging — who owes what, as of today
quickbooks_report(report_type="AgedReceivables")
report_type (examples) | Date params | Use |
|---|---|---|
ProfitAndLoss | start_date + end_date | Income/expense for a period |
BalanceSheet | date (as-of) | Point-in-time position |
AgedReceivables | date (as-of) | Outstanding customer balances |
report_type is the QBO report endpoint name. summarize_column_by (e.g.
Month, Customer) groups columns; accounting_method is Cash or Accrual;
params is the escape hatch for any report-specific option. Report names beyond
the three above exist — confirm the exact endpoint name against QBO rather than
guessing.
Bulk pulls for reconciliation
When a single query page isn’t enough — reconciling against another system, analyzing a full ledger — export to CSV with automatic pagination:
quickbooks_export(entity_type="Invoice", max_records=1000)
max_records caps the total (default 1000). This is the tool for “give me
everything” rather than a filtered page.
Editing safely (the sync-token rule)
QBO uses optimistic concurrency: every entity carries a SyncToken that must
match on update or delete. The tools fetch the current token for you when you
omit it — so omit it unless you’re managing concurrency yourself. Passing a
stale token fails.
# Sparse update — only the fields in `data` change
quickbooks_update(entity_type="Invoice", id="145",
data={"DueDate": "2026-04-30"}, sparse=True)
id is a string in QBO (its IDs are string-typed), unlike the integer IDs
in RepairShopr.
Where this connects
QBO is the accounting view of the same business RepairShopr tracks operationally — invoices originate in RS workflows and reconcile here.
Related pages
- quickbooks — the
quickbooks_*signatures and the sync-token model - RepairShopr Ticket Workflows — the operational side of the same invoices
- Tools — catalog overview and routing rules