Conversion Funnels Without Google Analytics: What You Can Measure

A funnel tells you how many people who started on one page reached another. Here is exactly what a cookieless two-point funnel counts, what it cannot, and how to set one up.

By Null Agency · Updated October 27, 2026 · Written for site owners who want signup and pricing conversion numbers without GA4

TL;DR: GhostMetrics has a two-point funnel, and that is all it has

A conversion funnel answers one question: of the people who started here, how many got there? GhostMetrics answers it for exactly one pair of pages. You give it an entry page and a goal page, and it reports how many sessions began on the first and also viewed the second. Anything more elaborate belongs in a different tool.

What a conversion funnel is

A funnel is a sequence of steps with a count at each one. The first count is everyone who entered, and each later count is the subset who got that far. The gap between two counts is drop-off, and the ratio of the last count to the first is the conversion rate. The shape matters more than the headline rate: a funnel that loses most visitors between the landing page and the pricing page is a different problem from one that loses them between pricing and signup.

Most real funnels have more than two steps. A shop has product, cart, checkout and payment. A SaaS has landing page, pricing, signup form and confirmation. Tools that build these usually identify the person across steps, either by a cookie or a user ID, so they can follow one visitor through all four screens and tell you where that visitor stopped.

A cookieless tool makes a different trade. GhostMetrics has no cookie, no visitor ID and nothing that persists past a day, so it cannot follow a person. What it can do is group pageviews that share a daily hash and ask a set question: of the groups that started on page A, how many also touched page B? That is a coarser instrument, and the rest of this guide is about using it for what it is good at. If you want the wider picture of which numbers to collect first, our guide to measuring website traffic covers the basics.

How the Funnel tab works

The tab has two panels. The first is Conversion Funnel: a field labelled Entry Page (pre-filled with /), an arrow, a field labelled Goal Page (placeholder /signup) and an Analyze button. The second is Top Entry → Exit Paths, a table that fills in on its own.

The conversion funnel panel

Leave the goal blank and Analyze answers "Enter a goal page". Leave the entry blank and it falls back to /. With both filled in, the dashboard requests the funnel for the period you have selected (24h, 7d, 30d or 90d) and draws three rows:

The arithmetic is plain. Entries are the distinct sessions with an entry-flagged pageview on the entry page inside the window. Conversions are the distinct sessions among those that also have a pageview on the goal page. Drop-off is entries minus conversions. The rate is conversions divided by entries, times 100, rounded to one decimal place. Two small display rules: the period is a rolling window counted back from now, not calendar days, and large counts are abbreviated in the bars (1,500 shows as 1.5K).

The entry-to-exit paths panel

This table needs no input. It lists up to 20 pairs of Entry Page and Exit Page, ranked by distinct sessions, for the selected period. A pair appears when a session has an entry-flagged pageview on one page and an exit-flagged pageview on another (or the same) page. The exit flag is set when a page's leave beacon arrives, which is the same mechanism that produces time on page; our entry and exit pages guide explains it. Read this table as a menu of candidate funnels: the top rows tell you which landing pages people start on, which is exactly the thing the Entry Page field needs.

When there is not enough data, the table says "Not enough session data yet".

What "session" means in the funnel

This is the part that decides whether you can trust a number, so it gets its own section. The word "session" appears twice in GhostMetrics, and the two meanings are not the same thing.

The entry flag comes from the browser tab. The tracker keeps a pageview counter in sessionStorage, which belongs to one tab and is cleared when the tab closes. The first pageview in a tab has a depth of 1 and is sent with the entry flag. Later pageviews in that tab, including single-page-app route changes, are never entries.

The grouping comes from a daily hash. When the server receives any beacon, it computes a short hash of a secret daily salt, the site ID, the visitor's IP address and the browser's user-agent string, and stores only the hash on the row. The salt is replaced every UTC day, and the old one expires from storage after two days. The funnel joins rows on that hash, so a "session" in the funnel is "everything this IP and browser did on this site today".

Put the two together and the funnel's rules follow directly.

SituationWhat the funnel doesWhy
Same person opens the entry page in three fresh tabs on one dayCounts one entry sessionEntries are counted as distinct hashes, and all three tabs share one
Goal page was viewed before the entry page, same dayStill counts as a conversionThe goal join compares hashes, not timestamps
Landing on the entry page on Monday, reaching the goal on TuesdayNot a conversionThe hash changes at the UTC day boundary, so the two rows cannot be joined
Visitor's IP address changes mid-visit (switching from Wi-Fi to mobile data)Possible under-countA new IP gives a new hash, so the goal row does not match the entry row
Two people on one office network with identical browsersCounted as one sessionSame IP and same user-agent string give the same hash
Entry page and goal page are the same pathReads as 100%The entry row also satisfies the goal condition

None of this makes the funnel useless. For a landing page that sends traffic to a signup page, the same-day, same-browser grouping is close to what you would call a visit, and the two error directions (shared networks merge sessions, network switches split them) are both small for most sites. It does mean the output is a ratio you compare against itself over time, not a precise count of people.

Two more details. The goal is matched against every stored pageview row for the site, so a single-page-app route change that the tracker sees (it listens for history pushes and back/forward navigation) counts as a view of the goal path just like a full page load. And the goal row has no entry requirement: any pageview on the goal path counts, whether or not it was a landing.

Setting up a signup funnel: a numbered how-to

  1. Find your landing pages first. Open the Funnel tab and read Top Entry → Exit Paths. The entry pages at the top are the ones with enough sessions to produce a stable rate. Pick one that you actually send people to: your homepage, a campaign landing page or a popular article.
  2. Write the paths as GhostMetrics stores them. The tracker records location.pathname: the path only, with no domain, no query string and no hash. So /pricing?plan=pro is stored as /pricing. Matching is an exact string comparison, so include the leading slash and match any trailing slash your site uses: /pricing and /pricing/ are different goals, and the dashboard does not normalize either.
  3. Enter the pair and press Analyze. Start with a broad pair, such as your homepage as entry and your signup page as goal.
  4. Choose the period that fits your volume. A 24h funnel on a quiet site might show a handful of entries, where a rate swings wildly on one session. Use 30d or 90d until you have a few hundred entry sessions.
  5. Substitute the goal to build a ladder. Keep the entry page and change the goal: homepage to pricing, then homepage to signup, then homepage to the thank-you page. Each run is a separate funnel from the same landing page, and the rates tell you where the biggest drop sits.
  6. Change the entry page to compare sources of traffic. If you have separate landing pages for separate campaigns, run the same goal against each and compare. There is no source filter inside the funnel itself, so campaign landing pages are your segmentation.
  7. Write the numbers down. The dashboard does not save funnels. Note the entry, the goal, the period, the entry sessions and the rate, then re-run the same funnel on the same schedule.

A caution on step 5. Each run is a new, independent question, not a step in a path. A homepage-to-pricing rate of 18% and a homepage-to-signup rate of 2% do not multiply or nest, and the signup number may include visitors who skipped pricing entirely.

A worked example with made-up numbers

These numbers are illustrative, not benchmarks. A small SaaS runs three funnels over 30d, all starting at the homepage /.

Goal pageEntry sessionsConvertedDrop-offRate
/pricing84615269418.0%
/signup846418054.8%
/welcome846298173.4%

Each row is computed the way the code does it: converted divided by 846, times 100, rounded to one decimal (152 / 846 = 17.97%, shown as 18.0%). The three rows are separate funnels with the same denominator, so you can compare them directly. Of 846 sessions that landed on the homepage, 152 viewed pricing, 41 viewed the signup page and 29 reached the welcome page, which the app shows after signup.

Three readings, none of which need a path tool. First, 29 of the 41 sessions that viewed the signup page also reached the welcome page, roughly 71%. That is a comparison of two funnels, not a measured step, so treat it as approximate. Second, 41 signup views against 152 pricing views suggests that most pricing viewers never open the form, which is where to look at the pricing page. Third, some of those 41 sessions may never have seen pricing; the funnel cannot say.

A second funnel, from a blog post that ranks in search: 640 entry sessions to the signup page and 9 converted is 1.4%, with a drop-off of 631. Set beside the homepage's 4.8%, it suggests the post attracts readers more than buyers, which is a reason to put a clearer next step in the post, not necessarily to rewrite it.

Pairing the funnel with custom events

The funnel's goal has to be a page path. That works when your conversion ends on a confirmation page, such as /welcome or /thanks. It does not work when the conversion is a click or a form submission that stays on one page, because there is no new pageview to count.

Custom events cover that case from the other side. A data-gm-event="signup-click" attribute records a click on any element, and window.ghostmetrics.track('name', { section: 'pricing' }) records one from code. They are stored in their own table, keyed by site, page path, event name, optional section and the session's UTM values. The Funnel tab never queries that table, so an event cannot be a funnel goal, and the Custom Events panel shows each event's count and when it last triggered, not who triggered it.

The practical pattern is two readings side by side:

Divide the second by the first entry count for a rough end-to-end rate, and treat it as a rough one: the event counts every click, not distinct sessions, and it is not restricted to sessions that started on the homepage. The custom events guide has the setup, and the UTM guide explains how campaign tags travel with an event within one tab session.

If your thank-you page exists, prefer it as the goal. A page view is a distinct-session count, while an event is a raw count, and distinct sessions are the cleaner numerator for a rate.

What the funnel cannot do, and where GA4 is stronger

These are the limits to know before you base decisions on the tab:

CapabilityGhostMetrics Funnel tabGA4 funnel exploration
Number of stepsTwo: entry page and goal pageMultiple steps; check current docs for the limit
Step typePage paths onlyEvents and conditions, including page views
Step order enforcedNoYes, steps are sequential, with open and closed funnel options; check current docs
Segmenting and breakdownsNone in the tab; use landing pagesSegments and breakdowns available
Follows a person across daysNo; the session hash changes dailyYes, through a client ID cookie (consent applies in the EU and UK)
Ads and ecommerce attributionNot availableA genuine strength
Setup effortType two pathsDefine events, mark conversions, build an exploration

If your business depends on a four-step checkout, on ad-spend attribution or on following the same customer across a week, GA4 is the right instrument and you should use it. Our GA4 alternative guide and Google Analytics alternatives roundup lay out the trade-offs, and the migration guide covers what to keep running while you move.

For a content site, a docs site or an early SaaS, the two-point funnel is often enough. It tells you whether a landing page is sending people to the page that matters, it does so without a cookie banner, and it takes half a minute to set up. That is the honest scope: a set-level question answered quickly, not a path reconstruction.

A landing-to-goal funnel on the free plan

Cookieless$0 forever1 site free$9.99/mo Pro

GhostMetrics gives you an entry page to goal page funnel, a table of top entry-to-exit paths, custom events for clicks that stay on one page, and the raw rows if you want to recompute anything. It sets no cookies, stores no IP addresses (they are hashed) and keeps no cross-session identifier. Install is one script tag in <head>, about 3 KB compressed on the wire. It has no multi-step funnel builder; if you need one, use GA4.

The free plan is free forever, no card: one website, unlimited pageviews, a real-time dashboard, every view and full history. Raw event export as CSV or JSON is on every plan, including free. Pro is $9.99/mo flat with unlimited websites (fair-use ceiling of 250) and a public shareable dashboard, and it starts with a 30-day free trial that needs a card and charges nothing for 30 days.

Start free, no card See the live demo

FAQ

What is a conversion funnel in web analytics?
A conversion funnel measures how many visitors who start at one point go on to reach a goal, and where the rest drop off. The simplest version has two points, a starting page and a goal page, and reports the share that made it from one to the other.
How does the GhostMetrics Funnel tab work?
You enter an entry page and a goal page. GhostMetrics counts the distinct sessions that landed on the entry page in the selected period, then counts how many of those sessions also viewed the goal page. It reports entry sessions, conversions, drop-off and a conversion rate rounded to one decimal.
Does the GhostMetrics funnel check the order of pages?
No. The query checks that a session has an entry-page landing and a goal-page pageview, but it does not compare their timestamps. Because the session identifier changes every UTC day, both must happen on the same day.
Can GhostMetrics build a multi-step funnel?
No. The Funnel tab takes one entry page and one goal page, and the entry page must be where a tab session began. You can run several funnels with different goals from the same landing page and compare the rates. For ordered multi-step funnels with segments, GA4 funnel explorations are the better tool.
Can a custom event be a funnel goal?
No. The goal must be a page path. Custom events from data-gm-event are stored separately from pageviews and the Funnel tab does not read them, so they appear in the Custom Events panel instead.

Keep reading

Entry and Exit Pages

The flags the funnel is built on

Track Custom Events

Count clicks that never load a new page

UTM Parameters Guide

Tag campaign links so landing pages tell sources apart

GhostMetrics Live Demo

The real dashboard, live data

Disclosure: GhostMetrics is built by Null Agency and we use it on this site, so we are not a neutral party about our own product. GA4's funnel features are set by Google and change over time; check the current Google Analytics documentation before relying on specifics. The numbers in the worked example are illustrative, not benchmarks.