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 whole cycle, with the idempotency and reconciliation needed to do it safely against real customer billing.
Who this serves
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 is 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 actually 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 could not reproduce from the repository alone. Everything else is traceable 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
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 are not in a public repo? I will walk you through the architecture and the decisions on a call.