Reseller billing on NetSapiens® looks simple from the platform’s seat — Call Detail Records (CDRs) capture every call, the billing module rates them, invoices generate on a schedule, customers pay. In practice, the gap between CDR data and actual carrier invoices is where most resellers leak 3-8 % of margin every month: untracked DIDs that the carrier bills but you don’t, mis-rated international destinations that flow through at domestic prices, rounding differences that accumulate, plan changes that didn’t propagate to all line items. This is the structured workflow for reconciling CDRs against carrier invoices, the five patterns that cost MSPs the most, and the catches that pay for the reconciliation effort within the first month.
How NetSapiens® CDRs are structured
Every call generates a CDR with the fields that matter for billing:
- Calling number and called number (post-dial-plan-translation digits).
- Call start and call duration in seconds.
- Direction: inbound, outbound, on-net, off-net.
- Originating and terminating endpoints (extension or trunk).
- Routed-through trunk: which outbound carrier handled the call.
- Disposition: answered, no-answer, busy, failed.
- Rate group / plan applied at billing time.
Two things matter most for reconciliation: the routed-through trunk (which determines which carrier invoiced you for this call) and the rate group applied (which determines what you charged the customer).
The five recurring reconciliation patterns
1. Calls billed by the carrier but not in your CDRs
Symptom: carrier monthly invoice has 1,000 minutes of usage on a trunk that your CDR system shows 950 minutes for. The 50-minute gap is silent margin loss — you paid the carrier for 50 minutes you never billed to a customer.
Causes:
- Calls that failed mid-completion on the platform side but completed on the carrier side. NetSapiens® marked them failed; the carrier charged for the minutes used.
- Test calls from platform admin tools that aren’t tagged with a billable extension. Carrier sees usage; CDR has no customer to bill.
- Time-zone misalignment between CDR cycle and carrier cycle, causing a call that started before month-end to land in different invoice periods.
Fix: monthly reconciliation between platform-side CDR minutes and carrier-side invoice minutes per trunk. Investigate any gap > 1 %. Cross-reference suspect calls in carrier-side CDR exports.
2. DIDs billed but not provisioned
Symptom: carrier invoice has DIDs listed with monthly recurring charges that don’t appear in your customer-billing system.
Causes:
- DIDs ordered for a customer, billed by the carrier, but the provisioning step to associate them with a customer in your billing system never completed.
- DIDs released by a customer but the carrier-side deactivation paperwork didn’t process — carrier keeps billing.
- Test DIDs from staging that were never decommissioned.
Fix: quarterly DID inventory cross-check between carrier invoice listings and customer billing-system records. Every DID on the carrier invoice should map to either an active billable customer DID or a documented internal-use DID. Anything else is leaking margin.
3. Rate group misalignment
Symptom: international or premium-rate calls billed to customers at domestic rates.
Causes:
- Dial plan routes international calls through a trunk that the rate group treats as domestic (e.g., a domestic trunk that occasionally handles international).
- New international rate codes published by the carrier weren’t added to your rate group; old code is now treated as “unknown” and falls back to a default rate.
- Customer-specific overrides applied to the wrong rate group.
Fix: pre-invoice reconciliation. Before invoices send, run a query against the CDR set for the month: any call with destination code outside the rate group’s defined codes, any call whose rate is significantly different from the trunk’s expected rate. Flag and review.
4. Plan change propagation gaps
Symptom: customer upgraded their plan mid-cycle. The new plan applied to some line items but not others.
Causes:
- Plan changes in NetSapiens® propagate by feature, not atomically. A plan change that adds a feature might not retroactively update existing DIDs to the new feature pricing.
- Some plan attributes are per-DID overrides; changing the plan at the tenant level doesn’t change the DID-level overrides.
Fix: monthly audit of plan-to-DID mappings against the current customer plan. Any DID with rate overrides older than 90 days is a candidate for misalignment.
5. Carrier surcharges and regulatory fees
Symptom: carrier invoice includes line items for FCC fees, USF, 911, state surcharges — totaling 8-15 % of usage. These pass through to customers, but the markup logic differs by jurisdiction.
Causes:
- New regulatory fees published by the carrier weren’t added to the customer-billing rule set.
- State-specific 911 surcharges vary by service address; customer service addresses change without corresponding billing-rule updates.
- USF (Universal Service Fund) rate changes quarterly; reseller passes through but if the markup multiplier is fixed, the recovered amount drifts from the actual cost.
Fix: when the carrier publishes a fee schedule change (usually quarterly), reconcile the carrier’s listed fees against your customer-billing pass-through rules. Verify markup math against actual carrier costs.
The reconciliation workflow
For each monthly cycle:
-
Pre-invoice (72 hours before send):
- Generate CDR aggregates per trunk, per customer, per rate group.
- Compare to expected ranges from previous cycles. Flag anomalies > 10 %.
- Spot-check 20 random calls per high-volume rate group. Verify the rate applied matches the dial-plan-routed destination.
- Verify all DIDs on the customer’s billing record are still associated with the customer in NetSapiens®.
-
Carrier-side reconciliation (5 business days after carrier invoice arrives):
- Per-trunk minute totals: CDR vs carrier invoice. Investigate gaps > 1 %.
- Per-DID monthly recurring: every billable DID matches; surface untracked DIDs.
- Surcharge and regulatory line items: confirm each is reflected in customer-side pass-through.
-
Quarterly:
- Full DID inventory cross-check.
- Rate group definitions vs carrier rate sheet — any new destination codes the carrier publishes get added.
- Plan-to-DID mapping audit.
-
Annual:
- End-to-end audit of billing rules, rate groups, plan definitions, and carrier contract terms. Surfaces drift that gradual operations don’t catch.
This workflow finds the gaps that the standard “invoices ran, customers paid” view doesn’t. Most resellers running this discipline recover the reconciliation effort cost in the first one or two months — every reconciled gap is either margin recovered or a billing error caught before a customer complaint.
When to outsource the operational layer
Reconciliation is operationally heavy and rarely interesting work. Most reseller billing teams are 2-3 people, and reconciliation work competes against ticket handling, plan changes, and customer-facing communication. The result: reconciliation is the first thing dropped under pressure, and the margin leak compounds quietly.
Our outsourced VoIP billing support service handles the full reconciliation workflow — pre-invoice validation, carrier-side reconciliation, dispute investigation, plan-change propagation, and quarterly audits. Engineers run the cycles, your team reviews the exception reports. For the broader operational layer that billing sits inside — Tier 1–4 NetSapiens® support, dial-plan changes, provisioning, customer-facing change management — our white-label VoIP helpdesk covers the daily operational surface so billing operations isn’t competing with ticket queues for attention.
The metric that tells you reconciliation is working
One number to track monthly: CDR-to-carrier-invoice variance per trunk, in percent.
Healthy: < 1 % variance, trending stable. Watch: 1-3 % variance, investigate but acceptable. Action: > 3 % variance, something material is missing.
After six months of clean reconciliation, that number stays in the < 1 % band reliably. After twelve, you have enough historical data to model expected variance and trigger alerts automatically when the actual number drifts.
Reconciliation is unglamorous work. The teams that do it well don’t have smarter billing engineers — they have disciplined monthly workflows that catch the small gaps before they compound. The teams that skip it discover the gaps a year later in a margin review, by which point the leak has cost more than two years of reconciliation work would have. Run the cycles, document the variances, and the platform pays you back.