Meter
Intermedia usage, billed straight into ConnectWise.
Full-stack billing automation that pulls Intermedia telecom usage and posts itemized charges straight into ConnectWise agreements, replacing a manual monthly reconciliation.
- language
- Python 3.11 (FastAPI), React 18 (TypeScript)
- sync engine
- 27 modules, idempotent ConnectWise sync
- ingest
- Selenium (Intermedia exposes no billing API)
- deploy
- Fly.io, 2-process (app + scheduler)
- ownership
- Sole engineer — requirements from operators through production
- in production
- An MSP’s monthly billing cycle; ~19 months (longest-running in the portfolio)
- history
- continuous development across ~19 months in production
- repo
- Private
The problem
MSPs reselling Intermedia hand-enter line-item charges into ConnectWise every month, where charges get misassigned and retries quietly create duplicates. Meter automates the cycle, with the idempotency and reconciliation needed to do it safely against real customer billing.
Stakeholder signal
An MSP stakeholder described Meter as the automation layer that saves substantial time in the monthly Intermedia-to-ConnectWise billing workflow, making a process practical that would not be feasible at the same level manually.
How it's built
-
Idempotency for a system with no safe retry
DB-level per-account locks stop concurrent syncs from double-billing. When ConnectWise returns an ambiguous 5xx, a ghost-addition detector queries back within a 15-minute window, matched on a content hash, to confirm whether the charge posted instead of blindly retrying or failing silently.
-
Edge cases turned into code
ConnectWise rejects additions dated before an agreement billing start. An effective-date handler detects that exact error, fetches the start date, adjusts, and retries, removing a class of manual corrections that used to happen every month.
-
Preview-before-sync and reconciliation audits
Operators can diff what the system would send against what ConnectWise already holds, with comparison keys that normalize display-string drift so it does not surface as a false mismatch. The reconciliation audit is what caught a tax-row identity bug spanning 202 accounts.
By the numbers
self-reported marks figures stated in docs or commit history that the source brief couldn't reproduce from the repository alone. Everything else traces back to code.
- 202: Basis: one December 2025 reconciliation incident snapshot recorded 931 audited work items and 634 mismatching billing cycles across 202 accounts; it describes audit blast radius, not steady-state monthly volume.
Where this honestly stands today
Shipped and actively maintained in production: the longest commit history in the portfolio. The December 2025 tax-row incident surfaced 931 work items, 634 mismatching billing cycles, and 202 affected accounts from one structural identity bug.
Want the parts that aren't in a public repo? Happy to walk you through the architecture and the decisions on a call.