More paying customers.
Less guesswork.
See which channels bring buyers and where visitors drop off, so you can focus on what gets more people paying. Set it up with one prompt to your coding agent.
14-day free trial · cancel any time · data stays in the EU
6 people are on queststack.io right now.
Revenue is up 34% on the 30 days before. Organic Social brought 34% of revenue from only 32% of visitors.
twelvebit is privacy-friendly web analytics with revenue attribution. A 5 KB script counts visits and goals. Payments from Stripe, Polar, Lemon Squeezy, Paddle or Dodo Payments are credited to the visit before the payment, so you see revenue by channel, campaign and page. Your coding agent sets it up with one prompt, and data is processed in the EU.
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. [Pasted text +12 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 twelvebit@latest 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.
Organic Social brought 34% of revenue from only 32% of visitors.
Last-touch revenue: the visit before the payment · last 30 days · live demo
- Revenue
- $19,277
- New customers
- 557
- Average order
- $28.64
- Per visitor
- $1.28
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 step where the most people leave.
1 in 40 visitors becomes a customer. The biggest drop is between visited the site and viewed pricing: 9,702 people (64%) leave there.
- Visited the site15,100
- Viewed pricing5,398Biggest drop
- Signed up2,329
- Started checkout376
- Paid376
AI Assistants converts best. Organic Social sends the most visitors, and 2.60% of them 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 · last month · 5 blog posts with at least one customer · example answer
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 mcp add \ --transport http twelvebit \ https://twelvebit.app/api/mcp
For CI or a server without a browser, send an API key instead:
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 | 41,705 | ✓ Receiving |
| signup25% of visitors | 3,714 | ✓ Receiving |
| submit_tool11% of visitors | 1,696 | ✓ Receiving |
| checkout3.7% of visitors | 559 | ✓ Receiving |
| paymentadded for each Stripe payment | 559 | ✓ Receiving |
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
229An assistant fetched a page to answer a person's question right now.
- ChatGPT-User171
- Claude-User58
Search indexing
403A search engine added the page to its index. Here: the AI search engines of OpenAI, Perplexity and Anthropic.
- Googlebot250
- Bingbot82
- PerplexityBot71
AI training
192A crawler collected the page as training data.
- GPTBot116
- ClaudeBot54
- CCBot22
Works with
Works with the stack you already have.
Sites and frameworks
- Next.js
- React
- Astro
- Vue
- Svelte
- WordPress
- Shopify
- WooCommerce
- Webflow
- Framer
- Plain HTML
Payments
- Stripe
- Polar
- Lemon Squeezy
- Paddle
- Dodo Payments
- Shopify
- WooCommerce
Coding agents
- Claude Code
- Codex
- Cursor
- Any agent with a terminal
Pricing
Start free. Pay for events, not seats.
Lifetime 50% discount on Starter and Growth up to 100k events. Launch price maintained as long as subscription remains active. 10 places left at this price, then 40% off.
Starter
Lifetime 50% discount$4.50/ month
$9For as long as you stay subscribed. Cancel and it ends. Full price $9.
10k events a month · 1 site · 1 person
- 1 site, 1 person
- All dashboards: revenue, live, funnels, journeys
- Revenue attribution
- Agent setup, CLI, REST API and MCP server
- 3 years of data
Growth
Lifetime 50% discountFor teams$9.50/ month
$19For as long as you stay subscribed. Cancel and it ends. Full price $19.
10k events a month · 30 sites · 30 people
- Everything in Starter
- Up to 30 sites and 30 people
- Social mentions (X, Reddit, Hacker News)
- X link attribution
- 5+ years of data
Starter and Growth start with a 14-day free trial: add a card at checkout, pay nothing today, and cancel any time before day 14. The launch price is a lifetime discount for as long as you stay subscribed to the same plan; a cancel or a plan change ends it. Every plan includes the REST API, the CLI and the MCP server. An event is a page view or a custom goal. Over the limit, tracking goes on and the dashboard asks you to pick a larger plan. Prices in US dollars; Dodo Payments, our merchant of record, adds sales tax or VAT where it applies.
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 there a free trial?
What is the launch price?
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.
14-day free trial · cancel any time