Hyrax — end-to-end marketing funnel

Spend → traffic → funnel → signups, by channel, source, country, device · Data pulled live from Google Ads, Vercel, PostHog, Reddit Ads, X Ads, GA4 · Aug 7, 2026
Dates: Source:
total ad spend in selected dates, all platforms
site visitors in range/source (Vercel)
external people in the app, selected dates (PostHog)
external jobs submitted, selected dates

1 · Where the money goes

Left: spend split by platform for the selected dates. Right: selected dates vs the prior period of equal length, raw and percent. Reddit and X daily series begin Aug 1.

2 · Inputs: what goes in the top

Google Ads spend per day split search vs Demand Gen (bars, left axis) and blog posts published per day (line, right axis). Reddit runs ~$110-140/day and X ~$40-50/day; their daily series appear in §1 and the funnel. Responds to the date controls.

3 · The funnel — ads to first job, end to end

Starts where money is spent. Impressions and clicks are platform-reported; site visits are Vercel by UTM source; app stages are PostHog, external people only (8 team/test accounts removed). Fully driven by the global date controls, with the prior period of equal length compared on every stage, raw and percent. Google ad data is exact per day; Reddit/X daily series begin Aug 1. Counts under 10 are directional.
Dates follow the global controls above · Channel:

4 · The same funnel as a flow (Sankey)

Band width = people, Aug 5-7. A Sankey shows where volume actually goes at each handoff, including the losses a pyramid hides.
Two of every three paid clicks never register as a measured site visit: in-app browsers, pre-load bounces, and blocked scripts. Of measured visits, fewer than half a percent reach the app, and none created an account in this window. The widest bands end in "left the site," and that is the precise problem the Aug 5-7 fixes attack.

5 · Inside the app

PostHog app events split external vs internal (team). App analytics history runs from June 4; the signup event ships with the new onboarding released Aug 6. This is where the funnel hands off to product.
EventExternalInternal (team)Read
Reached the app4 people22 people4 real prospects crossed over in 3 days
Created an account08the acquisition funnel ends here today
Onboarding: connect-org screen shown6 views (1 person)19 views (8 people)one external user hit the connect screen 6 times
Onboarding: sample repo opened2 (1 person)13 (8 people)sample-repo path is being exercised in testing
GitHub org connected13the external connect is an existing customer
Jobs submitted / completed2 / 2 (1 person)0an existing customer ran two jobs to completion
Plan changed10one external plan change in the window
Payment failed10a paying external user hit a payment failure; follow up
Rage clicks255 team rage clicks during onboarding testing is a UX signal in itself

6 · Targets and kill rules

The bar this funnel is judged against, set Aug 7. Benchmark sources: GrowthSpree 2026 ($60M+ managed B2B SaaS spend), PipeRocket 2026 (dev-tools cut), Affect Group 2026 (Demand Gen), AdBacklog 2026 (Reddit), WordStream 2026, WebFX (X).
MetricTodayTargetRule
Site visitors / day~6002,000scale winners only; no junk reach buys
Verified external signups / daybaseline set Aug 6 (measurement live)100 (leadership goal)first measurable week starts Monday Aug 10
Visitor → signup rate0%2.5-4% (PLG benchmark)pricing v2 + signup CTA + tagged landings shipped Aug 7
Cost per verified signup, per channelnot measurable until UTM handoff ships<$150 (dev-tools CPL benchmark: $855 avg, $180-350 typical B2B)any channel above $150 after one full week of attribution gets cut
Text-ad CTR floorX at 0.2%0.5%X verdict Aug 12 with Reddit text; below floor = cut
Platform-pixel conversionsReddit claims 111 in 3 days$50-150 per real signupnever steer budget; PostHog-verified numbers only

7 · What's failing and the fix

Every red number on this page, its root cause, the fix, and where the fix stands. Dates are commitments already made, not aspirations.
Failingvs benchmarkRoot causeFixStatus
0 external signups2.5-4% of visitors expectedHomepage CTA pointed at sign-in; 75% of clicks were mobile; ads landed on pages without conversion tags; old pricingSignup CTA fixed + mobile excluded + ads moved to /code-review + pricing v2 and the new onboardingALL SHIPPED Aug 5-7 · first measurable week starts Mon Aug 10
No channel attribution for signupsstructuralPostHog runs in the app only; UTMs die at the site→app boundaryMarketing-site snippet + cross-domain UTM handoff + identify-by-email at signup (GTM5-66)v0 prompt built, awaiting paste · due this week
Internal/test filter relies on geographystructuralApp does not identify users by email at signupSame GTM5-66 ship adds identify; filter switches from city-cluster to email domainbundled with the row above
X CTR 0.17-0.21%1-3% benchmark, 0.5% kill floorBroad targeting, weak creative resonance; 226K impressions for 381 clicks in 3 daysTagline reframe test running at $50/day; hard verdict with Reddit textVERDICT Aug 12 · below floor = cut
Reddit clicks land on the homepage without conversion tagsstructuralReddit API partner tier blocks destination edits programmaticallyManual edit in Reddit Ads Manager: destination → /code-review, desktop-only, budget to ~$150/dayPENDING · 2-minute manual change
Reddit pixel claims 111 conversions in 3 days, reality 0$50-150 per qualified B2B signup benchmarkPixel counts view-through and page events, not accountsStanding rule shipped to §6: platform pixels never steer budget; PostHog-verified onlyRULE IN EFFECT Aug 7
hyrax.dev/signup returns 404structuralNo redirect on the marketing site; buttons link to app.hyrax.dev/signup directlyOne-line redirect via v0 promptPENDING · found Aug 7
GA4 dead since Jul 28structuralSite redeploy shipped without the tagPostHog becomes the single behavioral source of truth once site snippet ships; GA4 stays for Google Ads conversion import onlydecision folded into GTM5-66
External payment failure (1 user)operationalSingle event in PostHog Aug 5-7Identify the account and follow up directlyNEW · surfaced by this report
2 DG ads "approved (limited)" on YouTubepolicyYouTube content requirements flag on 2 of 5 videosAug 7 URL change re-triggered full review of all 5 adsre-review in progress

8 · Visits by campaign (interactive)

Vercel unique visitors by utm_campaign within the selected dates, with the prior period of equal length. This is the campaign drill-down inside each channel; ad-platform cost per campaign is in the verdicts table with stated windows (§9).

9 · Campaign verdicts by channel

Every campaign that spent money in the last 21 days, with its result and its status decision. Windows stated per row.
ChannelCampaignSpend / result (window)Verdict
Google SearchCodeReview_NonBrand$73/day recent · 25 start-free clicks at $7.81 (Jul 30–Aug 6) · tracked signup Aug 6 · CPC $8.15 vs $8.50-14 dev-tools benchmarkWINNER — budget raised to $150/day Aug 7
Google SearchDevSecOps_NonBrand$75-118/day · tracked signup Aug 7WINNER — $120/day + tCPA $35 set Aug 7
Google SearchBrand-Defense$10-24/day · protects the brand queryKEEP — $10/day
Google SearchCodeSecurity_NonBrand$34/day avg · 0 signups (Aug 1–7)PAUSED Aug 7 — winners-only consolidation
Google SearchCompetitorSwitchers_NonBrand$46/day avg · 0 signups (Aug 1–7)PAUSED Aug 7
Google SearchSonarQubeSwitchers_NonBrand$50/day avg · 0 signups (Aug 1–7)PAUSED Aug 7
Google DGDeveloper Review Aug2026 (old)$388 on Aug 5 alone, 1,177 clicks — 2-3 AM international mobile YouTubePAUSED Aug 5 — replaced, never re-enable
Google DGDeveloper Review US (new)735 clicks / $118 today at $0.16 vs $0.40-1.20 optimal benchmark · CTR 3.3% vs 1.5-2.5% optimal · US, daytime, lands on /code-reviewSCALED — $200/day, Max Clicks; mobile on for YouTube reach per Aug 7 policy
RedditTextOnly_Traffic$647 / 2,732 clicks at $0.24 vs $0.60-2.50 benchmark · CTR 3.4% vs 0.2-0.5% benchmark (21 days)WINNER on clicks — verdict on signups Aug 12
RedditQ3_Connect (video)$1,739 / 21 days · 289 pixel conversions at $6.02, unverifiedPAUSED — spend concentrated on text + ConvAds
Reddit3× ConvAd Signups (VibeCoding / Security / ReviewFatigue)$182 / 21 days · 210 pixel conversions at $0.69-1.08, unverifiedACTIVE — verify against PostHog when UTM handoff ships
XText Ads GitHub App v2$360 / 391 clicks · 141K impressions Aug 5 alone · 0 signupsSTOPPED Aug 6
XReframe Text Ads Aug2026$42 yesterday / 84 clicks · CTR 0.21% vs 1-3% benchmark, below the 0.5% kill floor · 0 signupsTEST at $50/day — Tristan's tagline test, runs to verdict
LinkedInAll campaigns (July relaunch)$1,599 Jul 21-27 · 2 real leadsCUT Jul 27 — only Tyler thought-leader boosts remain ($60+$60/day nominal)
MetaAll campaignsno spend since Aug 1CUT Aug 1 (GTM reset)

10 · Daily visitors, annotated with every change

Vercel unique visitors per day for the selected source; the selected date range is shaded. Aug 7 is partial.
July's 500-800/day baseline was paid social: mobile, short sessions, high bounce. The Aug 1 reset cut it on purpose and traffic fell to ~120/day. The Aug 5 spike (1,235) was the old Demand Gen campaign spending overnight on international mobile YouTube; it was found that morning and a new US-only campaign replaced it the same day. Aug 6 onward is the clean baseline: desktop, US, business hours, tagged landing pages.

11 · Traffic by source

Vercel unique visitors by UTM source within the selected dates.

12 · Traffic by country

Vercel unique visitors by country within the selected dates. Product scope is US-only at launch; all Google campaigns are now US-only.

13 · Traffic by device

Vercel unique visitors by device within the selected dates.
All 8 raw signups came from desktop; zero from mobile. GA4's last full baseline (Jul 8-27, tag died Jul 28) measured mobile paid sessions at 30-52 seconds with 80%+ bounce, versus 75-459 seconds on desktop. Search campaigns are desktop-weighted (-50% mobile, tablets off) as of Aug 7; Demand Gen keeps mobile for YouTube reach. This split shifts toward desktop from today.

14 · What changed, in order

DateChangeEffect
Jul 27LinkedIn campaigns cut ($1,599 for 2 real leads)Paid social spend to zero
Aug 1GTM reset: Meta cut, budget concentrated on Google/Reddit/XTraffic -85%, junk removed
Aug 44 Demand Gen YouTube videos liveNew reach channel
Aug 5New US-only campaign launched, 7 AM-11 PM ET schedule; app analytics confirmed live (history since Jun 4)Overnight junk eliminated
Aug 6Maximize Clicks bidding; $600/day all-channel capDG cost per click $0.91 → $0.16
Aug 7Device policy set (search desktop-first, tablets off); ads land on tagged /code-review; homepage CTA routed to signup (was signin); 3 losing search campaigns paused; winners' budgets raisedEvery Google dollar on US, business hours, converting pages, device-weighted to desktop