Build a signup funnel and find where users drop off

One prompt builds the full funnel from landing → activation, publishes it as a public dashboard, and ranks drop-off steps by severity.

Published

difficulty beginner · time to value 2 minutes · tools used 3

Just say this

Build me a signup funnel: landing → signup_started → email_verified → first_action_completed. Show conversion at each step for the last 30 days, and publish it as a public dashboard I can embed.

Why this matters

Every founder says they have a signup funnel. Almost none have it live in front of them. The reasons are all engineering:

  • Mixpanel charges by event volume → you under-instrument
  • PostHog’s funnel builder is buried 4 clicks deep → you set it up once, forget the URL
  • “I’ll just write the SQL” → 90 minutes later, you have a tab-separated file

Agentry collapses this to one prompt because the agent has the full event vocabulary, builds the HogQL for you, publishes the result as a CORS-open public URL, and gives you the embed code. You get a funnel you’ll actually look at every Monday.

What you get

  • A funnel visualization showing conversion at each step (% and absolute)
  • Average time-on-step (where users hesitate)
  • A public dashboard URL — embed in your weekly review doc, Notion page, or marketing site

Walk through it

You

Build me a signup funnel: landing → signup_started → email_verified → first_action_completed. Last 30 days. Publish it.

Agent

Let me check what event names you’ve got — I want to make sure I’m using the exact names from your app.

agentry_list_event_names {
  project_id: "default",
  matching: "signup|verify|first_|landed|started"
}
{
  "events": [
    { "name": "$pageview", "count": 84200 },
    { "name": "signup_started", "count": 1840 },
    { "name": "signup_email_verified", "count": 1240 },
    { "name": "first_project_created", "count": 720 },
    { "name": "signup_completed", "count": 1110 }
  ]
}
Agent

Got it. Your email_verified event is actually signup_email_verified, and you don’t have a generic first_action_completed — you have first_project_created which sounds like the right activation moment. Building the funnel.

agentry_run_recipe {
  recipe_id: "funnel",
  params: {
    project_id: "default",
    steps: ["$pageview", "signup_started", "signup_email_verified", "first_project_created"],
    window_days: 30,
    conversion_window_hours: 168  // 7 days
  }
}
{
  "steps": [
    { "name": "$pageview", "count": 84200, "conversion": 1.000, "avg_time_to_next_s": 87 },
    { "name": "signup_started", "count": 1840, "conversion": 0.022, "avg_time_to_next_s": 142 },
    { "name": "signup_email_verified", "count": 1240, "conversion": 0.674, "avg_time_to_next_s": 1810 },
    { "name": "first_project_created", "count": 720, "conversion": 0.581 }
  ],
  "overall": 720 / 84200  // 0.85%
}
Agent

Funnel built. Headline numbers:

  • Landing → Signup-Started: 2.2% (industry median ~3% for SaaS — slightly low)
  • Signup-Started → Email-Verified: 67% (33% bouncing on email step — that’s high)
  • Email-Verified → First Project: 58% (4% lost over 30 min — friction in onboarding)
  • Overall conversion: 0.85% (landing → activation)

Biggest lever is email verification. Let me publish this as a dashboard.

agentry_publish_query {
  recipe_id: "funnel",
  description: "Signup → Activation (30d)",
  params: {
    steps: ["$pageview", "signup_started", "signup_email_verified", "first_project_created"],
    window_days: 30
  }
}
{
  "publication_id": "pub_9a2b",
  "public_url": "https://agentry.sh/q/pub_9a2b?key=agp_…(your public key)"
}

The output

📊 Signup → Activation Funnel (30d)

Landed                      84,200    ──────────────  100%
   ↓  87s avg               1,840     ▌   2.2%
Signup started              1,840     ▌   2.2%
   ↓  142s avg              1,240
Email verified              1,240     ▌   1.5%   (67% conv — 600 lost here)
   ↓  30 min avg            720
First project created       720       ▎   0.85%  (58% conv — 520 lost here)

Top opportunity: Email verification step (-33%, 600 users)
Suggested experiments:
  - Add SSO (Google) to skip email entirely
  - Send the verify email synchronously (avoid Postmark queuing)
  - Add "skip for now" with reduced trust (verify on first paid action)

Public dashboard:
  https://agentry.sh/q/pub_9a2b?key=agp_xxx
  ↳ Embed in Notion: paste the URL, it renders inline
  ↳ Embed in marketing site: <iframe src="..." style="...">

Setting it up

The agent needs to find your funnel events. The names don’t matter (the agent matches them by intent) but the events have to exist. Agentry has no SDK — every event is a raw POST to /v1/analytics/ (or its PostHog-shaped alias /v1/track/). Minimum instrumentation for a signup funnel:

// Tiny wrapper to avoid repeating the headers — your agent will generate
// something like this at install time (~25 lines). It's not an SDK.
async function sendAnalytics(body: unknown) {
  await fetch(`https://api.agentry.sh/v1/analytics/${process.env.AGENTRY_PROJECT_ID}/`, {
    method: "POST",
    headers: {
      "Authorization": `Bearer ${process.env.AGENTRY_DSN}`,
      "Content-Type": "application/json",
      "User-Agent": "myapp/1.0",  // REQUIRED — Cloudflare 403s default UAs
    },
    body: JSON.stringify(body),
  });
}

// Page view
await sendAnalytics({
  event: "$pageview",
  distinct_id: visitorId,
  properties: { path: window.location.pathname },
});

// Signup form opened
await sendAnalytics({
  event: "signup_started",
  distinct_id: visitorId,
  properties: { source: "/pricing" },
});

// Email verification clicked (server-side)
await sendAnalytics({
  event: "signup_email_verified",
  distinct_id: user.email,
  properties: { time_to_verify_s: secondsSinceSignup },
});

// Activation moment (your call — first project created, first message sent,
// first integration connected — whatever maps to "they got value")
await sendAnalytics({
  event: "first_project_created",
  distinct_id: user.email,
  properties: { project_id: project.id },
});

Note the distinct_id on every event — there’s no separate identify() call. The identifier just rides along in the body.

If you don’t know what your activation event should be, the activation-moment recipe helps you find it from data.

Variations

  • “Same funnel but split by acquisition source — does TikTok-acquired vs organic-search convert differently?”
  • “Show the funnel for users who signed up after we shipped the new pricing page (Feb 1+).”
  • “For users who dropped off at email-verify, do they ever come back? Show 30-day return rate.”
  • “Build the activation funnel for paying customers only — what does the path to expansion look like?”

Try this recipe in your own agent.

Paste the prompt above into your agent. It'll set up Agentry against your data, then run the recipe and show you the real output.

Install https://agentry.sh/agentry.md and set it up