Archer · fleet census · numbers/

A/B test numbers, as linked in Firestore

Every tenant document carrying abtestNumber (a primary that splits callers) or isABTestNumber (the variant side), read from the whole numbers/ collection and filtered in memory.

scanned2026-08-25 docs1,920 sourceaudit-abtest-links.ts envarcher-be / prd
TL;DR

20 primaries point at a variant and 11 variants point back — but only 8 are clean two-way pairs. Free2Grow alone has 12 primaries fanned into one variant, and 3 variants claim a primary that does not point back.

Of the 11 variants, 6 are production tenants (ServiceTitan) and the rest are demo/mock/test scripts.

20
Primaries
abtestNumber set
11
Variants
isABTestNumber set
12
Shared-variant links
primary → variant, no back-pointer
3
Dangling variants
primary does not link back
01

Clean two-way pairs


Primary's abtestNumber names the variant and the variant's isABTestNumber names the primary. These are the links decideNumberToUse in precall.ts was designed for: callers whose last phone digit parity mismatches the day of month are routed to the variant's call flow.

PrimaryVariantBusinessCRM
+18573805486+19472825414Apollo Home Servicesservicetitan
+15735703493+15078000768Genie of Fairviewservicetitan
+18062305594+17158606187GAC Servicesservicetitan
+18147476935+17439023331Free2Grow Heating and Airservicetitan
+12027592892+14245092067Mister McCarthy Home Servicesnone
+14633484351+19803006147Mock script Marc – Viatot Ice and Firenone
+15626847032+17572572490Carlo – test – Fire and Icenone
+19794153470+18165494753(no business name)none

8 pairs where both sides agree. Apollo and Free2Grow also appear in §03 because additional primaries share their variant.

02

All 20 primaries


Every document with a non-empty abtestNumber. Reciprocal means the variant's isABTestNumber names this exact primary; shared means the variant's back-pointer names a different primary.

PrimaryabtestNumberBusinessCRMLink
+12027592892+14245092067Mister McCarthy Home Servicesnonereciprocal
+12179658076+17439023331Free2Grow Heating and Airservicetitanshared
+12293635285+17439023331Free2Grow Heating and Airservicetitanshared
+14198208921+17439023331Free2Grow Heating and Airservicetitanshared
+14432380642+19472825414Apollo Home Services (J2 CLONE TEST)servicetitanshared
+14633484351+19803006147Mock script Marc – Viatot Ice and Firenonereciprocal
+15176976659+17439023331Free2Grow Heating and Airservicetitanshared
+15626847032+17572572490Carlo – test – Fire and Icenonereciprocal
+15735703493+15078000768Genie of Fairview (Primary)servicetitanreciprocal
+17373876088+17439023331Free2Grow Heating and Airservicetitanshared
+17543251363+17439023331Free2Grow Heating and Airservicetitanshared
+17744703351+17439023331Free2Grow Heating and Airservicetitanshared
+17753076998+17439023331Free2Grow Heating and Airservicetitanshared
+18062305594+17158606187GAC Services – live – TPservicetitanreciprocal
+18147476935+17439023331Free2Grow Heating and Airservicetitanreciprocal
+18573805486+19472825414Apollo Home Services (Primary)servicetitanreciprocal
+19045268179+17439023331Free2Grow Heating and Airservicetitanshared
+19084280249+17439023331Free2Grow Heating and Airservicetitanshared
+19789612713+17439023331Free2Grow Heating and Airservicetitanshared
+19794153470+18165494753(no business name)nonereciprocal
03

All 11 variants


Every document with a non-empty isABTestNumber. The column is the primary this variant claims; the last column says whether that primary actually points back.

VariantisABTestNumber (claimed primary)BusinessCRMBack-link
+14245092067+12027592892Mister McCarthy Home Servicesnoneok
+15078000768+15735703493Genie of Fairviewservicetitanok
+15177902429+15177902429Free2Grow Heating and Airservicetitandangling · points at itself
+15392691214+18147476935Free2Grow Integration Test (Jerry)servicetitandangling · primary → +17439023331
+17158606187+18062305594GAC Servicesservicetitanok
+17179931946+14722180643Master Plumbing, Heating & Coolingservicetitandangling · primary has no abtestNumber
+17439023331+18147476935Free2Grow Heating and Airservicetitanok · also targeted by 11 others
+17572572490+15626847032Carlo – test – Fire and Icenoneok
+18165494753+19794153470(no business name)noneok
+19472825414+18573805486Apollo Home Servicesservicetitanok · also targeted by +14432380642
+19803006147+14633484351Mock script Marc – Viatot Ice and Firenoneok
04

What the broken links mean


Trap for anyone touching these fields: isABTestNumber is typed string and holds a phone number, so if (numberData.isABTestNumber) is truthy for every one of these 11 docs — including the three dangling ones. The A/B unlink path in apps/web/src/app/api/abtest/route.ts deletes abtestNumber from the primary but must also clear isABTestNumber on the variant, or it produces exactly the dangling rows above.
05

How this was produced


Read-only. Whole-collection scan (1,920 docs — up from 1,893 on 2026-08-10) with in-memory filtering, per the fleet-write rule that Firestore cannot query for an absent field. No CRM collections were needed because both fields live on the numbers document itself.

# from apps/backend
doppler run --no-fallback --project archer-be --config prd -- \
  bun scripts/audit-abtest-links.ts

Re-run to refresh; the script prints the same three sections (primaries, variants, link integrity) this page is built from.