Setting Up Sales Funnels in Site Analytics
Sales funnel is the sequence of steps a user goes through from first visit to purchase. Funnel analysis shows which step loses the most visitors — this is the optimization point for conversion.
Funnels in GA4
GA4 supports two funnel types:
- Closed funnel — user must go through steps sequentially
- Open funnel — can enter at any step
Setup in GA4:
Reports → Explorations → Funnel Exploration → New Exploration
Funnel steps are defined via events or URL conditions:
| Step | Event/URL |
|---|---|
| 1. Catalog | page_view + page_location contains /catalog |
| 2. Product | event: view_item |
| 3. Cart | event: add_to_cart |
| 4. Checkout | event: begin_checkout |
| 5. Payment | event: add_payment_info |
| 6. Purchase | event: purchase |
Funnel Metrics
Conversion at each step (to previous):
Catalog → Product: 40–60% (normal for e-commerce)
Product → Cart: 5–15%
Cart → Checkout: 30–50%
Checkout → Payment: 60–80%
Payment → Purchase: 85–95%
Total site conversion: product of all steps. With typical values — 0.5–2%.
Funnels in Yandex.Metrica
Metrica → Segments → Funnels:
Step 1: URL contains /catalog
Step 2: URL contains /product
Step 3: Goal "add_to_cart"
Step 4: Goal "order_placed"
Metrica shows data faster (within hour), GA4 — with up to 24-hour delay.
Funnel Segmentation
One funnel for everyone is too crude. Useful slices:
- By traffic source (organic vs paid)
- By device (mobile vs desktop)
- By city
- By user type (new vs returning)
Mobile users typically convert worse at payment step — UX optimization point.
Cohort Analysis
Users from different periods convert differently. GA4 Cohort Exploration tracks retention and conversion by first visit date.
Custom Funnel in DB
For accurate data without blockers — own event analytics:
-- Create funnel from events
SELECT
COUNT(DISTINCT user_id) FILTER (WHERE step = 'viewed_catalog') as step1,
COUNT(DISTINCT user_id) FILTER (WHERE step = 'viewed_product') as step2,
COUNT(DISTINCT user_id) FILTER (WHERE step = 'added_to_cart') as step3,
COUNT(DISTINCT user_id) FILTER (WHERE step = 'started_checkout') as step4,
COUNT(DISTINCT user_id) FILTER (WHERE step = 'purchased') as step5
FROM user_events
WHERE created_at >= CURRENT_DATE - INTERVAL '30 days';
Setup time: 2–3 days for funnels in GA4 and Metrica with segmentation.







