Traffic tells you “how many came”, events tell you “how many times they clicked”. A funnel answers the question all of that was for: how many people made it all the way, and at which step the rest gave up. Ad click → pricing page → lead. Or catalog → cart → payment. No new code: you build the funnel in the CRM out of what your site already sends.
It lives in Marketing → Funnels in the CRM. Here is what's inside:
- Builder — two to eight steps, templates for common paths and a live preview on real data while you put the steps together.
- Report — how many people reached each step, the share of the start and of the previous step, the median time between steps and the biggest drop-off.
- Breakdown — by the channel, source, campaign, ad link, country and device a person entered the funnel with.
- By day — how many people started the funnel each day and how many of them made it to the end.
A funnel stores only its steps — the numbers are recalculated from page views and events every time. So a brand-new funnel shows last month right away, and fixing a step recalculates the whole history.
What a step is made of
A step comes in four kinds, and each one runs on data your site already sends:
| Step | What counts | Where the data comes from |
|---|---|---|
| Site visit | The start of a visit. Narrow it down by channel, source (utm_source), campaign (utm_campaign) and ad link. | Page views the widget counts on its own |
| Page | A page view by path: /pricing is exactly that page, with or without a trailing slash; /blog/* is everything that starts with /blog/. | The same page views, SPA navigation included |
| Event | Your event, by name. You can add a condition on one parameter: plan = pro. | crmTrack or server events |
| Lead | A lead form submission, for example the built-in lead_submit. | Lead forms |
A few details that are easy to trip over:
- Path only — no domain, no query string.
/pricing, nothttps://shop.com/pricing?plan=pro: tags and parameters in the URL don't affect the match. The asterisk works anywhere in the path. - Tags are compared as is, case included.
googleandGoogleare two different sources. The field suggests values from your site's traffic, so picking from the list is the safer bet. - Parameters are compared as text. The number
3and the booleantruematch the values3andtruetyped in the CRM. - Bots never get into a funnel — same as in the traffic reports.
How it's counted
The first step — within the selected period
Anyone who completes the first step within the report dates has started the funnel. Each person enters it once — with their first match in the period.Every next step — after the previous one
The first match after the previous step counts. In between, a person can do whatever they like: read the blog, go back to the homepage, leave and come back tomorrow. It's not a click-by-click path, it's a sequence of goals.And within the conversion window
Every step after the first has to fit into the window — more on that below.
People or visits
That's the “Count” switch in the builder.
- People — by the visitor id
crm_vid. The path can stretch over several visits: looked today, bought tomorrow. Good for purchases and leads. - Visits — by the session id
crm_sid. All steps must happen within one visit, and every visit is a separate attempt. Good for short flows: sign-up, checkout.
What these ids are and how long they live is covered in Visitor and session ids.
Conversion window
The window is how much time the remaining steps get after the first one. Too late — and the report stops the person at the last step they reached in time.
Example — a “Visit → Cart → Payment” funnel with a 7-day window:
- came on October 1, added to cart on the 3rd, paid on the 6th — made it all the way;
- came on October 1, paid on the 10th, nine days later — as far as the funnel is concerned, they stopped at the cart.
The report period and the window are two different things. The period decides who is counted: people who started the funnel within those dates. The window decides how long we wait for the remaining steps. That's why steps after the end of the period still count if they fit into the window: someone who started on the last day of the period can still buy next week.
The window is picked from a list: 30 minutes to 30 days. Match it to how long people think it over: sign-up — 30 minutes or an hour, a lead from the pricing page — a day, buying a laptop — a week or two. A wider window means higher conversion on the later steps; the first step never depends on the window.
Reading the report
- Bars — how many people reached each step, as a share of the start. The hatched part above a bar is the people who dropped off after the previous step.
- The badge between bars — conversion from the previous step and the median time between the two. The biggest drop-off is highlighted in red.
- The summary on top — “Funnel conversion” for the whole path, how many “Started”, the “Biggest drop-off” and the “Longest hesitation”: the step where people think the longest.
- “Where they came from” — the same funnel split by channels, sources, campaigns, ad links, countries and devices. The attributes come from the first step: what the person entered the funnel with. If the first step is an event, there's no device breakdown — events don't carry one.
- “By day” — the day the person started the funnel, not the day they finished it. Otherwise a purchase made a week later would land on a day when nobody started anything.
Days are cut in your site's time zone, like in every marketing report. The median rather than the average — because one person who came back three weeks later shouldn't turn “usually five minutes” into “two days on average”.
Example: a shop funnel from code to report
Say you want a “Visit → Product → Cart → Checkout → Payment” funnel. Page views are already counted, and products live at /catalog/…. Three events are missing:
// The "Add to cart" button
window.crmTrack?.('add_to_cart', { sku: 'air3-graphite', price: 149 });
// The visitor opened checkout
window.crmTrack?.('checkout_started', { items: 2 });Payment is safer to send from the server — no ad blocker can eat it. Just don't forget to pass visitor_id and session_id from the browser: without them the server has no idea whose purchase it is, and it won't make it into the funnel. How to do that is explained in Link server events to the visitor.
{
"name": "purchase",
"event_id": "A-1024",
"value": 29800,
"currency": "EUR",
"visitor_id": "<crm_vid from the browser>",
"session_id": "<crm_sid from the browser>"
}Then, in the CRM:
Declare the events
add_to_cart,checkout_startedandpurchase— in Marketing → Events, as usual. Undeclared events are not accepted, so they won't get into a funnel either.Open Marketing → Funnels → “New funnel”
Pick the “Purchase” template — it already has similar steps. Or start from scratch.Put the steps together
Site visit → Page/catalog/*→ Eventadd_to_cart→ Eventcheckout_started→ Eventpurchase. Window — 7 days, counting people.Check the preview and save
The panel on the right shows right away how many people passed each step in the selected period. A step stuck at zero is your cue to check the event name or the path while you're still in the builder.
Limits and access
| What | Limit |
|---|---|
| Steps per funnel | 2 to 8 |
| Funnels per site | 50 |
| Conversion window | 30 minutes to 30 days |
| Report period | up to 400 days |
| Rows in “Where they came from” | the top 8 |
Funnels come with the Pro plan, along with the rest of marketing. Access works the same as for events: a manager with view rights on “Marketing · Events” sees the reports, and with edit rights they can also create, change and delete funnels. Every change is written to the audit log.
Troubleshooting
A step shows zero
- The event name differs.
addToCartin code andadd_to_cartin the funnel are two different events. The builder highlights a name that isn't among the site's declared events. - A server event without ids. Without
visitor_id(and, when counting visits, withoutsession_id) the event can't be tied to a person, so the funnel doesn't see it. It still shows up in Events, though. - A path with a domain or without the slash. You need
/pricing— notpricingand not the full URL. - The steps are in a different order. If people on your site check out first and look at the product later, a “product → order” funnel will be empty. Check the order against a real path.
- The window is too narrow. An hour to buy something expensive isn't much. Widen the window and compare.
- Counting visits, but the steps are spread across visits. If someone added to cart yesterday and paid today, in “Visits” mode they never reach payment. Switch to “People”.
The numbers don't match Events
That's expected. Events counts every firing and every unique visitor. A funnel counts only those who passed the previous steps first, in the right order and within the window. Someone who paid without visiting the site in the selected period shows up in Events but not in the funnel.
Less data than in the payment system
A funnel sees only what reached the CRM: ad blockers and consent mode without the visitor's consent take away some of the page views and events. For money, send events from the server — with the ids from the browser.