APSync Training

QBO Reporting: The Nuts and Bolts

A couple of reminders before you start, from How to Use These Docs: even this "advanced" page isn't meant to have every answer — check the Accounting FAQ for a quick specific question, and for general QuickBooks/HubSpot mechanics beyond what's specific to this app, ChatGPT or similar is often a better next stop than waiting for a doc to cover it.

Companion to QBO Reporting: The Simple Version. That page told the story; this one shows the actual mechanics, with real examples pulled directly from MOM and QuickBooks — not made up. After reading this you should know exactly where to go in QuickBooks to check any of this yourself.

What's actually happening inside MOM today

MOM runs two separate layers that don't update at the same time.

The inventory sub-ledger updates in real time, all day. Every sale, every kit assembly, every inventory movement gets its own entry the moment it happens, with real quantity and real cost. A real example, pulled directly from MOM: on a single day, one sale of SKU 1964 moved 23 units at $1.17643 each — a real, specific, $27.06 cost entry, timestamped to the minute, tied to that one sale. Dozens of entries like this happen every day.

The General Ledger — the actual books — only updates once a month. All of that daily detail gets added up, and once a month, one summary number per account gets posted. Checked directly: the Inventory account and the Cost of Goods Sold account each had exactly one real entry for the entire month, both dated the last day of the month. Nothing in between.

So MOM has always had the perpetual detail — it just never made it into the books except as one number, monthly.

Is that monthly batch typed in by a person, or calculated by MOM? Calculated by MOM, automatically. It's a systematic sweep through every single account in the chart of accounts, all in one batch, all on the same date — including accounts with zero activity that month, which still get a row showing $0. A person closing the books by hand wouldn't produce that pattern.

How accounts get associated so QuickBooks can even do this

QuickBooks can't calculate automatic cost-of-sale unless every product is told which accounts it affects. Each product in QuickBooks carries its own account assignments — which income account a sale of it hits, which account its cost hits, which account its on-hand value sits in. This gets set up when products are brought into QuickBooks (the same process that sets up the chart of accounts itself) — it's not something that happens per-sale, it's set up once per product, ahead of time.

Checked directly against 40 real products already in QuickBooks: they land across 11 different, specific income accounts — not one generic bucket — matching the same program-level breakdown MOM already uses (AP4 - Program, FIA 2 - Leader Guide, and so on, both places). Cost of Goods Sold is different: every single product checked points to the same one cost account, on both sides — MOM's own settings never broke that one out by product either, so this isn't new behavior, it's the same design carried over.

What perpetual actually looks like, in isolation — real vs. paper

On paper, a plain sale of a tracked, physical item should look like this:

 Account                              Debit       Credit
 ------------------------------------------------------------
 Accounts Receivable                    XX.XX
     Sales                                          XX.XX

 Cost of Goods Sold                     XX.XX
     Inventory Asset                                XX.XX

Two separate entries: the sale itself, and a second one moving that item's cost out of inventory and into an expense, at the moment of sale.

A service is simpler — there's no second entry at all, because there's nothing physical to move out of inventory:

 Account                              Debit       Credit
 ------------------------------------------------------------
 Accounts Receivable                    XX.XX
     Service Income                                 XX.XX

Real journal entries: line, invoice, and month

Everything below is pulled directly from a real invoice, INV-1071, dated 2026-07-31 — not made up.

Level 1: one line

The real service lineActive Parenting 4th Ed LTW (Webinar) 08-11-26, a Service-type item, $189.00:

 Account                              Debit       Credit
 ------------------------------------------------------------
 Accounts Receivable                  $189.00
     Service Income                                $189.00

Confirmed directly: no Cost of Goods Sold entry exists anywhere for this line. Service items have no on-hand-quantity tracking by design, so there's nothing for the second entry to move.

The real inventory lineACTIVE PARENTING 4TH ED GUIDE/WORKBOOK COMBO (SKU 1965), 25 units at the tiered price of $21.95 each:

 Account                              Debit       Credit
 ------------------------------------------------------------
 Accounts Receivable                  $548.75
     Sales                                          $548.75

For the cost side, this real invoice actually generated several separate Cost of Goods Sold entries for this one SKU, not one — real amounts pulled directly from QuickBooks' General Ledger report include $26.95 and $14.12, each tagged in QuickBooks' own records with a reference back to a specific backorder split (bundle_id: INV-1071-3) and the exact price tier that applied. That's not a data error — it's backordering and bundle-splitting happening for real, which routinely means "one line" on the invoice becomes multiple real cost postings behind it. Don't expect the clean one-line-one-entry shape above to hold on every real invoice — the paper version is the simplified case, not a promise.

Level 2: one invoice

Real totals for all of INV-1071, combined:

 Account                              Debit         Credit
 --------------------------------------------------------------
 Accounts Receivable                $1,041.08
     Sales (merchandise)                             $907.25
     Shipping Income                                  $90.73
     Sales Tax Payable                                $43.10
 Cost of Goods Sold          several real entries, not one clean total
     Inventory Asset          (see Level 1 above for why)

The revenue/shipping/tax side is clean and fully confirmed. The Cost of Goods Sold side deliberately isn't shown as one number here — for a real invoice with backordering involved, it genuinely isn't one number, and forcing it into a fake single total would be less honest than showing you the real shape.

Where to see this yourself: open INV-1071 (or any real invoice) and look for a Transaction Journal option — it shows the exact debit/credit breakdown behind that one invoice, same accounts as above.

Level 3: one month

Not yet pulled from a real month of data — see features/qbo_reports/future.org for the plan to get a real monthly total and compare it against this same structure. What's already confirmed, though, is the mechanism: every invoice like INV-1071 posts into the exact same handful of accounts (Sales, Service Income, Shipping Income, Cost of Goods Sold, Inventory Asset), and a month is just many of those, added together automatically by QuickBooks — same accounts, same math as Level 2, just accumulated over the whole period instead of one invoice.

Where to see the month-level total: Reports → Business overview → Profit and Loss, date range set to the month in question.

The one report you'll open the most: the General Ledger (a.k.a. Account QuickReport)

This is the report behind the Level 1/Level 2 real examples above, and the one you're most likely to land on when something needs checking. Worth understanding fully rather than half-guessing at.

Two doors, same room. You can get to this exact report two ways:

What each column actually means:

Why you'll sometimes see more rows than you expect for what looks like one sale: real invoices with backordering or bundle kits genuinely generate multiple entries behind one line — see the real 1965 example above, where one line produced two separate Cost of Goods Sold postings. That's the mechanism working correctly, not duplication.

Getting something more complete: two different directions

The General Ledger report above is deliberately raw — one account, every transaction, in order. Once that makes sense, there are two different "more complete" directions to go, and they answer different questions:

For the actual month-end total (the number that matters for the books): Reports → Business overview → Profit and Loss. Pick a date range, and QuickBooks gives you the one true aggregated number per account for that period — this is the finished, official version, not something you build yourself.

For a more useful granular view (still line-by-line, but organized your way instead of QuickBooks' default order): open the General Ledger or an Account QuickReport, then use the Customize button (sometimes shown as a Report Builder-style panel) to re-group by day, by customer, or by transaction type, add or remove columns, and save it as your own report to reuse. This doesn't change any numbers — it's the same underlying entries, just organized to answer a specific question faster than scrolling through the raw default order.

Reconciling COGS numbers

Not looked into in detail yet — this section is a placeholder, not a procedure. The tools that would matter here (QuickBooks' Inventory Quantity Adjustment, for truing up system-tracked quantities against a physical count) are known to exist, but how/whether reconciliation actually needs to happen between MOM's old numbers and QuickBooks' new ones hasn't been worked out. Don't treat anything above as a reconciliation process — it isn't one yet.

Rollout, blow by blow: what actually happens to the books

Assume the cutover: orders stop being entered into MOM, and start arriving in QuickBooks directly from HubSpot instead.

On a granular level: instead of nothing happening in QuickBooks until month-end, every real invoice immediately triggers its own automatic entries — revenue, cost of goods sold, tax, all posted right then, tied to that specific invoice. What used to be one number a month becomes potentially hundreds of small entries a month, each traceable back to a real transaction.

What that does to the period-end report: nothing, at the total level. The Profit & Loss for that month is still just "add up everything posted to each account during the month" — it doesn't know or care whether that was one manual entry or five hundred automatic ones. Same math, same report, same place you'd go to look at it.

Why the total should still come out right: every dollar that used to be bundled into one monthly number is now the same dollar, just posted individually and automatically instead of manually and in bulk — as long as every real transaction that used to feed MOM's monthly number is now flowing through the new pipeline instead. The known gaps to watch for during that transition (not reasons to distrust the whole thing, just the specific things to check): anything MOM tracked that doesn't originate from a HubSpot invoice at all (royalties and similar), returns/credits if those aren't yet flowing through the new pipeline, and products that don't have a real match in QuickBooks' catalog yet, which land on a generic fallback account instead of their real one — right total, wrong bucket, until that catalog gap gets fixed.

Where to go to check any of this yourself: the Chart of Accounts → an account → Run Report, for the raw entries; Reports → Business overview → Profit and Loss, filtered to a date range, for the total; and comparing that total against whatever MOM would have reported for the same period, the old way.