DiscoveryBrain · Inquiry 004Competitive teardown17 Aug 2026

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.

A36,272 words~29 minchapter 2 of 6
inquiry004-ladder-teardown
areaonboarding-trial-monetization
typefinding
sensitivitypublic
created2026-08-16
last_validated2026-08-16
reconciles
statusdraft

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), and rocky-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:

  1. 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]
  2. There is an internal CMS for it. Routes /internal/quiz/builder, /internal/quiz/overview, /internal/quiz/[variant]/preview exist 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]
  3. 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, and function: "complete-quiz" — creator-driven traffic skips straight to calculating with launchProgramID set. Ladder's influencer-led acquisition has its own express lane.
  • Answer options carry points and teamIDs. Team ranking = sum of points across all answers + a per-variant default_team_points bias. 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:

  1. 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]
  2. 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, and origination_utm_source/medium/term/ campaign/content; then fires a Braze Quiz Completed event. [WEB]
  3. Ad-network optimisation. TikTok pixel events are fired conditionally — e.g. a Search_iOS event 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]
  4. The install handoff. The App Store link is an AppsFlyer OneLink (links.joinladder.com) carrying launchProgramID, questionnaireVersion, team_recommendations_json, the entire quiz_answers_json, plus promoCode, 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/pricing has "trial_period_days": null. [WEB]
  • It is server-side account state. The client reads currentUser.membershipStatus (values seen: free, paid, canceling, plus trialing) and a trialData object with trialing, daysRemaining, trialExpiration. Trials can be extended server-side: POST rocky-api.prod.ltdev.io/v1/processReferral with {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

Exhibit 10 · Team chat Threaded replies, reaction counts, Coach Pins, and a coach posting video into the channel.

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 fails entitlementsCheck(privileges) — the click is intercepted and rerouted. There is also an appLockedPromptOpen modal for unauthenticated/locked states. [WEB]
  • Analytics events shipped: Paywall Viewed (with screen: "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:

  1. 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]
  2. Welcome Workout — 27/27 teams, ~32 min, coach-voiced. [WEB]
  3. Coach Chat is open during the trial with a free Form Check — the ELITE experience, free for 7 days. [WEB]
  4. 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]
  5. Weekly coach pep-talk video at the start of each new week [REV], plus per-workout intro and outro videos [REV].
  6. "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

  1. 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.
  2. 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.
  3. What the referrer gets. Attribution plumbing is proven (promoOriginatorUserID, promoSigToken, processReferral); the reward is not stated on any public page.
  4. 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.
  5. 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.
  6. 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.
  7. Whether the native iOS onboarding is identical to the onboarding web variant. Same content service, but the native flow was not observed. Assumed, not proven.
  8. The two active USD annual Stripe prices ($179.99 and $170.99). Price test, grandfathered cohort, or partner rate — unknown.
  9. Trial abuse controls. Nothing found on whether a second trial per Apple ID / email is blocked.
  10. 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.
DiscoveryBrain Inquiry 004 · Ladder teardown
Six parallel Scouts · reconciled in one brief · nothing summarised away