Billing reconciliation
If you connect a PSA (ConnectWise, Autotask or HaloPSA), Ledger tries to link what you're billing a client for to the actual devices you manage for them — so it can tell you when you're managing something you never billed for (revenue leak), or billing for something nobody is actually managing anymore (a client-trust risk if it's ever noticed on their side). ConnectWise and Autotask can be reconciled device by device where billing lines link to devices. Where they do not, as with HaloPSA, whose billing lines carry no device links, Ledger tries to match invoice descriptions to devices and otherwise compares counts.
How well this works depends entirely on how your PSA agreements are structured, and Ledger detects and labels that honestly per client rather than guessing. Every client falls into exactly one of three patterns. Ledger checks Pattern A first, then Pattern C, and uses Pattern B (count-only) when neither applies:
Pattern A — Device-level (agreement configurations)
Your billing additions are linked to specific ConnectWise configurations, or your Autotask contract services are linked to specific configuration items (the highest-confidence case). Ledger joins each billed addition to the actual device behind that configuration, so it can tell you precisely which device is billed-and-managed, billed-but-not-managed, or managed-but-not-billed.
Banner shown: "Device-level reconciliation (agreement configurations)"
Pattern B — Count-only
Your agreements bill a quantity (e.g. "50 managed workstations")
with no link to which specific devices that covers. Ledger cannot say
which device is or isn't billed here — only whether the count of
devices it sees as actively managed matches the quantity you're billing
for. This is what powers the BILLING_COUNT_MISMATCH exception and the
device matrix's count-only (◐) cell state; nothing in this pattern is
ever shown as if it were a per-device link, because it isn't one.
Banner shown: "Count-only reconciliation available for this client — the agreement lists quantities without device links"
Pattern C — Per-device, by invoice description (fuzzy)
No configuration links exist, but enough of your active billing lines' invoice descriptions contain a recognizable device hostname or serial number that Ledger can infer a per-device link anyway. This is lower confidence than Pattern A — it's a text match, not a hard reference — and Ledger always labels it as such rather than presenting it with Pattern A's confidence.
Banner shown: "Per-device reconciliation via invoice descriptions (fuzzy — low confidence)"
No pattern yet
A client with no active billing lines synced at all shows "No agreement lines synced for this client yet" — there's simply nothing to reconcile against until agreement data exists.
Where this shows up
- The device matrix's Billed column reflects whichever pattern applies (see device matrix).
- The billing reconciliation screen shows the pattern banner above, plus the specific mismatches it finds.
NOT_BILLED,BILLED_NOT_MANAGED, andBILLING_COUNT_MISMATCHexceptions are generated from this same detection.