The June brief was written on the best data we had. Most of it did not survive the better data. This table is the point of the document β read it before anything else, because three of the four things we spent July on were chosen from the rows now marked REFUTED.
| What the 1 Jul brief said | Verdict | What we know now |
|---|---|---|
| Net all-rails fell Β£10,329 β Β£6,650, β36%, MayβJune | RECALIBRATED | Direction held, basis improved. In USD, net, both Stripe rails + RevenueCat: May $14,273 β Jun $9,564 (β33%). The June brief could only see one Stripe account and two months of app data. |
| "Every rail fell β Stripe β42%, iOS β33%" | REFUTED as like-for-like | π΄ Android billing migrated Stripe β Google Play around FebβMar 2026, concurrent with the quizβpaywall switch. Any Stripe-only comparison across that boundary is (web + Android) before vs (web only) after. ~80% of the Stripe decline was channel shift, not lost customers. This is now a standing law. |
| "The engine of the loss is churn against a shrinking base" | REFUTED | Blended money churn has been flat at ~13%/mo for 22 months. Skeptic-gated by-plan decomposition: no plan deteriorated post-March; the mix-shift attack failed. Churn is chronic and category-normal, not the acute cause of a June drop. The constraint on the visible rail is acquisition volume and sale value. |
| "DKIM/deliverability is the likely common cause of BOTH leaks β one fix, whole-funnel lift" | FIXED β NO LIFT | The fault was real: three conflicting DMARC records, so inbox providers ignored the policy entirely. Fixed. Auth audit PASSED 20 Jul (SPF includes AC Β· domain-aligned DKIM acdkim1/acdkim2 Β· strict DMARC satisfied). June sends: 0.04% bounce, ~0 complaints, Postmaster clean. And the funnel did not lift. The leads list still clicks at ~0.2% while members click 3β4%. The hypothesis was cheap, reasonable and wrong as a revenue lever. |
| "Failed-payment recovery only 46% β half is lost, big lever" | RECALIBRATED DOWN | 46% is the count-eventual figure and it oversells the prize. The operative number is $-value 20β30% and falling (June cohort: 6.6%). Config was already optimal before we looked β Smart Retries 4Γ/1mo, all emails on, Card Account Updater on, Retain off. There is no config lever. Worth ~$160β320/mo via a manual personal rail. Involuntary churn "rising 11%β18%" was a denominator artifact β absolute involuntary cancels are flat at ~15/mo. |
| "Trial β Paid is healthy at 40.5%" | SUPERSEDED | We do not have a normal trial funnel, so the metric was measuring the wrong thing. Two paths to payment: a carded trial where trial-start is the purchase (~50% simply don't cancel β a retention signal), and a direct ~50%-off purchase with no trial at all. The gate metric is Lead β Paid, by source. Matured trial conversion is 36.9%. |
| "You are NOT short of traffic β 3,527 leads in June, ~3.6Γ May" | HOLDS β with a caveat | Volume is real; quality is the story the June brief missed. Over 90 days: 10.4% of all quiz traffic is bot/junk (537 users β 12 leads β 4 buy-clicks), and a Meta lead is roughly half as likely to buy after handing over an email (35.1% vs direct 64.3%). We were not drowning in leads. We were drowning in the wrong leads. |
| "Lead β Trial is the new #1 leak" | RELOCATED EARLIER | The biggest single loss sits before that. The quiz landing screen loses 54.5% β 2,816 people in 90 days, no tap. Stripping the bot traffic it is 49.8%. It has been stable since at least 9 Jul β structural, not a regression. The 40 screens between Q1 and email capture lose nothing β none costs more than 2.5%. |
| "Meta CPL +139% β optimise for paid conversions, not lead count" | CONFIRMED β STILL BROKEN | Correct call, not yet executed. Meta is still trained on 5,171 Leads against 172 Purchases. The server-side Stripe β GA4 + Meta CAPI webhook shipped 21 Jul and is pending an Ads-UI confirmation. Until then the ad platforms optimise on add_to_cart, not revenue β which is why they keep buying us cheap leads that don't buy. |
| "Lifetime dilutes the recurring MRR a buyer pays for β use it for oxygen, not as the strategy" | CONFIRMED β and we did it again | The warning was right and we ran the promo anyway. 72 lifetime sales = $21,822.72 of July's cash (67 distinct buyers). July's headline is the best of the year; the recurring engine is $7,957. That is the second lifetime pull-forward in eight months (BF ~$31.6K, July-4 ~$21.8K). There is no third one available that doesn't eat the asset. |
| "Arrest the decline and show stabilisation for a buyer" | UNCHANGED β now measurable | Still the right goal, and now we can actually see it: MRR $10,987 / 761 subs, refreshed daily from live rails, against the $15K gate. In June we could not see our own top line. That part of the plan worked. |
tools/finance/revenue_per_month_pull.py Β· stripe_mrr_pull.py Β· quiz_buys_90d.py 90 Β· tools/quiz-analytics/pull_quiz_deep.py 90daysAgo yesterday Β· churn baseline data/customer-analytics/CHURN_BASELINE_PRE_MARCH_2026_ANALYSIS_2026-07-24.md (skeptic pass) Β· auth audit TMA-EMAIL-EXECUTION-PLAN-2026-07-20.html Β§1.| July cash, by rail (MTD) | Gross | Net | Note |
|---|---|---|---|
| Stripe Γ 2 (web subs + promo carts) | $23,754 | $21,398 | includes the lifetime cart |
| Apple (iOS) | $2,392 | β | RevenueCat gross; store proceeds ratio applied monthly |
| Google Play | $1,083 | β | the rail Android migrated onto |
| All rails | $27,229 | $22,117 | |
| β of which one-time | $19,997 | lifetime Β· does not recur Β· not MRR | |
| β of which recurring | $7,957 | the only number a buyer underwrites |
| Measure | Now | Basis |
|---|---|---|
| β Repeatable net cash β THE operating number | $7,570/mo | money actually arriving Β· Stripe recurring net (paced) + app net Β· one-time lifetime excluded Β· kpi_15k.json |
| Gap to the $15K gate β the real one | $7,430/mo | the number every action is judged against |
| MRR, all rails (secondary) | $10,987 | discount-adjusted, excludes the 110-sub cancel queue Β· book value, not cash |
| β web (Stripe Γ 2) | $7,883 | 543 subs |
| β app (RevenueCat) | $3,104 | 218 subs |
| Cancel queue at stake | $1,527/mo | 110 subs already cancelled, still inside their paid period |
| Gap measured on MRR (do not plan against this) | $4,013/mo | compares a book value to a cash target β understates the real gap by $3,417 |
This did not exist on 1 Jul. It is now reproducible in one command, and two tooling bugs that were silently corrupting it have been fixed.
| Step | People | Of previous | Of landings | Verdict |
|---|---|---|---|---|
| Landed on the quiz (S01) | 5,164 | β | 100% | |
| Answered the first question (S02) | 2,348 | 45.5% | 45.5% | β54.5% Β· the single biggest loss in the business |
| Reached email capture (P52) | 1,491 | 63.5% | 28.9% | ~40 screens, none costs >2.5% |
| Became a lead | 1,226 | 82.2% | 23.7% | email wall is not the problem |
| Reached the paywall (R10) | 1,174 | 95.8% | 22.7% | |
| Clicked buy | 604 | 51.4% | 11.7% | |
| Subscription created (Stripe) | 249 | 41.2% | 4.8% | normal cart abandonment, not a bug |
| Took money | 154 | 61.8% | 2.98% | 1 customer per 33.5 landings |
python3 tools/quiz-analytics/pull_quiz_deep.py 90daysAgo yesterday + python3 tools/finance/quiz_buys_90d.py 90. The 249β154 gap is subscriptions created that never took money (trials that died, incompletes).| Source | Users | Share | Lead % | Buy-click % | Verdict |
|---|---|---|---|---|---|
| Meta family (fb Β· ig Β· m.facebook Β· AN Β· facebook.com) | 2,802 | 54.3% | ~24% | 7.5% | volume, not intent |
| (direct) | 1,500 | 29.0% | 29.3% | 18.9% | 47% of all buy-clicks |
| 511 | 9.9% | 25.8% | 15.5% | small and good | |
| Leadpages (startup2013.lpages.co) | 97 | 1.9% | 37.1% | 19.6% | best real source |
| Dead sources β doubleclick Β· facebook.com Β· m.facebook Β· AN | 537 | 10.4% | 2.2% | 0.7% | 12 leads, 4 buy-clicks, 90 days |
| bodyweighttrainingarena.com | 7 | 0.1% | 28.6% | 28.6% | 1.9M impressions/28d β 7 quiz visits/90d |
add_to_cart, so we have been paying it to find people who click buy and don't pay. Fix the signal before judging the channel.| Week | 27 Aprβ3 Mayβ29 Junβ5 Jul avg | 6β12 Jul | 13β19 Jul | 20β26 Jul |
|---|---|---|---|---|
| Users | ~384 | 404 | 540 | 499 |
| Lead rate | 26.6% | 17.1% | 14.6% | 19.6% |
Traffic held; only the conversion to lead fell. 13β19 Jul was the floor at 14.6%; 20β26 Jul has recovered to 19.6% but is still 26% below baseline. At current volume that is roughly 40 leads a week still being lost. The leading suspect is the /api/quiz/config 404 observed on the live quiz β unverified, and dating it against the 6β12 Jul breakpoint is the single cheapest diagnostic we have.
| New sub sales, 90 days | Sales | % of sales | Cash | % of cash | Avg |
|---|---|---|---|---|---|
| Annual | 55 | 35.7% | $4,591.72 | 64.7% | $83.49 |
| Quarterly | 67 | 43.5% | $1,853.60 | 26.1% | $27.67 |
| Monthly | 32 | 20.8% | $646.65 | 9.1% | $20.21 |
| Total | 154 | 100% | $7,091.97 | 100% | $46.05 |
| Annual price actually charged | Count | Cash |
|---|---|---|
| $78.50 50% off | 44 | $3,454.00 |
| $157.00 list | 4 | $628.00 |
| $79.99 / $109.90 | 5 | $459.77 |
| $24.98 and $24.97 a YEAR for $25 β price-object fault | 2 | $49.95 |
Eight out of ten annual buyers paid half price β and the plan they paid it for cannot be bought from the quiz paywall at all (top tier there is a 12-week $24.98), even though /register/yearly_2026/ has been returning 200 the whole time.
The price is already decided β $97, not $157. The 4-seat growth fleet ruled on this the same day (see the master decision below): put annual on the paywall at $97, pre-selected, and raise the standing floor from $78.50 to $97 with a stated reason. Not full list β a deliberate floor raise. Their sizing: +$333/mo from the floor raise now, ~$800/mo once annual is actually on the paywall, and +$1,000β1,700/mo for the paywall change itself. My own arithmetic on this 90-day data agrees within range (+$248β271/mo for the floor raise alone at current mix).
Honest sizing: meaningful, not a silver bullet β and the June brief's mistake was calling one lever the whole answer, which I am not repeating. Also queued in the same ruling: remove quarterly from the paywall (43.5% of sales but only 26.1% of the cash), stop the free-trial route enrolling at monthly, and fix the two ~$25 annual price objects.
googleads.g.doubleclick.net alone: 136 users, zero leads, zero buy-clicks. Humans do not bounce at 99%.| Defect | Cost | Status |
|---|---|---|
/api/quiz/config returns 404 on the live quiz | tracks a 36% lead-rate collapse from 6β12 Jul β ~40 leads/week | unverified link, undated |
Silent checkout bail-out: if (i!=="control" && !P?.checkoutUrl) return; | button does nothing β no error, no event, no fallback. These users fire no analytics at all, so they are invisible in every metric we have | live |
| Annual not offered on the paywall (top tier is 12-week $24.98) | the highest-cash plan cannot be bought at the moment of highest intent β while /register/yearly_2026/ returns 200 | live |
| Two competing CTAs; the sticky one routes to monthly | steers buyers to the lowest-cash plan | live |
| Two subscriptions billed $24.98 / $24.97 for a year | price-object misconfiguration | live β Nic |
| "Report Bug" widget shipping on production, over the CTA | credibility, mobile viewport | live |
An honest ledger. Plenty was built; almost none of it moved recurring revenue β and it is worth being precise about which is which, because that is how we choose better next month.
| Shipped | Real? | Did it move money? |
|---|---|---|
| DMARC / SPF / DKIM fixed, auth audit passed, list health clean (0.04% bounce) | yes | no β leads still click at ~0.2% |
| Churn baseline established β 22 months, by plan, skeptic-gated | yes | no β but it stopped us spending August on a non-problem |
| AC estate mapped β 34,389 tags, 8 actually live, 3-phase cleanup scoped | yes | no β and archiving saves $0 (account locked to Apr 2027) |
| R1 cancel-queue save engine built; Wave A sent 20 Jul (37 members, 24/24 delivered) | yes | 2 replies, 0 saves yet β 81 members still unsent |
| 986 lifetime welcome arc E2βE6 wired; 57 buyers injected | yes | retention play, too early to read |
| Server-side Stripe β GA4 + Meta CAPI webhook shipped 21 Jul | yes | pending Ads-UI verification β this is the one that unlocks paid |
| Quiz funnel made reproducible + 2 corrupting tooling bugs fixed | yes | no β but every number in this document depends on it |
| July-4 lifetime promo | yes | $21,822 cash β and it is oxygen, not growth |
| Payment-recovery diagnosis | yes | no lever existed β config was already optimal |
marketing/campaigns/quiz-funnel/MASTER_DECISION_AND_PRIORITISED_PLAN_2026-07-26.md, which supersedes every companion to-do list. What follows is that plan, confirmed against this re-run. Where my own arithmetic differed I deferred to the ruling and said so.| Era | adds/wk | ends/wk | net/wk |
|---|---|---|---|
| Pre-Feb-2026 β the "old funnel" era (56 wks) | 23.5 | 31.3 | β7.8 |
| 2025 full year | 23.2 | 31.5 | β8.3 |
| Paywall era, MarβMay 2026 (14 wks) | 21.9 | 21.4 | +0.4 |
| JunβJul 2026 (8 wks) | 17.0 | 23.8 | β6.8 |
The "34 vs 13" was a busiest-week snapshot read as a rate. Corrected: cancels are 24% BETTER than the pre-Feb baseline (23.8 vs 31.3/wk), the bucket has been net-negative for two years (2025 ran β8.3/wk) so it is chronic rather than a new fire, and the paywall era's first 14 weeks are the only non-negative stretch in the window. Latest week 20β26 Jul: +17 (39 adds / 22 ends).
What actually broke in June is the ADDS side (21.9 β 17.0/wk), at exactly the moment the annual mix collapsed. That changes the priority: this is an acquisition-value problem, not a churn fire.
6β12 Julβ30: 26.6% β 17.1% lead rate with traffic holding, ~40 leads/week, cause still dark. Start by dating when /api/quiz/config began 404ing. Everything below is over-optimistic until this is fixed, which is precisely why it goes first β even though it banks no cash by itself.
Annual is 64.4% of the cash and currently unpurchasable from the quiz; the URLs already return 200. Pair it with making the silent checkout bail-out loud β real error, real fallback, and an event so those users stop being invisible in every metric. MODELLED +$1,000β1,700/mo.
π΄ CORRECTED 27 Jul β "charged today" is load-bearing, not a detail. The built-but-unused variant makes every tier a 7-day trial. Today's startβpaid is a healthy 61.8% precisely because the current 4-week and 12-week tiers charge immediately. Flipping to a trial gate trades immediate cash for cash gated at the measured 36.9% trial conversion. Verified sensitivity at $97: charged today β +53% Β· at 50% β +24% Β· trial-gated β β9%. At $157 the trial gate survives (+40%); at $97 it does not. A naive variant flip lands on the β9% case.
CAPI with real values: +$450β800/mo on the same budget. Junk (Nic, ~20 min, free): Google β pause Quiz Funnel | Competitive Non-Branded | US β live, and 35% of Google spend at Β£10.63/click; Meta β manual placements, uncheck Audience Network as a permanent lock.
π CORRECTED 29 Jul 2026 (live-verified β supersedes the line that was here). This previously said βexpect traffic to fall ~10%β and told us to pause the Display/PMax doubleclick placement. Both were wrong. (1) Audience Network already stopped on its own around 13 July β it peaked at Β£136.90 in the week of 29 June and has run at ~Β£0.05/week since, so it is 3.3% of 90-day spend and ~0.1% today. Unticking it is a lock against recurrence, not a traffic event β do not expect a ~10% fall. (2) Hold the Display/PMax exclusion β a live GA4 pull contradicts the βzero leadsβ claim for googleads.g.doubleclick.net. (3) The real live bleed is Competitive Non-Branded, which did not exist when this brief was written (first impression 10 July). Full evidence: task 5 in the revenue story & plan.
+$333/mo now, ~$800/mo after R1. Also: remove quarterly from the paywall (43.5% of sales, only 26.1% of cash), stop the free-trial route enrolling at monthly, and fix the two annual price objects charging ~$25 for a year.
+$700β1,000/mo. This is the email play worth running β not more deliverability work. Also repair the lifecycle corridors for the ~14 leads/day currently entering a dark one. Alongside it: R1 cancel-queue Waves B and C (81 members, ~$1,097/mo at stake, engine built and Wave A already proven deliverable) and the payment-recovery personal rail (~$160β320/mo).
Apple App Store Connect + Google Play subscription history back to 2024. It is the only thing that bounds the pre-February era and settles whether the old app-download funnel really earned more β a question that is otherwise unfalsifiable, because RevenueCat holds nothing before Feb 2026.
Mobile paywall defects Β· copy faults (the "96 progression levels" line, the "closes permanently" timer) Β· BWA overlays gated on the UTM fix (1.9M impressions is only ~6K sessions/mo at 0.32% CTR β 8β9 customers/mo β real, but smaller than it sounds) Β· the landing screen LAST Β· scale paid only after the measurement gate. Housekeeping: delete the 3 claude-qa-donotcontact test leads from AC.
add_to_cart is the proxy and all true paid conversion is cross-railed to Stripe.revenue_per_month_pull.py Β· stripe_mrr_pull.py Β· flow_metrics_pull.py Β· quiz_buys_90d.py Β· pull_quiz_deep.py Β· spend_daily_pull.py Β· lead_sources_pull.py. Where a claim could not be reproduced this session it is marked unverified rather than carried forward.TMA-STRATEGY-SOURCE-OF-TRUTH-JUL2026.html wins on contradiction. Historical record: TMA_TURNAROUND_BRIEF_JUN2026.html (1 Jul) and TMA_STRIPE_PAYMENT_ANALYSIS_JUN2026.html (v3).