Dallas Crilley
Work
MarTech · billing Shipped

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)
history
1,792 commits over ~19 months
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.

How it is built

  1. 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.

  2. 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.

  3. 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

1,792 commits over 19 months
27 modules in the sync engine
35 Alembic schema migrations
202 accounts covered by one reconciliation audit self-reported

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.

Where this honestly stands

Shipped and actively maintained in production: the longest commit history in the portfolio. The often-cited 931 / 634 / 202 figures come from one reconciliation incident, not steady-state volume.

Want the parts that are not in a public repo? I will walk you through the architecture and the decisions on a call.