Updated October 24, 2026: on a paid plan, an event can now also carry the properties you declare in the dashboard, each a value from your own list or a number kept as a band. An event with no declared property holds the five fields described here, and the API still refuses unknown fields.
Conversion is a property of a session, not a person. A retail funnel (search, browse, add-to-cart, checkout) happens in a single shopping intent. You can measure it cleanly without a persistent customer ID. This guide gives you the event taxonomy, the funnel definitions, and the segments that actually matter for a shopping app.
Why Session-Based Works for Retail
A shopping intent fits inside a session. People open a retail app to search for something, decide whether to buy it, and either complete or abandon. The whole arc is usually minutes, well under the typical session window.
That means session-based analytics captures the funnel naturally. You do not need persistent customer tracking to know what happens between search and checkout. You just need the events of one session, in order.
The shift in mental model
Old analytics: "What is this customer's lifetime conversion rate?" Session analytics: "What fraction of shopping sessions convert this week?" The second answer is faster, simpler, and the one product teams actually act on.
The Retail Event Taxonomy
Use snake_case with object_action (see Event Naming Best Practices) and namespace prefixes for the funnel stage:
| Stage | Events |
|---|---|
| Acquisition | app_opened, push_notification_opened |
| Discovery | search_performed, category_viewed, product_viewed |
| Cart | cart_item_added, cart_item_removed, cart_viewed |
| Checkout | checkout_started, checkout_address_entered, checkout_payment_entered, checkout_completed |
| Failure | order_failed, payment_declined |
| Engagement | review_submitted, wishlist_item_added, promo_applied |
Do not embed values in event names. cart_added_blue_widget creates a unique event per SKU and breaks every funnel chart. Keep the name fixed; if you need product-level analysis, look at it in your transactional system.
Three Funnels Every Shopping App Needs
1. The browse-to-buy funnel
app_opened → product_viewed → cart_item_added → checkout_completed
The headline conversion funnel. Watch the drop-off at cart_item_added → checkout_completed closely.
2. The search-driven funnel
search_performed → product_viewed → cart_item_added
If search_performed rarely leads to product_viewed, search is broken. Fix that before optimizing checkout.
3. The checkout micro-funnel
checkout_started → checkout_address_entered → checkout_payment_entered → checkout_completed
Per-step drop-off pinpoints which checkout screen is killing conversions. Address screens lose buyers more often than payment screens, but you only know which by measuring.
Useful Segments Without User IDs
Session attributes give you most of what you need:
- •Platform: iOS vs Android, sometimes Web. Conversion rate frequently diverges.
- •Country: Local payment methods, shipping latency, and translation quality vary by country.
- •Hour of day: Push timing, promo timing, restock windows.
- •Session depth: High-engagement sessions (10+ events) buy at very different rates than skimmers.
Measuring Cart Abandonment
The classic metric: of the shoppers who added something to a cart, how many failed to complete checkout? In session terms:
session_abandonment_rate =
1 − (sessions_with(checkout_completed) / sessions_with(cart_item_added))
This is not the same metric as per-customer abandonment. Instead of "this person abandoned twice last week," it tells you "of every 100 shopping intents, X never reached purchase." For day-to-day product decisions that is usually the better signal.
Payments, Refunds, and Failure Modes
Treat your payment provider as the source of truth for money. Analytics tracks intent and outcome, not amounts:
- •
payment_declined: Card was declined. Compare rate by country to spot acquirer issues. - •
order_failed: Backend rejection (out of stock, address invalid). Use to find merchandising bugs. - •
refund_requested: A customer support hop, not the refund itself. Reconcile with billing.
Never put dollar amounts in event names or properties. Order totals belong in your transactional database.
KPIs Without PII
A starter scorecard for a retail product manager:
| KPI | Definition |
|---|---|
| Session conversion rate | sessions with checkout_completed / sessions with app_opened |
| Cart-to-purchase rate | checkout_completed / cart_item_added (session-level) |
| Search success rate | search_performed sessions that reach product_viewed |
| Checkout completion rate | checkout_completed / checkout_started |
| Avg events per buying session | avg event count for sessions with checkout_completed |
Why retail teams choose Respectlytics
The strict 5-field schema means you cannot accidentally write customer_email, order_total, or credit_card_last4 into an event. The API rejects them at the edge, or drops them when they arrive as undeclared properties.
For shopping apps that move money, that constraint is the feature. The PCI-relevant data stays in your payment processor, and your analytics pipeline cannot become an unintended PII leak.
Frequently Asked Questions
Can you track e-commerce conversions without customer IDs?
Yes. Conversion is a property of a session. If a session contains app_open → checkout_completed, that session converted. No persistent customer ID needed.
What events should a retail app track?
app_opened, search_performed, category_viewed, product_viewed, cart_item_added, cart_viewed, checkout_started, checkout_payment_entered, checkout_completed, order_failed.
How do you measure cart abandonment without a user ID?
Compare sessions that fired cart_item_added to those that fired checkout_completed. The ratio is your session-level abandonment rate.
Does Respectlytics work for retail apps with high traffic?
Yes. The five-field schema is small enough to scale and the API rejects unknown fields and drops undeclared properties, so you cannot accidentally write order amounts or emails to events.
Can I segment by repeat shopper without a customer ID?
Not directly. You can segment by session depth, hour, platform, country. Logged-in cohort analysis belongs in your transactional database, not the analytics pipeline.
Legal Disclaimer: This information is provided for educational purposes and does not constitute legal advice. Consult your legal team to determine the requirements that apply to your specific situation.