A SaaS conversion review of every Rating Captain Local signup in March 2026, stitched together from production database, Pipedrive, GA4 (RATING LOCAL SEO), Sentry (rc-local) and Microsoft Clarity. The biggest leak isn't onboarding anymore — 921 visitors started the registration form and only 117 submitted it (12.7%). For the 335 that did sign up: 47% finish onboarding, 28% engage in-app, 17% come back tomorrow, 3.3% ever pay.
Each row is a step from the user's perspective. The bar shows what fraction of signups got there (so the marketing-side rows above 100% are unique visitors / form attempts). The drop between consecutive bars is where the user gave up or got blocked.
| Step transition | Pass-through | Lost |
|---|---|---|
| Register form started → submitted | 12.7% | −804 |
| Form submitted → Account created (Google OAuth bypass) | 286%* | +218 |
| Account → Connected Google | 85.4% | −49 |
| Connected Google → Has GBP location | 66.8% | −95 |
| Has location → Tracking a keyword | 66.5% | −64 |
| Tracking keyword → Did any in-app action | 74.8% | −32 |
| Did action → Returned after D0 | 60.0% | −38 |
| Returned → Started Stripe sub | 19.3% | −46 |
| Started sub → Still paying today | 72.7% | −3 |
*Form submission < account count because Google-OAuth signups skip the form entirely. The real signal is the 12.7% form completion — 88% of people who start the form never finish it.
Kill-zone 1 · NEW The register form itself: 921 starts → 117 submits. 87% abandon mid-form. Clarity logs 39 Cloudflare Turnstile error 300030 events on registration — captcha is silently failing on a meaningful slice.
Kill-zone 2 Polish onboarding completion: 26.4% (39/148) vs English 63.2% (108/171) — a 36.8-point gap on the home market. Worse than Mar–Apr (21pt). Either translation is degraded or PL users are hitting a step EN users skip.
Kill-zone 3 Connected Google → has location: 286 → 191 (28pt loss). 95 users complete Google OAuth but never select a GBP profile — likely the SelectLocation.vue Sentry crash (scrollToItem on null) is taking out the picker.
Activation isn't sticky 127 users tracking a keyword → 95 acted → 57 returned. Only 45% of "activated" users return next day — keywords were auto-seeded, never investigated.
Signup volume is steady (~75/week) — but the gap between signups and "did anything in-app" is consistent at ~70% every week. There is no sign of week-over-week improvement in March; whatever is broken in onboarding is broken consistently.
From user_usages — the only reliable in-product activity log — across all 335 cohort users, ever:
| In-app action | Users (of 335) | Share | Read |
|---|---|---|---|
| Quick Scan — fetched competitor profiles | 53 | 15.8% | Highest-engagement feature. "Spy on competitors" is what pulls people in. |
| Quick Scan — generated competition map | 43 | 12.8% | 81% of fetchers also generate the map — strong intent funnel. |
| Replied to a review | 37 | 11.0% | The classic core-feature wedge. 203 events from 37 users → ~5.5 replies/user. |
| Created post content (AI Posts) | 23 | 6.9% | The flagship "magic" feature reaches 7% of signups. Heavily used by those who try it: 362 events / 23 users = 16/user. |
| Refreshed keyword data | 19 | 5.7% | Despite 127 users having keywords, only 19 ever refresh — proves the keyword dashboard is a dead-end. |
| Reached the "aha moment" (tracking a keyword) | 127 | 37.9% | Includes 2 coworkers with access via parent working group. Keywords are auto-seeded on Google connect — 108 of them never refresh / quick-scan / do anything else with them. |
Of 1,299 keywords ever created by this cohort, 53.4% (694) are already disabled and only 3.2% (41) are observed. The keyword tracker, the supposed core value prop, is essentially unused: more than half of all created keywords are dead before the trial ends.
| Issue | Users | Where |
|---|---|---|
| Page not found: ./Pages/undefined.vue | 24 | Vue route resolution returns undefined → blank page on a key surface. |
| TypeError: …reading 'scrollToItem' | 16 | SelectLocation.vue — the "pick your GBP" dropdown. Likely cause of the 28pt OAuth→location loss. |
| TypeError: …reading '0' | 9 | App bundle, generic — 87 occurrences in Clarity. |
| TypeError: …reading 'nodeType' | 8 | App bundle. |
| TypeError: …reading 'locations' | 1 | this.current_group.locations — null group on dashboard load. |
| Cloudflare Turnstile error 300030 | 1 | Sentry only catches a fraction; Clarity logs 39 events in March. |
| Attempt to read property "id" on null | — | /onboarding/callback + /auth/facebook — OAuth returns. |
| count() error · null array | — | /api/guided-tour/status — explains 1/335 tour completion. |
| QueryException: actionable_insights.location_id missing | — | /mcp/local — DB schema drift, will block AI agent calls. |
rc-local Sentry retention is configured to ~24h. To attribute volume per cause to the March cohort specifically, retention would need to be bumped.
| Signal | Count |
|---|---|
| JS error: Cannot read properties of undefined (reading '0') | 87 |
| Script error (cross-origin, masked) | 42 |
| Cloudflare Turnstile error 300030 (captcha fail) | 39 |
| can't access property 0, d[h] is undefined | 17 |
| Cannot read properties of null (reading 'locations') | 13 |
| ResizeObserver loop completed | 12 |
| Page | Dead clicks | Rage clicks |
|---|---|---|
/dashboard/keywords | 3,352 | 117 |
/dashboard/keywords/quick-scan | 1,387 | 14 |
/dashboard/reviews | 1,278 | 16 |
/keywords/check | 847 | 5 |
/login | 521 | 10 |
/settings | 471 | 17 |
/statistics | 386 | 35 |
Same pattern as Mar–Apr: /dashboard/keywords has the highest dead-click density (3,352 dead, 117 rage) — and it's the page the only "activated" users land on. They click, nothing happens, they leave.
| Stage | → next |
|---|---|
| 1 · Rejestracja RC Local → 2 · WENET | 93.4% |
| 2 · WENET → 3 · Leady Looker | 93.5% |
| 3 · Leady Looker → 4 · Import FB | 98.2% |
| 4 · Import FB → 5 · Contact | 98.0% |
| 5 · Contact → 6 · SQL | 100% |
| 6 · SQL → 7 · Ostatnie formalności | 98.2% |
| 7 · Ostatnie formalności → 8 · Umowa | 96.5% |
| 8 · Umowa → 9 · Klient | 98.2% |
| Pipeline win rate (deals that enter) | 23.7% |
| Pipeline lost rate | 76.4% |
Stage conversion is extraordinary for March — every single transition clears 93%+, three of them above 98%. Yet only 11 of 335 (3.3%) of cohort signups eventually paid Stripe. The "lost" rate is not lost deals; it's deals that never get touched in the first place.
origin: API), titled "Szansa sprzedaży {email}" — same pattern as Mar–Apr.pipedrive_id stored back on the user — a sync gap that worsened from 36% in Mar–Apr. Sales has no link back from CRM to the actual user record for nearly half the cohort.Industry benchmarks for a freemium / free-trial PLG SaaS in this space (local SEO, GBP tooling, ~Birdeye / GMB Crush adjacent):
| Metric | RC Local · March 2026 | SaaS benchmark | Verdict |
|---|---|---|---|
| Register form started → submitted | 12.7% | 55–75% | 5× below — biggest single leak |
| Register page → Account created (counts Google OAuth) | 51% | 35–55% | OK once they push past the form |
| Signup → Real activation (any in-app action) | 28.4% | 40–55% | ~2× below benchmark |
| Day-1 return rate | 17.0% | 35–45% | 2× below benchmark (slight improvement vs Mar–Apr) |
| Week-1 retention (D2–D7) | 14.0% | 25–35% | 2× below — this run is meaningfully better than Mar–Apr (7.7%) |
| Trial → Paid (ever) | 3.3% | 5–10% (PLG) · 15–25% (sales-led) | 1.5× below PLG floor (improving from 2.0%) |
| Trial → Currently paying | 2.4% | 4–8% | 2× below benchmark |
| Guided tour completion | 0.3% (1 user) | 40–60% | Effectively broken |
| PL onboarding completion vs EN | 26.4% vs 63.2% (-36.8pt) | ±5pt | Catastrophic locale gap |
The funnel shape has shifted since the Mar–Apr review. The biggest leak is no longer onboarding — it's the registration form itself. 88% of people who start filling it never submit it, and Clarity directly attributes 39 of those to Cloudflare Turnstile failures. Beyond the form, the product holds up surprisingly well at the OAuth step (85% connect Google) but then crumbles at the GBP location picker (a known Sentry crash) and at the keyword dashboard (3,352 dead clicks). Despite those problems, March is directionally better than Mar–Apr on every late-funnel metric (D1 return, week-1 retention, trial→paid all improved 1.5–2pp), suggesting recent fixes are landing — they're just being eaten by the new top-of-funnel leak.
921 users started form_start in March. 117 made it to form_submit. Clarity attributes 39 Cloudflare Turnstile 300030 errors on the registration page directly. Combined with the form-validation churn (no inline error states for password rules, no field-level retry), the form is the single biggest hole in the entire funnel.
form_field_error in GA4 with field name + reason. Today we know nothing about why people abandon.EN: 63.2% finish onboarding (108/171). PL: 26.4% (39/148). The gap was 21pt in Mar–Apr; it is now 36.8pt. Same product, but Polish users — the home market and largest single language — finish less than half as often.
browserLanguage = pl, watch 10 sessions of users who dropped, and identify the specific step / screen where PL diverges from EN.286 users connect Google but only 191 ever pull a location — a 28pt loss between OAuth success and having a usable workspace. Sentry RC-LOCAL-T4 logs 16 users hitting scrollToItem on null in SelectLocation.vue; that's almost certainly the cause. The remaining 79 users connect their Google but the picker silently breaks.
D1 return is 17%. Quick Scan is the most-used in-app feature (53 users / 15.8%) — but it sits behind a manual click most users never make. Auto-run a Quick Scan in the background after Google connect, and 12h after signup send a one-click email: "Your competitors are ranking #1 for these 5 keywords near you — see the map →".
The Pipedrive sync gap worsened: 42.1% of March signups (141/335) have no pipedrive_id at all (vs 36% in Mar–Apr). Stage conversion is essentially perfect (93–100% at every step) — sales just doesn't know who to call.
activated_at, keywords_count, has_location, last_login_at as Pipedrive custom fields, refreshed nightly.Same screen, same problem as Mar–Apr — 3,352 dead clicks and 117 rage clicks in March alone, on the page that was supposed to be our activation screen. Of 1,299 keywords created in March, only 41 (3.2%) are observed and 694 (53.4%) are already disabled. Users land here, click things that don't respond, and abandon.
visitedUrls contains "/dashboard/keywords" + deadClickPresent + first-session users. Watch 10 of them and ship the obvious fixes (tooltips that look like buttons, disabled CTAs without explanations, keyword-row expand affordance).Only one Spanish user finished it. Sentry RC-LOCAL-18A: /api/guided-tour/status returns 500 on a null array — the tour state endpoint is broken on first call. The current trigger requires ?guided_tour=true in the URL, which nobody has.
[] on the status endpoint.MailerLite groups today are TRIAL_PL/TRIAL_EN + day-based. Switch to event triggers: "signed up but didn't connect Google in 24h", "connected Google but no location in 24h", "has keyword but no quick-scan in 48h". Each gets a one-click magic-link straight to the next required action.
Today rc-local Sentry retention is ~24h. Every cohort retro requires guessing whether a March crash count was 24 users or 240. Bump retention so future report runs can correlate per-error volume to the exact cohort window.
Expected lift: precision of every future onboarding diagnosisform_field_error. This single fix could double signup volume without touching marketing spend.browserLanguage=pl by Friday.SelectLocation.vue. 286 connect Google but only 191 pull a location. Sentry has the smoking gun (scrollToItem on null, 16 users in 24h). Defensive null-guard + a "Pick manually / Switch account" fallback recovers the entire 28pt drop and lifts everyone downstream.google_profiles.users, onboarding_accounts, locations, keywords, working_groups, working_group_keywords, coworkers, user_usages, subscriptions396020608 "RATING LOCAL SEO" — page paths, events, host filter local.ratingcaptain.com for in-app traffic; full property for /register and form eventsratingcaptain project rc-local — last ~24h issue list (retention not extended; recommend bumping to 30d)