funnel analytics
for software teams

Pricing page, signup, onboarding, paid. The funnel is drawn the moment you log in. See where visitors come from, how far each one gets, and how many start paying.

See the live demo
Live in 2 minutes One script tag No cookies 7 days free, no card
tiny-funnel.com/contextlink.io

the funnel a software business actually has

Search for anything about conversion funnels and you land in a shop. The worked example is always somebody else's, and the advice under it assumes a kind of buying decision you do not sell.

Your funnel
  1. 1 Somebody arrives on the marketing site, from a search, a newsletter or a link somebody posted
  2. 2 They read /pricing
  3. 3 They sign up at /signup, which is very often a different domain
  4. 4 They reach /welcome, and do or do not do the first thing the product needs from them
  5. 5 Days later a card goes on, and your backend hears about it before their browser does
  6. 💳 Trial converted
What each gap is really asking

Pricing page to signup form

A pricing or positioning question. Usually the cheapest one to fix, and the one nobody measures.

Signup to the first real action

An onboarding question. The drop here is the one that looks like churn a month later.

Onboarding to the card

A product question, and it takes a week to show up, so it needs a funnel that remembers who somebody was.

Point Tiny Funnel at that path and it opens on that path. Bars top to bottom, drop-off between each pair of steps, on load, with nothing to assemble first.

the three things that break a software funnel

None of them are about the chart. They are about whether the person at step four is the same person as at step one.

Your funnel crosses two domains

The marketing site is on one name and the app is on another, and that is where journeys break. Tiny Funnel is cookie-less, so each browser carries a random first-party id in local storage, and local storage names a browser on one domain. Three mechanisms stitch the journey back, and none of them is a cookie.

  • Links between the funnel's own domains are decorated automatically, carrying the visitor id across
  • tf.identify writes your own user id onto the visitor, so a laptop and a phone become one journey
  • Server events match on that id first, then the visitor token, then IP
How one visitor's journey stays in one piece

The step that decides it finishes on your server

Trial to paid is the number you care about, and the browser is usually not there when it happens. A subscription webhook fires, or an invoice is paid on a schedule, somewhere the visitor never sees. Post it from your backend and it attaches to the visitor who caused it, so the last bar is the payment rather than a proxy for it.

  • One authenticated POST to /api/v1/events, from code you have already written
  • A server event can never be a funnel's first sight of somebody
  • Anything unmatched is recorded and read back on the Install panel for 30 days
The server-events API

The answer is never the average

"What is our conversion rate" is almost never the useful question. "Do visitors from this place behave differently from visitors from that one" is. Filter by date range, referrer domain, UTM source, entry page, country and how far down somebody got, and the bars, the chart and the visitor list all redraw for exactly those people.

  • Every filter option carries its own visitor count and how many converted, before you pick it
  • Open one person's journey and read the whole path, return visits included
Read a drop-off properly

a step is whatever describes your app

Not just a URL, which matters more in software than anywhere else, because half of a modern app is one URL.

A step can be For a software funnel
A page view Somebody reaches /pricing
A click Somebody clicks "start free trial" and heads off to the app
A page state Count /welcome only when .plan-status contains the word "subscribed"
A server event Your backend posts subscription.created when the card goes on

vs the big guys

You wanted a funnel. They gave you homework.

Traditional analytics platforms
  1. 1 Log in
  2. 2 Find your user account
  3. 3 Find the right screen in the admin
  4. 4 Scroll down to find the part of the analytics you're after
  5. 5 Figure out how to see the metric you're after
  6. 6 Figure out how to segment it down to the customers you care about
  7. 🥱 Try to remember why you wanted this data anyway
Tiny Funnel
  1. 1 Log in
  2. 2 See the funnel straight away, with the customer flow front and centre
  3. 3 Narrow it down with a time range or a filter, like “referred from” or “entry page”
  4. 💡 Question answered. Go and make informed decisions to grow your business

Friday email: what's working and where to lean in

One email per funnel you're tracking. Where your visitors came from, which of those places actually produced customers, and what moved since last week.

  • Top places visitors came from, and how many of them bought
  • Search and AI answers counted as separate channels
  • What grew since last week, ranked by how much it moved
tiny funnel
Visitors
1,239
+3.3%
Conversions
22
-31%
Rate
1.8%
-0.89 pts
Top places conversions come from
producthunt.com social 7 +75%
google.com search 6 -14%
chatgpt.com ai 4 +100%
Direct 2 -33%
Top AI entry pages by conversions
/pricing 3 +50%
/blog/funnel-benchmarks 2 new

Set up in 3 tiny steps

From zero to recording in about two minutes.

1

Copy and paste one script tag

Drop a single line into your site's script section or <head>. Install done.

Cookie-less and first-party • no cross-site tracking, no data sold on.
<script async src="https://tiny-funnel.com/tf.js" data-funnel-id="tf_a1b2c3d4e5"></script>
2

Click through your screens

Open your own site and click the pages of your flow. Each click records a funnel step, with no event code to write.

Need more than a URL match? Add a condition, like "count Subscribed only when .plan-status says subscribed".

1/pricing
2/signup
3onboarding step 1
+click next screen…
3

Watch visitors flow through

Watch where visitors come from, how far they get, and whether they buy. Page views and clicks are both recorded, with no event code to write.

12,480
3,420
984 paid ✦

is this your funnel

Both are real questions. They are not the same question.

Look elsewhere if
  • You need retention curves, feature flags or experiments
  • Session replay is how your team wants to debug a drop-off
  • You want a SQL layer, or a warehouse export you query yourself
  • The number you need is site-wide traffic, not one path through the site
  • Somebody here already owns an event taxonomy and gets answers out of it
Tiny Funnel is for you if
  • Your funnel is pricing page, signup, onboarding, first payment
  • The marketing site and the app sit on two different domains
  • The step that decides the business finishes on your server
  • Nobody here is going to build a report to answer the question
  • You want the funnel drawn on load, not after a taxonomy exercise

frequently asked questions

Does this replace Google Analytics?

For the funnel question, yes, and in fewer moves. For site-wide traffic and ad attribution, no, and running both is a normal answer. The two scripts do not interfere and nothing here cares what else is on the page.

Our marketing site and our app are on different domains. Will it work?

Yes. Put the same script tag on both and add both to the funnel's allowed domains, which you edit from the Install panel. Links between the funnel's own domains are decorated automatically, so a visitor arrives at the second one as the same visitor rather than as a new one with no referrer.

Can it count a trial-to-paid upgrade that happens in a webhook?

Yes. Post it from your webhook handler as a named server event and it attaches to the visitor who caused it, so the last bar in the funnel is the payment rather than a page you happened to catch somebody on. One condition travels with that: the script tag has to have seen that visitor already. A server event cannot be a funnel's first sight of somebody, and anything unmatched is recorded and shown to you on the Install panel for 30 days.

How long does setup actually take before I see a first number?

About two minutes for the common case. Paste one script tag, then open your own site in setup mode and click through your flow, and each click records a step. There is no SDK, no npm package, no build step and no event code to write, so there is nothing to agree with anybody before you get an answer.

How do I count a step in a single-page app where the URL never changes?

Put a condition on the step. A step can require that an element matches a CSS selector or contains a given word, so an onboarding screen that never changes its path is still countable. It is a setting on the step, not a code change and not a deploy.

Do we need a cookie banner?

Not something anybody can answer for you, because it depends on your jurisdiction and on everything else running on your site. What we can tell you is exactly what the script does. No cookies, first-party only, no fingerprinting, no cross-site tracking, nothing shared with ad networks, typed values never captured, and a random visitor id in local storage with roughly a six-month idle lifetime. Take that to whoever advises you.

What happens to the bill when a campaign works?

Nothing. It is $10 a month per active funnel, with no seats and no event tiers, so traffic never moves the price. Pause a funnel and billing stops while the history stays. The trial is seven days with no card, and one funnel until a card is added.

Tiny price • Pay per funnel

No tiers. No "contact sales." Just $10 a funnel.

7 day free trial
$10 /mo
Charged per site/funnel
✓ Unlimited visitors tracked
✓ Full visitor-by-visitor journeys
✓ First-party, no cookie banner
✓ Invite up to 5 team members for free
✓ Pause a funnel and it stops billing
✦ Live in 2 minutes, cancel anytime
No card needed. No annual lock-in.