See where your paying customers come from.
twelvebit joins every visit to every payment, so each channel, page and campaign shows the revenue it brought. Paste one prompt into your coding agent and it sets up the tracking for you.
Free during public beta · no card · data stays in the EU
37 people on queststack.io right nowDemo
37 people are on queststack.io right now.
Revenue is up 31% this month. X brought 34% of it from only 22% of visitors.
Agent setup
One prompt. Your agent does the setup.
Paste the prompt into Claude Code, Codex or Cursor. The agent adds the tracker, writes your tracking plan, connects payments and checks that the first events arrive. You review the diff.
Prompt: Set up twelvebit analytics in this project for queststack.io. Work through these steps and report back at the end. [Pasted text +36 lines]
Read (package.json, app/layout.tsx)
Next.js 16, App Router, Stripe Checkout
Update (app/layout.tsx)
+4 lines · tracking script in <head>
Write (analytics.yaml)
+28 lines · 4 events, 1 funnel
Write (lib/track.ts)
+22 lines · typed helpers
Update (app/api/checkout/route.ts)
+3 lines · visitor ID in checkout metadata
Bash (curl -X PUT …/api/v1/tracking-plan)
200 · plan saved, 4 events added
Bash (claude mcp add --transport http twelvebit …/api/mcp)
MCP server connected
Bash (curl …/api/v1/install-check)
4 events received in the last minute
Done. I added 4 events (signup, submit_tool, bump, checkout) and passed the visitor ID to Stripe Checkout, so payments are attributed. Review the diff before you merge.
- Site addedqueststack.io
- First page view14:02:07
- Tracking plan4 events
- First goal: signup14:02:31
- Revenue: first payment$29 · test mode
# analytics.yaml · written by your agent, reviewed by you version: 1 project: queststack.io integrations: [stripe] events: signup: description: A visitor creates an account props: role: { type: string, enum: [maker, buyer] } submit_tool: description: A maker submits a tool to the directory checkout: description: A maker opens the checkout for a paid plan props: plan: { type: string } value: { type: number } bump: description: A signed-in user bumps a listing props: tool: { type: string } dashboards: funnels: - name: Visit to paid listing steps: ["page:/pricing", signup, checkout, payment]
npx -y https://twelvebit.app/cli/twelvebit-cli.tgz initRevenue attribution
See which channel brings the money, not only the clicks.
Connect Stripe, Polar, Lemon Squeezy, Paddle or Dodo Payments. twelvebit joins each payment to the visit that started it, so revenue sits next to its source.
X brought 34% of revenue from only 22% of visitors.
Last-touch revenue: the visit before the payment · Sep 17 – Oct 16 · demo data
- Revenue
- $11,750
- New customers
- 241
- Average order
- $48.76
- Per visitor
- $0.25
Realtime
Watch people arrive, and see who is ready to buy.
Every visitor is a ping on the globe. Signups glow mint, payments glow coral. The intent score uses pricing and checkout views, return visits and time on site.
| Visitor | Page now | Intent |
|---|---|---|
| amber-foxLisbon, PT · X | /pricing | High |
| quiet-otterAustin, US · Google | /checkout | High |
| blue-heronBerlin, DE · Newsletter | /submit | High |
| calm-ibisSeoul, KR · Reddit | /leaderboard | Medium |
| grey-wrenSingapore, SG · Google | / | Low |
Page view Signup or goal Payment
Funnels
Find the step where people leave.
Plan funnels in analytics.yaml, or ask for any order of pages and goals. Bars use a true linear scale, so a small step looks small. twelvebit marks the weakest step.
1 in 194 visitors becomes a customer. Most people leave between pricing and signup.
- Visited the site46,655
- Viewed pricing9,870
- Signed up1,120Weakest step
- Started checkout402
- Paid241
X converts best. Reddit sends many visitors who rarely pay.
Journeys
Follow one person from the first visit to the first payment.
Anonymous visitors get a friendly name like amber-fox. When they pay, twelvebit links the payment to every visit before it, across sources and days.
- Lifetime value
- $29
- Visits
- 5
- Days to pay
- 17
- First touch
- X · post about launch sites
- Last touch
- Direct
- Credited to
- Direct (last touch)
amber-fox found you on X, came back 4 times in 17 days, and paid $29 for Featured.
- Sep 2921:14 · X
- Landed on /blog/where-to-launch from a post on X
- Read for 3m 40s
- Oct 208:02 · Google
- Came back from a Google search
- Viewed /leaderboard and /pricing
- Oct 619:30 · Direct
- Viewed /submit for 2m
- Signed up · role: maker
- Oct 810:11 · Email
- Came back from the welcome email
- Submitted a tool · category: ai-coding
- Oct 1614:02 · Direct
- Started checkout · Featured, monthly
- Paid $29 · Stripe
Ask and MCP
Ask in plain words. Get a sentence and a chart back.
Every answer names its date range and attribution model, and shows the query behind it. The same tools work in your coding agent through the MCP server.
Question: Which blog posts brought paying customers last month?
/blog/where-to-launch brought the most: 58 customers and $2,940. That is 25% of all revenue. The next post brought less than half of that.
Last-touch revenue · Sep 17 – Oct 16 · 5 blog posts with at least one customer · demo data
Show the query
select landing_page, count(distinct customer_id) as customers, sum(amount) as revenue from payments join visitors using (visitor_id) where landing_page like '/blog/%' and paid_at between '2026-09-17' and '2026-10-16' group by 1 order by revenue desc limit 5
get_overviewVisitors, revenue, customers and conversion, with the previous periodget_revenueRevenue by channel and plan, and recent payments with their credited channelget_breakdownTop channels, pages, countries or devices, with attributed revenueget_funnelCounts per step, conversion by channel and days to convertget_journeyOne person's visits, events and paymentsget_realtimeVisitors online now and visitors per minuteget_install_statusWhich planned events have arrivedupdate_tracking_planValidate and save a new analytics.yaml
# Claude Code
claude mcp add --transport http twelvebit https://twelvebit.app/api/mcp --header "Authorization: Bearer $TWELVEBIT_API_KEY"Goals and tracking plan
Your tracking plan lives in your repo.
analytics.yaml lists every event and its props. It goes through code review like the rest of your app, and the dashboard shows the health of each event.
<!-- in <head>, on every page --> <script defer data-website-id="tb_7Kq2xW9fLm3Rp8Vd4N" data-domain="queststack.io" src="https://twelvebit.app/js/script.js"></script> // a goal, anywhere in your code window.twelvebit?.("signup", { role: "maker" }); <!-- or with no code at all --> <button data-tb-goal="signup">Create account</button>
| Event | 30 days | Status |
|---|---|---|
| pageviewautomatic | 46,655 | ✓ Receiving |
| signup2.4% of visitors | 1,120 | ✓ Receiving |
| submit_tool1.0% of visitors | 486 | ✓ Receiving |
| checkout0.86% of visitors | 402 | ✓ Receiving |
| paymentadded for each Stripe payment | 241 | ✓ Receiving |
| review_postednone for 3 days | 38 | ! Quiet |
Privacy
Useful numbers, without third-party cookies.
twelvebit counts visits and payments, not people across the web. You decide if the tracker uses cookies at all.
No third-party cookies
The tracker sets two first-party cookies on your own domain: _tb_vid for one year and _tb_sid for 30 minutes. Nothing is shared with ad networks.
Cookieless mode
Turn it on and the tracker sets no cookies at all. The visitor ID becomes a hash that changes every day. You keep page views, sources, goals and revenue.
IP addresses are not stored
twelvebit uses the IP address only while it handles a request, for example to apply your exclusion rules. It never writes the address to the database.
Data stays in the EU
The database runs in Germany. Your analytics data is processed in the EU.
Bots and AI crawlers
See which AI models read your site, and why.
Bots stay out of your visitor numbers. twelvebit sorts AI crawlers by what they do: answer a question now, index the page for search, or collect it for training.
AI answers
1,284An assistant fetched a page to answer a person's question right now.
- ChatGPT-User742
- Perplexity-User318
- Claude-User224
Search indexing
3,960An AI search engine added the page to its index.
- OAI-SearchBot1,830
- PerplexityBot1,190
- Claude-SearchBot940
Training
8,412A crawler collected the page as training data.
- GPTBot3,620
- ClaudeBot2,480
- CCBot1,510
- Bytespider802
Works with
Works with the stack you already have.
Sites and frameworks
- Next.js
- React
- Astro
- Vue
- Svelte
- WordPress
- Shopify
- Webflow
- Framer
- Plain HTML
Payments
- Stripe
- Polar
- Lemon Squeezy
- Paddle
- Dodo Payments
Coding agents
- Claude Code
- Codex
- Cursor
- Any agent with a terminal
Pricing
Start free. Pay for events, not seats.
Starter
$9/ month
or $90 a year
10k events a month · 1 site
For one product that is starting to get traffic.
- All dashboards: revenue, live, funnels, journeys
- Revenue attribution
- Agent setup, CLI and analytics.yaml
- Cookieless mode
- Data stored in the EU
Growth
Good start for teams$19/ month
or $190 a year
100k events a month · 10 sites
For a small team with a few products.
- Everything in Starter
- Up to 10 sites
- Team members
- REST API
- MCP server for your agents
Scale
$49/ month
or $490 a year
1M events a month · Unlimited sites
For busy sites and agencies.
- Everything in Growth
- Unlimited sites
- 10 times the events of Growth
14-day free trial, no card needed. Billing is not live yet, so every plan is free while twelvebit is in public beta. An event is a page view or a custom goal.
Questions
Questions people ask before they start.
What does the setup prompt do?
analytics.yaml, passes the visitor ID to your checkout and checks that events arrive. You review the diff like any other change. See every step.Do I need a coding agent?
Which payment providers work for revenue attribution?
Does twelvebit use cookies?
_tb_vid (one year) and _tb_sid (30 minutes). There are no third-party cookies. If you turn on cookieless mode, the tracker sets no cookies at all.Where is my data stored?
Is twelvebit free right now?
What counts as an event?
Can my agent read the numbers later?
Will the script slow down my site?
Paste one prompt. Watch the first events arrive.
Start free. Your agent does the setup, and you see revenue next to the traffic that brought it.
Free during public beta · no card needed