Skip to main content
2,200+ contractors in the research universe benchmarked. Do you know your gross profit per labor hour? See where you stand →
Level
Operations

QuickBooks API: Reports, Projects and Bank Feeds

Sam YangEx-CFO across trades, SaaS & services · $2.5B in total PE/banking transactions · Stanford MBA
Updated October 7, 2026·Originally published June 28, 2026·4 minute read
Share

Level system reality check

Booked entities and reports describe accounting records

Sam Yang, Level

4 minute readOperations

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

  1. Name the booked entity or report needed for the decision.
  2. Verify basis, scope, pagination and current permissions.
  3. Inspect pending feed state only when that workflow is the actual gap.
  4. 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.json

The 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.

Share

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.

Sam Yang

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

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.

2,200+ businesses benchmarked$13.25B in revenue analyzedWeekly action cadence

No credit card. Start with a 15-min call. We only follow up if we can actually help.

No commitment. Real numbers, not generic advice.