Cost review · 25 Aug 2026 · Twilio · Archer

Cutting the Twilio bill by more than half

Where the July 2026 bill goes, and what each lever is worth. Numbers are pulled read-only from Twilio usage records (July = last full month) and Firestore prd; savings are monthly at July unit prices, ± 15%.

July bill$7,639 Aug projected≈ $7,150 numbers in Twilio2,728 2 of 9 levers built
TL;DR

Two lines are 84% of spend: renting 2,728 phone numbers ($3,098) and toll-free SMS ($3,560). Around 2,000 of those numbers have no tenant, no calls in 90 days, or belong to churned accounts, and office texts average 3.9 segments because each carries a 130-character recording URL. Releasing stale numbers and shrinking the texts are worth $4,360/mo in the likely case (−57%, ≈ $52k/yr); the SMS and dead-recipient fixes are already implemented on this branch.

01

The headline


$7,639
July 2026 Twilio bill
Aug 1–25: $5,762
$4,360
Likely monthly savings
−57% · ≈ $52k / yr
$2,460
Conservative savings
−32% · ≈ $30k / yr
$3,280
Bill after, likely
2,728 → ~730 numbers
02

Where the July bill goes


Voice is already cheap — SIP trunking to Retell is $632 for 144k minutes. The money is in rentals and texts.

Twilio's channels line ($3,555) is the parent bucket for SMS outbound + carrier fees + inbound, not an additional charge; the itemized lines above sum to the $7,639 total. Not in use anywhere: Lookups, Verify, Studio, Conference, transcription, AMD, CNAM, trunk recording.

03

Savings by lever


Conservative vs likely, $/month. Stale-number release and the SMS body format are ~85% of the opportunity between them.

ConservativeLikely
04

Before and after


Bill composition today against the likely case.

July 2026After (likely)
05

Stale and unused numbers


2,728 numbers in Twilio; only 1,919 have a tenant document, and 1,215 of those (63%) have had no call in 90 days. Number rental is 40% of the bill, and nothing in the platform releases a number today — the only intentional release path is the A/B variant delete.

TierWho they areNumbers$ / moGate
ATwilio-only, no numbers doc. 806 route to GoHighLevel/LeadConnector; 691 were bought on 2025-12-19 in a three-minute window — residue of the "7,503 accidental purchases" incident. About 57% are fully idle.813idle ≈ 460$935idle $530Confirm GHL ownership with sales/marketing first
BaccountHealthExclusions — operator-marked test line or dead account — with no call in 90 days366$421Safest cohort; release first
Cunlisted (no HubSpot company) with no call in 90 days, minus A/B-linked numbers802$922128 have a CRM configured — spot-check; 202 were never called at all
Dunclassified with no call in 90 days12$14CSM check
Ecancelled (churned) with no call in 90 days. 11 of the 31 churned numbers still receive calls.8$9Offer forward or port-out; 30–60 day grace
ConservativeA idle + B + E≈ 830$960
LikelyA – E≈ 2,000$2,300

What could go wrong

Nothing releases todayTenant offboarding never deletes the doc or the Twilio number; disableSelfServeNumber only blanks the voiceUrl and keeps billing. Clones carry no isClone marker and docs have no created-at, so Twilio dateCreated is the only age signal.
A/B siblings19 stale numbers are linked via abtestNumber / isABTestNumber. Releasing one without unlinking sends callers to a dead number through decideNumberToUse; run clear-abtest-link.ts first.
Deny-listThe messaging-service senders (+17206339613, +18559202335, +19786968892) and both toll-free numbers must never be released. Release is irreversible after ~10 days.
Retell sideDeleting from Twilio without removeRetellNumber leaves orphaned retellData and Retell phone objects — 95 already exist.

Release process

  1. Resolve Tier A ownership (GoHighLevel/LeadConnector) — the largest block, with zero Firestore footprint.
  2. Build apps/backend/scripts/release-stale-numbers.ts to fleet-write conventions: dry-run by default, --apply plus a --cohort file, re-verify each number immediately before release (last call, class, A/B link, deny-list), write AuditTrail/{phone}/logs with the Twilio SID, detach from the Retell trunk and delete retellData. Script the revert first — the doc can be restored; the number cannot be re-bought.
  3. Grace step: blank voiceUrl and detach the trunk for 30 days, watch inbound attempts, then release.
  4. Cohort order: B → A idle → C never-called (202) → C 180d → C 90d → E with CSM sign-off.
  5. Structural fix: add a release step to offboarding, and stamp provisionedAt / expiresAt on demo, test and clone numbers so they auto-qualify.

Audit script and output: /tmp/archer-audit/audit-stale-numbers.ts, /tmp/archer-audit/number-audit.json (2,732 rows).

06

Other cost levers


SMS is $3,560 all-in, about $0.0123 per segment. Office lead texts averaged 3.9 segments because shortenUrl() was a stub returning the full ~130-character recording URL, alongside a duplicated summary line. 8.5% of messages failed outright — to the same landlines and dead numbers, call after call — and Twilio bills the failed segments too.

#LeverCons.LikelyEffortStatus · risk
1Shrink office SMS: real URL shortener (/r/:token redirect, ~50 chars), drop empty values and the summary line when the reason field already carries it, collapse blank lines. Measured 8 → 5 segments on real messages.$900$1,500LowbuiltSummary drop is a product call; one constant to tune.
2Drop the Premium Support plan (4% of spend) to Developer$294$294TrivialSlower Twilio support SLA. Console change, no code.
3Suppress dead SMS recipients: auto-disable after 3 consecutive permanent failures (landline 30006, dead 30005, invalid 21211, opt-out) or 10 transient; visible in the call log and Settings → Post Call with one-click re-enable.$150$245LowbuiltSavings ramp as the webhook accumulates history.
4Negotiate committed-use / volume pricing (~$7.6k/mo, mostly numbers and toll-free SMS)$500$1,200Sales cycle12-month commitment; shrinks once the levers above land.
5Move office SMS from toll-free to 10DLC senders (carrier fee ~$0.003 vs $0.0042 per segment)$200$290MediumCampaign vetting, per-number daily caps, carrier filtering.
6Delete 67,959 legacy pre-Retell recordings (92k minutes; none created since May 2026)$59$59LowExport to GCS first, or accept losing playback on old call docs.
7Merge after-hours lead + action texts; route monitoring.ts error SMS (with stack traces) to Slack$40$80TrivialNone.
8Transfers via SIP REFER instead of Retell bridging (21.6k bridged minutes a month)$50$75Med–HighTwilio-side saving is small; the real win is ~$1,000–1,500/mo on the Retell bill. Unverified that Retell supports REFER on custom trunks.
Retell-purchased numbers instead of TwilioNot recommended: Retell numbers cost more per number.

Outbound campaign calls originate from a Retell-owned number, so the $214 termination line is transfers and after-hours dial-outs only.

07

Totals


BucketConservativeLikely
Stale-number release$960$2,300
SMS format + failed recipients + after-hours / error texts$1,090$1,825
Support plan + recordings$353$353
Toll-free → 10DLC, SIP REFER (Twilio side)$250$365
Total, excluding negotiation$2,650$4,840
Volume-pricing negotiation — overlaps; apply to the residual bill$500$1,200

The headline figures ($2,460 / $4,360) are these totals with lever overlap removed — 10DLC and part of the SMS savings shrink once the SMS body shrinks — and negotiation excluded.