QuickBooks API: Reports, Projects and Bank Feeds
Level system reality check
Booked entities and reports describe accounting records
Sam Yang, Level
Booked transactions and pending downloads have different authority
A QuickBooks invoice object proves that an invoice record exists in the supplied scope. It does not prove that every eligible field-system invoice arrived or that all payments were applied correctly. A bank-feed candidate is a pending workflow item, not a posted financial fact. Native reports also need their actual cash/accrual basis and dimension filters.
For a specific question, preserve account, entity, period, basis, object scope and full paging. Reconcile the selected detail with the posted books. When the question concerns a pending downloaded row, use the controlled browser walkthrough instead of pretending booked-record access explains the whole queue. Matching against an existing occurrence and adding a new transaction are different accounting actions.
Three exceptions that need different correction routes
Our QBO workflow separates matching an existing settlement, reviewing a timing difference and changing a payment application. Combining them into one "fix the bank feed" instruction risks creating the wrong accounting event.
An existing settlement: start from the pending downloaded row and identify the transaction already recorded. The same amount or a similar merchant string creates a candidate, not a match. Retain the source transaction identity, account, counterparty and date evidence. Re-read the current transaction before a proposed match: a previously captured record may have been edited since the analysis. If more than one occurrence fits, hold the row rather than select whichever appears first.
A later clearing date: a purchase can be recorded before the bank clears it. Find the later bank occurrence using an additional identifier, such as a distinctive description and account, then retain both dates. A later settlement is not by itself a missing expense. The useful output is a timing exception with evidence, not a second expense or an automatic rewrite of the original purchase date.
A mixed cash-and-credit application: inspect the payment, credit memo and linked invoices together. A supported correction must show the intended cash change, preserved credit application and resulting open invoice balances. Changing only the customer or payee label can leave applications inconsistent. Stage the proposed action for review, then read back every affected record after an authorized change. This is a bounded correction method, not permission to delete receipts whenever bank search returns nothing.
The owner question is therefore specific: is this cash already represented, merely clearing later, or applied incorrectly? The QBO collection playbook gives the account-specific sequence. Keep the unresolved population visible before judging whether a new connector is needed.
Financial evidence in practice
What is the difference between QBO API records and bank-feed state?
Booked entities and reports describe accounting records. Pending bank-feed candidates describe a different workflow. A current API response does not prove every downloaded row was accepted, matched correctly or reconciled to a statement.
Run the check
- Name the booked entity or report needed for the decision.
- Verify basis, scope, pagination and current permissions.
- Inspect pending feed state only when that workflow is the actual gap.
- Compare existing entries before creating another record.
Fictional example: Equal totals with different bank occurrences
Both fictional lists total a $26 outflow. Only occurrence A matches. The second bank row is September 29; the unresolved ledger row is October 2, so the lists span different cutoffs. Equal totals and repeated $13 values cannot prove the second match.
Invented teaching inputs; downloadable files store these dollar amounts in USD cents. Incoming amounts are positive and outgoing amounts negative. A card charge credits its liability account.
Inspect the expected output
{
"fictional": true,
"unit": "USD cents",
"id": "bank-identity",
"totalsTie": true,
"matchedIds": [
"A"
],
"unmatchedBank": [
"B"
],
"unmatchedLedger": [
"C"
],
"decision": "Same amount and equal totals do not prove occurrence identity",
"limitation": "This is teaching arithmetic from supplied invented inputs, not source authenticity, financial assurance or authority to post."
}Reproduce this calculation
Download the code and input into one folder, then run:
node reproduce.mjs bank-identity.input.jsonThe code checks declared units and identities and refuses unsupported inputs. No browser or customer account is used. Source authenticity and accounting approval require separate evidence.
Reviewed 2026-10-06. Level financial-control guidance, with visibly fictional teaching examples. The example shows a control boundary, not a measured customer outcome or industry benchmark.
Read this content revision history
Continue with the related financial decision →Free benchmark review
See whether your books are benchmark-ready.
Start with a free conversation about your priorities. With agreed access to the relevant records, we compare your numbers with applicable benchmarks and identify what to review first.
Check the statement before changing a feed item
Open the related financial check when the next question concerns that workflow. The Financial Systems Field Guide holds the named-system collection notes, pitfalls and bounded prompts.
Sources and method
Field Guide. This guide shows how to check whether the numbers are ready to use. The examples use made-up numbers, clearly labeled and available to download. They do not include private customer documents or measured customer results. Before using the method, check that your account has the required access and that your reports count the same things.
Projects, reports and event notifications
For project costing, compare the current edition, project identity and report dimensions with the eligible API records. Retain the native project report if the connector does not expose the required grouping. A webhook reports an eligible object event; it does not certify a complete report, every historical event or the project cost population. Use periodic full-population checks alongside incremental notifications.
Get the next one
Want next week's benchmark in your inbox?
One email a week. Real numbers from 2,200+ contractors in the research universe. No fluff. Unsubscribe anytime.
Related reads
Operations
Why Your Field Software Numbers Don't Match Your Accounting
Reconcile field hours, invoices, recognized revenue, and job costs. Billing capture: 97.1% median, 66.9% bottom decile (963 companies).
Operations
The AI Inbox: Emailed Reports as Finance Pipelines
Asking for a report by email does not mean you have received and saved it. Track delivery, original attachment, parsing and review separately, preserving changed versions.
Operations
The API Is Not Enough for Finance Automation
Use APIs for supported records. Add native reports or permitted browser collection for verified gaps, then compare identities, dates and costs.

About the author
Sam Yang
Founder & CEO
Founder of Level, the always-on finance team for contractors, service businesses, and ecommerce brands. Ex-CFO across trades, SaaS, and service businesses. 4 years as Director of Growth Product at BuildOps, building financial tooling used by 1,000+ commercial contractors. Four years in PE and investment banking rolling up and acquiring service businesses, $2.5B in total transactions including M&A and IPOs. Stanford MBA, Brown undergrad. The Level founding team's analysis of 2,200+ contractors ($13.25B in job revenue) across operating, private-equity, and CFO roles anchors the Level Index benchmark research.
LinkedIn