Onboarding, trial & money
Ladder · A3
The trial taken apart from their live listTeams API. Welcome Workouts, the ELITE bait-and-downgrade, and the real prices.
Question: How does Ladder onboard a new user, customise their experience, and convert them to paid?
One-line answer: Ladder runs a segmented, channel-specific 27-screen web quiz before the install, hands the answers to the app through a deep link, drops the user into a purpose-built ~32-minute "Welcome Workout" that exists for every single team, gives them ELITE-tier coach access free for 7 days with no card, and then takes it away.
Source legend
Per SCOPE.md. All web pulls dated 2026-08-16.
- [AS] App Store listing +
assets/appstore-us.json - [SS] Official App Store screenshots
- [IB] Ilia's first-hand notes
- [WEB] joinladder.com — includes the marketing pages, the shipped client JavaScript bundle, the public quiz definition JSON on S3, and public unauthenticated API endpoints. Where a claim comes from code or an API rather than rendered copy, the artifact is named inline.
- [REV] User reviews (App Store RSS, 500 most-recent US reviews pulled 2026-08-16; third-party review sites)
- [PRESS] Press / funding
- [VID] Video reviews
- [3P] Third-party estimates
Note on the code-derived evidence. A large part of this Finding comes from artifacts Ladder publishes openly:
www.joinladder.com/_next/static/chunks/*.js,ladder-web-quiz-prod.s3.amazonaws.com/<variant>/live/data.json,www.joinladder.com/api/subscription/pricing(live Stripe price list), androcky-api.prod.ltdev.io/v1/listTeams. Nothing was authenticated, bypassed, or scraped from behind a login. These are the strongest sources in the Inquiry because they are Ladder's own production configuration, not someone's memory of it.
1. What we found
1.1 Onboarding starts before the install, on the web, and it is a factory
Ladder does not treat onboarding as an in-app first-run flow. It treats it as a paid-acquisition landing funnel that happens to end in an App Store redirect.
The quiz page joinladder.com/quiz ships a list of 95 live quiz variants in its
page data [WEB — __NEXT_DATA__.props.pageProps.liveVariants]. Variant names follow
riddler_<channel>_quiz_<team>:
CHANNELS SEEN meta · tiktok · tiktok_topview · google · youtube · applovin
evo · podcast · whop · partnership · organic (hybrid_og_v2)
TEAMS TARGETED ascend define endure forged limitless movewell thrive
transform vitality era flourish formation ignite vantage
embody iconic body_and_bell projectalpha versa empwr
hduff (Hilary Duff) · male · male_no_email · generic
PARTNERSHIP VARIANTS benefithub · forma1mo/3mo/12mo · govx · himshers · joon
perksatwork · rewardgateway · stlouiscounty · thatch
Three things follow:
- The funnel is segmented by ad creative. A TikTok ad for Coach Maia's DEFINE team lands on a DEFINE-specific quiz. The quiz is the ad's landing page, not a generic front door. [WEB]
- There is an internal CMS for it. Routes
/internal/quiz/builder,/internal/quiz/overview,/internal/quiz/[variant]/previewexist in the build manifest, and variant definitions are fetched at runtime from S3 as JSON. Marketing can ship a new onboarding funnel without an app release. [WEB — _buildManifest.js] - Distribution runs through employer/benefits channels. BenefitHub, Reward Gateway, Perks at Work, Thatch, Forma, JOON are lifestyle-spending-account and employee-perks marketplaces; GOVX is military/first-responder; St. Louis County is a direct employer. This is a B2B2C acquisition lane sitting behind the same quiz. [WEB]
1.2 The quiz, screen by screen (base organic variant riddler_hybrid_og_v2)
Pulled verbatim from
ladder-web-quiz-prod.s3.amazonaws.com/riddler_hybrid_og_v2/live/data.json [WEB].
The file holds 57 items, of which 27 are live (the other 30 are hidden — a
library of retired screens and A/B alternates that stays shipped).
| # | Screen | Type |
|---|---|---|
| 0 | "FIND A WORKOUT PLAN FIT FOR YOU!" | intro |
| 1 | Do you have an iPhone or iPad? | gate |
| 2 | Do you already know which coach you want to train with? | question |
| 3 | Are you looking to workout with a specific coach? (23 options) | question |
| 4 | What is your primary fitness goal today? | question |
| 5 | Currently, how many days per week do you typically work out? | question |
| 6 | How many workouts per week include lifting weights? | question |
| 7 | How experienced are you with strength training? | question |
| 8 | RTB #1 — "You're one of us!" | sell |
| 9 | 5-star review — "Best workout app, hands down!" | proof |
| 10 | What is your age? | question |
| 11 | What is your gender? | question |
| 12 | RTB #3 — "members had tried it all" | sell |
| 13 | 5-star review — "Life changing!" | proof |
| 14 | What exercise type(s) do you prefer? (pick ≤3 of 13) | question |
| 15 | How much time do you typically budget for each workout? | question |
| 16 | Where do you primarily workout? | question |
| 17 | What equipment do you primarily want to train with? (≤3 of 13) | question |
| 18 | RTB #6 — "less than 1 minute away… up to 3 programs… trial is completely free" | sell |
| 19 | 5-star review — "The Best App" | proof |
| 20 | Have you ever used a fitness app for workout programming? | question |
| 21 | RTB #7 — "~50% had tried a fitness app, less than 5% were actively using one" | sell |
| 22 | 5-star review — "Exactly what I was looking for" | proof |
| 23 | Do you wear an Apple Watch during your workouts? | question |
| 24 | RTB #8 — strength-specific, Apple Watch, your own music | sell |
| 25 | 5-star review — "Best workout plans" | proof |
| 26 | Email — "Your results are almost ready!" | capture |
Then, not in the JSON but in the client code [WEB — chunk a9766837f594ee54.js]:
:: post-quiz sequence
├── calculating 5-second countdown, progress bar pinned at 95%
├── team-select top-3 recommended teams, progress bar 98%
│ A/B test "see all teams" keyed on utm_medium/utm_source
├── success
└── qr progress bar 100%
H1 "NICE CHOICE!" + "WELCOME TO LADDER"
sub "Scan to claim your free workout plan."
Apple stars/reviews image + press logos
The rhythm is deliberate: 3–4 extraction screens, then one reason-to-believe, then
one 5-star review. Ladder sells across the whole questionnaire rather than after it.
Verbatim RTB #6, which is the trial pitch: "We'll recommend up to 3 programs (we
call them Teams) based on what we learned in this quiz, and you'll be able to explore
all of them during your FREE trial. And the trial is completely free, we don't even
ask for a credit card to start!" [WEB]
Notable mechanics inside the quiz [WEB]:
- Screen 1 is a platform gate. Answering "No" to iPhone/iPad redirects to an
Airtable Android waitlist form. On iOS, the question is auto-answered and skipped
(
if clientID === "phone" && iOS() → select "yes", replace). It exists to segment ad traffic, not to inform the user. - Screen 3 short-circuits the whole quiz. Picking a named coach carries
points: 100, that team's ID, andfunction: "complete-quiz"— creator-driven traffic skips straight tocalculatingwithlaunchProgramIDset. Ladder's influencer-led acquisition has its own express lane. - Answer options carry
pointsandteamIDs. Team ranking = sum of points across all answers + a per-variantdefault_team_pointsbias. Top 3 by score are shown. - A team is only eligible to be recommended if it has a
welcomeVideoURL. Code:if (!team?.welcomeVideoURL) return null. The coach welcome video is a hard gate on distribution. - The "calculating" screen is theatre.
countDownDuration: 5— a fixed five-second wait. Ranking is computed client-side and instantly. - Answers are shuffled on goal, coach, styles and equipment (
shuffleAnswers: true) — order-bias control, i.e. someone is measuring this.
1.3 The in-app onboarding is the same quiz with the selling stripped out
There is a second live variant literally named onboarding
(ONBOARDING_VARIANT = "onboarding"), served at /app/auth/onboarding/quiz. Diffing
the two [WEB]:
| Web acquisition quiz | In-app onboarding | |
|---|---|---|
| Live screens | 27 | 15 |
| Questions | 15 | 13 |
| RTB / review interstitials | 10 | 0 |
| iPhone gate | yes | no |
| "Used a fitness app before?" | yes | no |
| Goal wording | "primary fitness goal" | "top fitness goal" |
| Gender wording | "What is your gender?" | "What gender do you identify with?" |
Once you are inside, Ladder stops persuading and only extracts. Same question bank, zero social proof, ~45% fewer screens. That is a cheap and very copyable principle.
1.4 The full customisation surface, and what it actually drives
Live inputs collected (both variants) [WEB]:
| Input | Options |
|---|---|
| Specific coach | 23 named coach/team pairs, incl. Prenatal |
| Primary goal | Look good feel good · Lose weight · Get active again · Gain muscle get stronger · Improve speed & endurance · Get toned |
| Days/week trained now | 0-1 · 2-3 · 4-5 · 6-7 |
| Lifting days/week | 0-1 · 2-3 · 4-5 · 6-7 |
| Strength experience | None · Beginner · Intermediate · Advanced |
| Age | Under 21 · 21-25 · 26-35 · 36-45 · 46-55 · Over 55 |
| Gender | Male · Female · Non-binary · Prefer not to say |
| Preferred styles (≤3) | Bodybuilding · Crossfit · HIIT/Circuit · Kettlebell · Running · Pilates · Yoga · Strength & Conditioning · Prenatal · Barre · Functional · Hybrid Strength · None |
| Workout length | 30 · 45 · 60 · 60+ minutes |
| Location | Only home · Only gym · Both |
| Equipment (≤3) | Assault/stationary bike · Barbell · Dumbbells · Kettlebells · Resistance bands · Jump rope · Pull-up bar · Rower/SkiErg · Treadmill · Bodyweight · Machines · Mini bands · None |
| Apple Watch | yes/no |
Not asked, and this matters: no injuries, no limitations, no height/weight, no
body-composition target, no body-part focus, no schedule (which days), no rest-day
preference. Coach-gender preference exists as a screen but is currently hidden
(hidden: true). [WEB]
What the answers drive:
- Team recommendation only — a weighted score picking the top 3 of 27 teams. There is no evidence anywhere that answers alter the workout content itself. Every member of a team gets the same coach-authored week. [WEB] + [REV]
- Marketing segmentation. On email capture the client writes every answer into
Braze as custom user attributes:
Quiz Result: <question>,Team Rec 1/2/3,Quiz Version,quiz_complete_timestamp, andorigination_utm_source/medium/term/ campaign/content; then fires aBraze Quiz Completedevent. [WEB] - Ad-network optimisation. TikTok pixel events are fired conditionally — e.g. a
Search_iOSevent only when age ∈ {26-35, 36-45} and workouts/week ∈ {4-5 days, 6-7 days} and the user is on iOS. They are feeding TikTok's optimiser a hand-built high-value-user signal. [WEB] - The install handoff. The App Store link is an AppsFlyer OneLink
(
links.joinladder.com) carryinglaunchProgramID,questionnaireVersion,team_recommendations_json, the entirequiz_answers_json, pluspromoCode,voucherCode,promoOriginatorUserID,promoSigToken. The app resumes the web session on first launch. [WEB]
Screenshot 09 shows a separate, short in-app setup step — a 3-segment progress bar on a "Connect your music to jam out during the workout" screen offering Spotify and Apple Music, with an X to dismiss and a SKIP link [SS appstore-09]. That is a 3-step post-selection setup flow distinct from the 13-question onboarding quiz. Music is one of the three segments; the other two are not evidenced — see §4.
1.5 Trial mechanics
Confirmed: 7 days, no card, not an Apple or Stripe trial.
- App Store description opens: "Try Ladder COMPLETELY FREE for 7 days. NO PAYMENT collected during trial." [AS]
- Site FAQ verbatim: "Nope! Ladder offers a 7 day, completely free test drive. Ladder will not ask for a credit card to start a trial. No payment info is collected until AFTER the free trial ends." [WEB]
- Not a StoreKit introductory offer. All 8 App Store IAP SKUs are listed at full price with no intro pricing, and an Apple intro offer requires a payment method on file at opt-in — which contradicts "no credit card". [AS]
- Not a Stripe trial. Every one of the 10 active prices returned by
joinladder.com/api/subscription/pricinghas"trial_period_days": null. [WEB] - It is server-side account state. The client reads
currentUser.membershipStatus(values seen:free,paid,canceling, plus trialing) and atrialDataobject withtrialing,daysRemaining,trialExpiration. Trials can be extended server-side:POST rocky-api.prod.ltdev.io/v1/processReferralwith{userID, referralURL}, which on success can fire a "🎉 Trial Extended!" dialog — "Your trial has been successfully extended. Your account status and trial period have been updated." [WEB]
This is the single most important structural choice in the Area: because the trial is Ladder's own account state and not Apple's, Ladder can vary it arbitrarily — by promo code, by partner, by campaign, by save-offer — without Apple in the loop. The shipped promo map proves they exploit that (see §1.9).
The trial is not feature-limited downward — it is feature-loaded upward. From the site FAQ, verbatim: "During the 7 free trial you have full access to Coach Chat, including a complimentary Form Check." Coach Chat 1-on-1 and Form Checks are ELITE Plan features ($44.99/mo). Trialists are given the top tier, then dropped to PRO. [WEB] This is directly visible in the wild — a 2★ review: "I had the pro annual at $179 and I used to be able to chat with the coach… And now I'm being told to subscribe to elite to message the coach?!" [REV]
Trial-period access, verbatim from the pricing page's Free Trial column [WEB]:
Free Trial · 7 days · Free
No payment info collected until AFTER your trial ends.
✓ Try all Ladder training plans (TEAMS)
✓ Get personalized plan recommendations
✓ Explore introductory welcome workouts
✓ Complete as many workouts as you'd like
✓ Explore all communities
Note line 3. Ladder markets the welcome workouts as a named trial-only content class, plural.
The trial as a designed artifact
This is the reconstruction of the 7-day sequence. Confidence is marked per element.
The centrepiece: the Welcome Workout is a real, separately-manufactured product.
[confirmed]
rocky-api.prod.ltdev.io/v1/listTeams returns, alongside the 27 teams, an array
practiceWorkouts with exactly 27 entries — one per team, no exceptions [WEB]:
| Field | Value |
|---|---|
name |
"Welcome Workout" (all 27; 10 in caps, 17 title case) |
isPractice |
true on all 27 |
dateStr |
3000-01-04 on all 27 — a sentinel far-future date |
durationMS |
28.7 – 41.2 min, median 32.2 min |
type |
"Full Body Strength" on 25 of 27; the two Pilates teams lead with Pilates |
practiceWorkoutID |
present on every team object |
welcomeVideoURL |
a Mux HLS stream, present on 27 of 27 teams |
Read that table again. It is not "week 1 of the programme". It is a parallel content object with its own flag, its own poster art, and a date deliberately set to the year 3000 so it can never collide with the dated weekly schedule. Ladder commissioned 27 extra ~32-minute full-body sessions — one per coach — whose only job is to convert.
The framing, verbatim from the Ladder web app [WEB — chunk 1df34a0dc492b8e8.js]:
"Let's find the right team for you" "Start your journey by finding the perfect Welcome Workout to sample your team's training experience" CTA: "Find Your Team"
So the Welcome Workout is positioned as a sampler you can run for several teams, not a one-time intro. Combined with "During your free trial, you can try as many teams as you would like" [WEB], the trial's core loop is taste-test multiple coaches, which is precisely the loop a 27-coach roster needs in order to pay for itself.
Independent confirmation from a first-person trial account [REV — Bustle, Ladder app review]: the reviewer's day 1 was "a 29-minute full-body routine that blended yoga moves, lower and upper body exercises, and Pilates-style movements" led by Coach Sasha (ALIGN) — i.e. a full-body sampler, distinct from what followed. The rest of the week was the team's normal dated schedule: Mon "Yoga & Strength", Tue "Glute Werk", Wed 44-min yoga, Thu "Back, Back, Back It Up", Fri layered yoga flow, Sat "Full Body Drip", Sun 23-min breathwork. Today's ALIGN Welcome Workout is 31.1 min [WEB] — the content gets refreshed.
And Ladder markets the Welcome Workout's conversion effect on the App Store itself. Screenshot 10 is a team-chat mockup whose hero message reads: "Hey everyone! I'm new to the Ladder app and that welcome workout has sealed the deal for me." — with 49 emoji reactions and a threaded reply, followed by a video message from Coach Lauren. [SS appstore-10] They know it is the activation moment and they advertise it.
Day-by-day reconstruction.
| Day | Element | Evidence | Confidence |
|---|---|---|---|
| 0 | Web quiz → email captured into Braze with all answers + top-3 teams | [WEB] | confirmed |
| 0 | QR / OneLink deep link carries answers into the install; team pre-selected | [WEB] | confirmed |
| 0 | 3-step in-app setup incl. music connect (Spotify / Apple Music), skippable | [SS 09] | confirmed (music step only) |
| 0 | Coach welcome video available for the selected team | [WEB] 27/27 | confirmed |
| 1 | Welcome Workout — ~32 min full body, team-specific, isPractice |
[WEB] [REV] | confirmed |
| 1 | Trial counter appears in nav: "6 days left of free trial" | [WEB] | confirmed |
| 1–7 | Coach Chat + one complimentary Form Check unlocked (ELITE features) | [WEB] | confirmed |
| 1–7 | Team chat surfaces new joiners; teammates + coach reply | [SS 10] [REV] | confirmed |
| 1–7 | Free team-switching → sample other teams' Welcome Workouts | [WEB] | confirmed |
| 2 | "Trialing NO WO 48 Hours" intervention for non-starters | [WEB], flag deprecated | historical |
| 3 | "Trial w/ WO Day 3 Check In" for engaged trialists | [WEB], flag deprecated | historical |
| — | "Trialing First WO Completed" trigger | [WEB], flag deprecated | historical |
| — | "Trial Intro Message" (rank 1 — highest priority) | [WEB], flag deprecated | historical |
| 6 | "Expiring Tomorrow w/ WO" / "Expiring Trial No WO" | [WEB], flag deprecated | historical |
| 7 | Nav copy flips to "Last day of free trial" | [WEB] | confirmed |
| 7 | "The app then reminds you when the trial is coming to an end" | [REV — Bustle] | strong |
| 8+ | Nav copy: "Your Free Trial Has Expired"; nav items fail entitlementsCheck and route to /app/upgrade |
[WEB] | confirmed |
| 8+ | "Expired Trial w/ WO" (rank 2), "Trial Expired ≤ 7 Days, Active", "Trial Expired > 7 Days, Active" | [WEB], flags deprecated | historical |
| 8+ | Trial extension is technically possible (processReferral → "🎉 Trial Extended!"); an endure_retrial_2025 code is special-cased |
[WEB] | confirmed capability, unconfirmed as a standard day-7 save-offer |
About the "deprecated" rows. The client ships a CHAT_FLAGS map — a
priority-ranked lifecycle-intervention taxonomy used to queue members for coach/CS
outreach. Verbatim labels, prefix AC (a queue name) and [IMP] [WEB]:
:: trial lane
├── AC - [IMP] Trial Intro Message rank 1
├── AC - [IMP] Trialing NO WO 48 Hours rank 9
├── AC - [IMP] Trial w/ WO Day 3 Check In rank 4
├── AC - [IMP] Trialing First WO Completed rank 5
├── AC - [IMP] Expiring Tomorrow w/ WO rank 9
├── AC - [IMP] Expiring Trial No WO rank 10
├── AC - [IMP] Expired Trial w/ WO rank 2
├── AC - [IMP] Trial Expired ≤ 7 Days, Active rank 12
└── AC - [IMP] Trial Expired > 7 Days, Active rank 12
:: member lane
├── AC - [IMP] Paid Member Welcome rank 6
├── AC - [IMP] No WO +7 Days / +12 Days rank 4
├── AC - [IMP] Wednesday No WO rank 10
├── AC - [IMP] No Message +10 Days (Healthy/Active) rank 7
├── AC - [IMP] No Msg +10 Days (Slipping/Pulse) rank 8
├── AC - [IMP] Slipping / Pulse / Dead rank 11
├── AC - [IMP] WO Milestone Shoutout rank 12
├── AC - Low Workout Rating rank 3
├── AC - Failed Renewal Payment rank 5
└── COACH - HBD Shoutout rank 11
:: still live (not deprecated)
├── COACH - General rank 0
└── AC - Needs Attention rank 0
Every granular flag above is marked deprecated: true; only "COACH - General" and
"AC - Needs Attention" are live. So this is proof that Ladder built a
day-by-day, behaviour-triggered human-outreach drip across the trial — and has since
collapsed it into two coarse buckets. Do not present the granular timeline as
today's live behaviour. Present it as: Ladder built this, ran it, and simplified it.
Ilia's felt sense of being "warmed up" is real and consistent with this machinery,
but the current delivery mechanism is Braze messaging plus the in-product counter, and
the exact live message schedule is not observable from outside — see §4.
What day 7 is, and is not. It is a hard entitlement wall, not a discount
moment. There is no evidence in any shipped surface of an automatic end-of-trial
discount or auto-extension. The nav flips to "Your Free Trial Has Expired", gated nav
items redirect to /app/upgrade, and the upgrade screen sells at rack rate:
headline "Get Results, Without Planning Workouts.", two plan cards with a
"BEST VALUE" badge on annual, the line "Cancel anytime", and a CTA that reads
"CONTINUE - SAVE 50%" when annual is selected. [WEB] Discounts exist, but they
arrive through promo codes and channel-specific offer pages, not as a scripted day-7
concession.
1.6 Pricing (US, as of 2026-08-16)
App Store IAP list — verified twice against two different App Store URLs [AS]:
| SKU | Price | Per month |
|---|---|---|
| PRO | $29.99 / mo | $29.99 |
| PRO Annual | $179.99 / yr | $15.00 |
| PRO+ | $34.99 / mo | $34.99 |
| PRO+ Annual | $329.99 / yr | $27.50 |
| ELITE | $44.99 / mo | $44.99 |
| ELITE Annual | $449.99 / yr | $37.50 |
| ELITE+ | $49.99 / mo | $49.99 |
| ELITE+ Annual | $479.99 / yr | $39.99 |
What each tier contains — verbatim from the site FAQ JSON [WEB]:
PRO — $29.99/mo
✓ Join 1 Ladder Team
✓ Change Your Team Up to 1x Per Month
✓ 5+ New Programmed Workouts Each Week
✓ Access to Community Chats
✓ 3 Save & Replay Workouts
ELITE — $44.99/mo
✓ Everything in Pro
✓ 20 Save & Replay Workouts
✓ Chat 1-on-1 With Your Coach
✓ 2 Form Checks Per Month
(up to 6 "Ask Your Coach" questions/month, incl. the 2 form checks)
"+" upgrade — "$15 / mo", available on either tier
✓ Access to All Ladder Training Teams & Workouts
✓ Unlimited Save & Replay Workouts
✓ Offline download of workouts (non-"+" members require WiFi)
Contradiction, unresolved: the FAQ says the "+" upgrade costs $15/mo, but the App Store deltas are PRO→PRO+ +$5.00/mo and ELITE→ELITE+ +$5.00/mo, while the annual deltas are +$150/yr and +$30/yr respectively. Four different numbers for one add-on. Flagged in §4.
The public site hides the ladder. joinladder.com/pricing shows only three
columns — Free Trial, Pro Monthly $29.99, Pro Annual $179.99 — and never mentions
ELITE or "+" [WEB]. ELITE and "+" are discovered in-app, after the user is
committed. Cheap and very copyable: one simple price in the storefront, the tier
ladder revealed only once you are inside.
Regional pricing — live Stripe price list, joinladder.com/api/subscription/pricing,
all active: true, livemode: true [WEB]:
| Currency | Monthly | Annual | Annual nickname |
|---|---|---|---|
| USD | — (IAP) | 179.99 and 170.99 | (no nickname on either) |
| EUR | 15.99 | 94.99 | "Euro … (March 2026)" |
| GBP | — | 89.99 | "GBP … (March 2026)" |
| AUD | 24.99 | 149.99 (+ legacy 179.99) | "AUS … (March 2026)" |
| NZD | 24.99 | 149.99 | "New Zealand … (March 2026)" |
Non-US annual pricing is roughly half the US annual price (€94.99 / £89.99 vs $179.99), and non-US monthly is roughly half too (€15.99 vs $29.99). A March-2026 repricing wave is visible in the nicknames. Two active USD annual prices ($179.99 and $170.99) suggest a live price test or a grandfathered cohort.
Historical / promotional price points seen in the wild [REV], all US:
- "I did the $99 for the first year" — a first-year $99 offer
- "I want the 9.99 offer but it's not available???" — a $9.99 price point exists
- "Signed up with a 50% off the first month and then was charged again after just 2 weeks" — 50%-off-first-month promo, plus a billing complaint
- "I had the pro annual at $179 … I was charged $191 instead" — $179.99 + tax
- A TikTok offer page in the bundle sells "A MONTH OF STRENGTH TRAINING FOR JUST
$4.99" with a "SPECIAL TIKTOK OFFER … TODAY ONLY!" banner, checked out through
Stripe with a hard-coded promo. The payment variant is literally named
riddler_tiktok_quiz_v1_webpay_5for1mo. [WEB]
No family or duo plan exists in any surface examined. All Teams cost the same — team choice is not a price axis; team access breadth is (1 team on PRO, all teams on "+" or PRO Annual). [AS] [WEB]
1.7 Paywall design
- Where it appears:
/app/upgrade, reached (a) when the trial expires, and (b) at any time a nav destination failsentitlementsCheck(privileges)— the click is intercepted and rerouted. There is also anappLockedPromptOpenmodal for unauthenticated/locked states. [WEB] - Analytics events shipped:
Paywall Viewed(withscreen: "upgrade"),Upgrade Opened,Upgrade Clicked,Trial Has Started,Trial Expired. [WEB] - What it says: headline "Get Results, Without Planning Workouts."; plan cards showing total and derived per-month price; a BEST VALUE badge on annual; "Cancel anytime"; CTA "CONTINUE - SAVE 50%" on annual. [WEB]
- Social proof at the paywall: the App Store rating/awards image
(
apple-stars-and-reviews.png) and a press-logo strip appear on the offer and QR pages. [WEB] The App Store listing itself leads with Apple 2025 App of the Year Finalist, Editors' Choice, Women's Health 2026 Best Overall, CNET 2026 Best Strength Training App [AS]; screenshot 01 carries Women's Health and CNET 2024 laurels [SS appstore-01]. - Is there a free tier after trial? No functional one.
membershipStatus: "free"exists as a state but the nav gates. The only genuinely free surface is the marketing-side "Free Workout Of The Day" page (/app/workout/today), which is an acquisition asset with its own email-capture cookie (WO_EMAIL_CAPTURE). [WEB]
1.8 Coach-led onboarding — the activation mechanic
Ilia's note 5 is confirmed and is structurally enforced, not incidental:
- Coach welcome video — 27/27 teams.
welcomeVideoURL(Mux HLS) is present on every team and is a hard prerequisite for being recommended at all. [WEB] - Welcome Workout — 27/27 teams, ~32 min, coach-voiced. [WEB]
- Coach Chat is open during the trial with a free Form Check — the ELITE experience, free for 7 days. [WEB]
- Team chat catches new joiners. Screenshot 10 shows exactly this: a new member posts, teammates pile on with reactions and a reply ("It's so worth it! Welcome to the team!"), and Coach Lauren posts a video message. There is a "Coach Pins" affordance in the chat header. [SS appstore-10]
- Weekly coach pep-talk video at the start of each new week [REV], plus per-workout intro and outro videos [REV].
- "The Drop" — new workouts publish Sunday 8:30pm ET, so a trial that starts mid-week hits a content refresh before it ends. [WEB — site FAQ]
Users name the coach unprompted in reviews far more than they name the app's features ("Coach Shelby from team Transform is the GOAT", "Coach Nairee if you're reading this thank you"). [REV]
1.9 Referral, promos, gifting, win-back
Referral = "Guest Pass". joinladder.com/referral runs the full marketing page
with every CTA replaced by "Claim Free Guest Pass" and the footer line "Start
your free 7 day trial now." [WEB]. Referral traffic gets an urgency line rendered
as shimmering text: "No credit card to start • Expires in 24 hours" [WEB].
Referrals are processed server-side via processReferral, and the deep link carries
promoOriginatorUserID + promoSigToken — signed attribution back to the referrer.
[WEB] What the referrer receives is not stated on any public surface — parked.
Users report the guest pass having been 30 days: "I would suggest using a friend referral so you can get the 30 day free trial", "I'm currently trying out this app with a 30 day free trial", "message me I'll send u a free trial" [REV]. Current public copy says 7 days.
The promo-code map is shipped in the client — ~70 live codes. [WEB] Trial lengths available as promo state: 14 days, 30 days, 60 days, 90 days, 6 months, 12 months free. Categories:
:: trial-length codes
└── 14day · 30day · 60day · 90day · shred30 · capitalcamp6mo
:: guest passes (creator/seasonal)
└── shredguestpass30 · summerguestpass30 · baselineguestpass30 · resetguestpass30
reloadguestpass30 · maxguestpass30 · sustainguestpass30 · givestrength2025
:: employer & benefits platforms
└── benefithub90 (90d) · rewardgateway60 · thatch60 · govx60 · perksatwork30
joon30 · himshers90 (Hims & Hers) · stlouiscounty30 + three 12-month codes
point72_free_12mo · point72_free_2025 · hcl_free_oct_2026 · advantage · pagagroup
:: residential / venue partnerships ("lvc")
└── Rambler Austin / Athens / Columbus / Atlanta / Tempe · Sweetwater · Paseo
all "Train For Free Until July 31, 2027"
:: brand & creator co-marketing
└── nutrabolt_free_12mo · factor30 · gruns30/90 · intake30 · bobbie_lk_30day
create30 · marsmen30 · drc30 (Diplo's Run Club) · agentio_creator_free_12mo
wasstalent / rangetalent free_12mo
:: seasonal & win-back
└── black_friday_2024_free_12mo · black_friday_2025_free_12mo ("You've been gifted
a free year of Ladder!") · newyear23trialext14 / newyear23trialext30
("New Year Trial Extension") · laddergift2025 · endure_retrial_2025
ditchthebike90 ("You've ditched the bike and unlocked 3 Months of free training")
:: discount-bearing
└── select30 ("30 Days FREE on Ladder + $10 off your monthly membership")
humanaut90 ("90 Days FREE + $10 off your monthly membership")
:: internal
└── adminfree ("Free Ladder Golden Ticket Applied Automatically!")
ditchthebike90 is a competitive-conquest code aimed at Peloton owners. Dedicated
Black Friday pages exist (/black-friday-annual, /black-friday-monthly,
/black-friday-monthly-12mos) and a /ladder-shop-claim flow. [WEB]
Gifting is evidenced only through the Black Friday codes' wording ("you've been gifted a free year of Ladder!"); no self-serve gift-purchase flow was found.
Feedback-for-credit: a string "Share your feedback and get $10 credit!" and a
/survey/tracking-progress route exist. [WEB]
1.10 Cancellation friction
Verbatim from the site FAQ [WEB]:
"How do I cancel?" — "You can cancel your Ladder membership at any time. Just let us know 3 business days before your next billing date to avoid the next recurring charge. To cancel, contact Ladder Support by clicking 'Contact Support' in the profile section of the Ladder app or emailing hello@joinladder.com."
That is a support-ticket cancellation with a 3-business-day notice period — real,
deliberate friction. It sits next to a contradictory line in the same FAQ: "PRO
Monthly • $29.99/mo → commit to a 30 day recurring subscription. Cancel at anytime
in the App Store." Best reading: IAP subscribers cancel through Apple; web/Stripe
subscribers must email, and Ladder's generic FAQ answer describes the Stripe path.
A createStripeBillingPortalSession endpoint exists for the web path. [WEB]
Billing pain is visible but rare in reviews — one 1★ "Signed up with a 50% off the first month and then was charged again after just 2 weeks… Ladder doesn't care about you" [REV]. Separately, the bundle contains an internal AI-support evaluation harness with synthetic customer personas, one of which is literally titled "Unexpected Charge — User charged during what they thought was a free trial", with a $29.99 charge three days into a 7-day trial. These are test fixtures, not real complaints, but they show Ladder actively rehearses this failure mode. [WEB]
Verdict on Ilia's notes 3, 5, 6
Note 3 — "их триал — это прям триал… у них типа тестовая неделя со своей отдельной
программой" — CONFIRMED, and stronger than stated.
It is not one test week with one separate programme. It is 27 separate Welcome
Workouts, one per team, each ~32 minutes, full-body, flagged isPractice: true and
dated to the year 3000 so they never enter the dated schedule. Ladder frames them as
samplers: "finding the perfect Welcome Workout to sample your team's training
experience", and the pricing page sells "Explore introductory welcome workouts" as
a trial benefit. Ladder markets their conversion effect on its own App Store
screenshot. Refinement: the rest of the trial week is the team's ordinary schedule —
the separate artifact is day 1, not the whole week. [WEB] [SS] [REV]
Note 3b — "они подогревают к оплате" — CONFIRMED as design intent, PARTIALLY
confirmed as current behaviour.
Ladder built a ranked, behaviour-triggered trial drip (Trial Intro Message → 48-hour
no-workout nudge → day-3 check-in → first-workout congratulation → expiring-tomorrow →
expired follow-ups at ≤7 and >7 days). Every one of those flags is now marked
deprecated. What is definitely live today: a persistent trial counter in the nav
("N days left of free trial" → "Last day of free trial" → "Your Free Trial Has
Expired"), Braze-driven messaging keyed on quiz answers, ELITE features granted then
withdrawn, and team-chat social pressure. The precise live message-by-message
sequence is not observable from outside. [WEB] [IB]
Note 5 — "тренера классно онбордят в приложении" — CONFIRMED and structurally enforced. Every team has a coach welcome video (27/27) and a coach-voiced Welcome Workout (27/27); a team cannot even be recommended by the quiz without a welcome video. Coach Chat and a free Form Check are unlocked for the trial week. The team chat greets new joiners and the coach replies with video. [WEB] [SS appstore-10]
Note 6 — "есть кастомизация в рамках онбординга" — CONFIRMED, with an important correction. 13 questions in-app, 15 on the web. But the customisation does not customise the training. It scores 27 teams, picks a top 3, and writes the answers into Braze for marketing. Everyone on a team gets the identical coach-authored week. What looks like personalisation is assignment. [WEB] [REV]
2. Capability / object table
| Object | What it is | Where it lives | Evidence |
|---|---|---|---|
| Quiz variant | Versioned JSON funnel definition (items, options, points, teamIDs) | S3, per <variant>/live/data.json |
[WEB] |
riddler_hybrid_og_v2 |
Base organic web quiz; 27 live screens | joinladder.com/quiz | [WEB] |
onboarding |
In-app onboarding variant; 15 live screens, no selling | /app/auth/onboarding/quiz | [WEB] |
| Team | Programme + coach + style + intensity + equipment + splits | listTeams API; 27 live |
[WEB] |
welcomeVideoURL |
Mux HLS coach intro; gates recommendability | Team object; 27/27 | [WEB] |
| Practice Workout | The "Welcome Workout"; isPractice, dateStr 3000-01-04 |
listTeams API; 27/27 |
[WEB] |
| Trial state | membershipStatus + trialData{trialing,daysRemaining,trialExpiration} |
Ladder server | [WEB] |
| Entitlements | privileges + entitlementsCheck gating nav → /app/upgrade |
Client | [WEB] |
| Promo code | ~70 shipped codes; trial length 14d–12mo, plus $ discounts | Client promo-banner map | [WEB] |
| Guest Pass | Referral surface; signed originator attribution; 24h urgency copy | /referral, processReferral |
[WEB] |
| CHAT_FLAGS | Ranked lifecycle-intervention taxonomy (mostly deprecated) | Client constants | [WEB] |
| Braze | CRM; receives every quiz answer + top-3 team recs + UTMs | Client SDK | [WEB] |
| Stripe products | 2 (Pro Monthly, Pro Annual); 10 active prices, 5 currencies | /api/subscription/pricing |
[WEB] |
| App Store IAP | 8 SKUs: PRO / PRO+ / ELITE / ELITE+ × monthly / annual | App Store listing | [AS] |
| The Drop | Weekly content release, Sunday 8:30pm ET | Site FAQ | [WEB] |
3. Reconciliation notes
- A1 (product-surface):
/app/upgrade,/app/welcome-workout,/app/flex-workouts,/app/journal,/app/teams,/app/me,/app/connect,/app/settings,/app/members/[memberId]are confirmed route names from the web app's build manifest — useful for IA reconciliation. Bottom nav in screenshot 01 reads Workouts / Chat / Teams. - A2 (core-loop): every team object carries
workoutSplits(7 named days incl. "Rest"),avgWorkoutDurDesc,intensity,suggestedEquipmentDesc. The Welcome Workout is full-body regardless of the team's normal split. - A4 (content-coach-supply): 27 live teams (App Store description lists 20 — the listing is stale). 27 coach welcome videos + 27 Welcome Workouts + 5+ new workouts per team per week is the true content bill. IGNITE (Coach Stevie, "Beginner", "Get started with strength training from home") is the explicit beginner on-ramp team; Prenatal and EMPWR/Iconic/Era/Flourish/Vantage/Embody/Thrive are not in the App Store copy at all.
- A5 (retention-social): streaks are the most-cited retention hook in reviews; "cheers" during workouts; deprecated flags show milestone shoutouts and birthday messages were once coach-queued. The Welcome Workout's conversion job is completed by team chat, so A3 and A5 overlap at exactly one point: the first post.
- A6 (business-market): the partnership promo map is a revenue-channel map — employer benefits platforms, residential communities, DTC brands, talent agencies. Non-US pricing at ~50% of US suggests international is a growth bet, not a margin one.
4. Open Questions / Parked
- The other two segments of the in-app 3-step setup. Screenshot 09 proves a 3-segment bar with music as one step. The other two are not evidenced. Do not guess. Resolvable only by installing.
- The live trial message schedule. The granular CHAT_FLAGS drip is deprecated. What Braze actually sends on days 1–7 in August 2026 — push, email, in-app — is invisible from outside. Requires a real trial with email capture.
- What the referrer gets. Attribution plumbing is proven
(
promoOriginatorUserID,promoSigToken,processReferral); the reward is not stated on any public page. - Current standard guest-pass length. Site says 7 days; multiple 2026 reviews describe 30 days via friend referral; the promo map contains many 30-day guest-pass codes. Likely campaign-dependent — unresolved.
- The "+" upgrade price. FAQ says $15/mo; App Store deltas are +$5/mo, +$150/yr (PRO), +$30/yr (ELITE). Four numbers, one add-on. Unresolved.
- Whether day 7 ever produces a save-offer. The capability exists
(
endure_retrial_2025, "🎉 Trial Extended!", $9.99 and 50%-off price points seen in reviews). Whether it fires automatically at expiry is not evidenced. - Whether the native iOS onboarding is identical to the
onboardingweb variant. Same content service, but the native flow was not observed. Assumed, not proven. - The two active USD annual Stripe prices ($179.99 and $170.99). Price test, grandfathered cohort, or partner rate — unknown.
- Trial abuse controls. Nothing found on whether a second trial per Apple ID / email is blocked.
- Conversion rate. No trial→paid figure was found in any public source.
5. What this does NOT cover
- The in-workout experience, audio coaching, tracking, Journal — A2.
- Streaks, cheers, Volts/Rewards, team dynamics past the first post — A5.
- How workouts and coach content are produced, and the coach economics — A4.
- Company financials, funding, revenue estimates, market size — A6.
- Screen-by-screen IA and the design system — A1.
- The 2026 nutrition expansion beyond noting it is included at no extra cost and is free to try during the trial.
- Android. iOS-only; the quiz redirects non-iOS traffic to an Airtable waitlist.
- Any authenticated in-app surface. Everything here is from public pages, the public client bundle, public quiz JSON, public API responses, the App Store listing, official screenshots, and user reviews. Nobody signed up.
Six parallel Scouts · reconciled in one brief · nothing summarised away