Marketing attribution
See which channels and campaigns drive revenue in Marketing attribution.
Analytics is where you measure your store. It opens on an Overview dashboard, fans out into purpose-built dashboards for every part of the business, and lets you build, save, schedule, and export your own reports. High-volume standard metrics are served from pre-aggregated rollups so they stay fast on large stores. Reports whose math is not safely composable—such as exact Web Vital percentiles, five-minute live visitors, and signed customer/event ledgers—use bounded, indexed fact views at their documented grain instead of pretending a daily aggregate can answer them.
Find it under Analytics in the store sidebar.
The Overview is the first screen you see. At the top it shows today’s headline KPIs — sessions, orders, and sales — alongside a conversion summary (add-to-cart rate, checkout-start rate, and conversion rate) and a finance summary (revenue, COGS, gross profit, an operational contribution estimate, payment fees, and outstanding liabilities such as gift-card and store-credit balances).
Below the KPIs you get sales-over-time, visits-over-time, and conversion-over-time charts, plus ranked “top” lists:
A date-range picker drives the whole page. Pick a preset (Today, Yesterday, Last 7 / 30 / 90 days, This/Last month, This/Last quarter, This/Last year) or a Custom range. Turn on a comparison to overlay the previous period or the previous year — every KPI then shows its percentage change against the comparison window.
Beyond Overview, Analytics ships a library of ready-made reports, grouped by area under Analytics → Reports. Each one is a curated view over the same semantic catalog. Most use composable daily rollups; reports that need exact entity, event, live-window, percentile, or customer-ledger grain use dedicated sources:
Sales — orders, units sold, gross/net/total sales, discounts, refunds, taxes, shipping, and average order value.
Products — views, add-to-cart rate, and conversion per product and variant; your best and worst performers.
Customers — new vs returning, repeat rate, and customer geography. Includes RFM (recency/frequency/monetary segmentation), lifetime value (LTV), and cohort/retention report families. See Customers & segments.
Cart & checkout — the funnel from cart to an order being placed: active carts, abandoned carts and their value, recovered carts, and step-by-step checkout drop-off. Paid-order and payment-failure fields remain separate payment measures.
Traffic — sessions, visitors, page views, bounce rate, and breakdowns by referrer, UTM source / medium / campaign, and landing page.
Finance — revenue, cost of goods, gross profit, operational contribution estimate, payment fees, and liabilities.
Fulfillment — fulfillment throughput and timing across your orders.
Inventory — stock movement and inventory-related reporting, including month-end inventory and ABC analysis families.
Search — what shoppers searched for and, importantly, zero-result terms so you can fix gaps in your catalog.
POS — in-person sales reporting for stores selling through point of sale.
Performance — page-speed and Web-Vitals reporting for your storefront.
Marketing — consent-qualified, model-aware channel attribution: which sources and campaigns drove sessions and event-net attributed total sales. It defaults to Last non-direct click and is not a relabeling of the operational Traffic report. See Marketing attribution.
Live — the real-time map (see below).
The customer lifecycle family counts only stable identified customers. It supports new customers over time, the non-time new-vs-returning donut, the new-vs-returning area series, returning-customer rate, customer acquisition by latest shipping location, and event-net first-time/returning sales. Guest orders and POS walk-in holder rows stay in ordinary sales but never become customers. The one-time and returning-customer detail lists use each customer’s complete eligible order history. They include current name/email, first and last order dates, order count, event-net amount spent, average amount per order, and the immutable accepted-marketing value from the most recent order. The checkout choice is persisted before a hosted-payment redirect, so webhook-created orders retain the same evidence as synchronous orders. These presets are executable but remain unreconciled against a paired Shopify export.
There is also a Health view that surfaces data freshness and the status of the background workers that build your rollups — useful when a number looks off.
Catalog visibility is not the same as parity evidence. A report may be defined, executable, or captured-reconciled. Unsupported fields are rejected instead of being silently ignored, and reports that depend on an unavailable primitive remain unavailable or explicitly approximate. See Reconciliation status.
As of 2026-07-13T16:45:00+05:30, the server-owned manifest records the current observed catalog, runnable presets, disabled reasons, and external evidence state:
Captured-reconciled reports: none.
Controlled internal fixtures count as captured evidence: no.
| Status | Catalog entries |
|---|---|
| Executable Unreconciled | 101 |
| Needs Attribution Reconciliation | 15 |
| Partial Sales Components | 11 |
| Partial Gateway Scope | 6 |
| Partial Reversal Types | 6 |
| Requires Subscriptions | 5 |
| Needs Funnel Reconciliation | 4 |
| Requires Shop Channel | 4 |
| Partial Taxonomy | 3 |
| Unresolved Catalog Entry | 3 |
| Needs Close Reconciliation | 2 |
| Not Applicable Shopify Protect | 2 |
| Partial Acceptance Denominator | 2 |
| Partial Return Components | 2 |
| Partial Row Fields | 2 |
| Partial Shop Taxonomy | 2 |
| Requires Agentic Commerce | 2 |
| Requires Risk Provider | 2 |
| Requires Shop Pay | 2 |
| Missing Fields Or Preset | 1 |
| Partial Finance Components | 1 |
| Partial Low Engagement Threshold | 1 |
| Partial Semantics | 1 |
| Partial Sku Identity | 1 |
| Partial Tracking Presence | 1 |
| Proprietary Approximation | 1 |
| Requires Autopilot Marketing | 1 |
| Requires Historical Fx | 1 |
| Requires Managed Markets | 1 |
| Requires Markets | 1 |
| Reason | Reports |
|---|---|
| Requires Subscriptions | 5 |
| Requires Shop Channel | 4 |
| Not Applicable Shopify Protect | 2 |
| Requires Agentic Commerce | 2 |
| Requires Shop Pay | 2 |
| Missing Fields Or Preset | 1 |
| Requires Autopilot Marketing | 1 |
| Requires Historical Fx | 1 |
| Requires Managed Markets | 1 |
| Requires Markets | 1 |
| Report | Category | Status | Reason |
|---|---|---|---|
shop_campaign_roasShop Campaign ROAS | Behavior | Requires Shop Channel | This report requires Shopify Shop-channel impression, campaign, order, and attribution primitives. Market does not relabel online-store traffic or orders as Shop activity. |
managed_markets_taxesManaged Markets taxes | Finances | Requires Managed Markets | This report requires Managed Markets tax, duty, filing, and fee primitives. Market's ordinary tax ledger must not be presented as Shopify Managed Markets activity. |
shop_pay_paymentsShop Pay payments | Finances | Requires Shop Pay | This report requires Shop Pay's immutable checkout/payment classification. A generic gateway or wallet label is not a defensible Shop Pay substitute. |
shop_pay_transactionsShop Pay transactions | Finances | Requires Shop Pay | This report requires Shop Pay's immutable checkout/payment classification. A generic gateway or wallet label is not a defensible Shop Pay substitute. |
shop_channel_ordersShop channel orders | Finances | Requires Shop Channel | This report requires Shopify Shop-channel impression, campaign, order, and attribution primitives. Market does not relabel online-store traffic or orders as Shop activity. |
shop_payments_by_typeShop payments by type | Finances | Requires Shop Channel | This report requires Shopify Shop-channel impression, campaign, order, and attribution primitives. Market does not relabel online-store traffic or orders as Shop activity. |
orders_covered_by_shopify_protectOrders covered by Shopify Protect | Fraud | Not Applicable Shopify Protect | Shopify Protect is a Shopify product primitive and is not represented as a Market metric. |
orders_protected_by_shopify_protectOrders protected by Shopify Protect | Fraud | Not Applicable Shopify Protect | Shopify Protect is a Shopify product primitive and is not represented as a Market metric. |
performance_by_autopilot_marketing_activitiesPerformance by Autopilot Marketing Activities | Marketing | Requires Autopilot Marketing | This report requires Shopify Autopilot marketing-activity identity and spend/performance facts. Market has no equivalent source and does not infer it from campaigns with similar names. |
shop_channel_product_impressionsShop channel product impressions | Marketing | Requires Shop Channel | This report requires Shopify Shop-channel impression, campaign, order, and attribution primitives. Market does not relabel online-store traffic or orders as Shop activity. |
active_subscriptions_over_timeActive subscriptions over time | Sales | Requires Subscriptions | This report requires a subscription contract, recurring-order lineage, interval, activation, cancellation, and one-time-versus-subscription sale snapshots. Ordinary repeat orders are not subscriptions. |
agentic_total_sales_by_channelAgentic total sales by referring channel | Sales | Requires Agentic Commerce | This report requires an authoritative agentic-commerce referring channel and order classification. Market does not guess agentic sales from user agents, referrers, or free-form source labels. |
agentic_total_sales_over_timeAgentic total sales over time | Sales | Requires Agentic Commerce | This report requires an authoritative agentic-commerce referring channel and order classification. Market does not guess agentic sales from user agents, referrers, or free-form source labels. |
average_profit_margin_by_marketAverage profit margin by market | Sales | Requires Markets | This report requires an immutable sale-time market identity and market-specific pricing/currency semantics. Shipping country or transaction currency is not substituted for a configured Market. |
canceled_subscriptions_over_timeCanceled subscriptions over time | Sales | Requires Subscriptions | This report requires a subscription contract, recurring-order lineage, interval, activation, cancellation, and one-time-versus-subscription sale snapshots. Ordinary repeat orders are not subscriptions. |
new_subscriptions_over_timeNew subscriptions over time | Sales | Requires Subscriptions | This report requires a subscription contract, recurring-order lineage, interval, activation, cancellation, and one-time-versus-subscription sale snapshots. Ordinary repeat orders are not subscriptions. |
sales_by_discount_codesSales by discount codes | Sales | Missing Fields Or Preset | Unavailable for strict parity: combinable discounts can affect the same line, but current refund and order-adjustment facts retain only a combined discount reversal, not an immutable per-reversal/per-discount-application allocation. Market also lacks a canonical sale-time taxonomy that distinguishes percentage, fixed, free-shipping, buy-X-get-Y, and app discounts. Proportional allocation or taxonomy guessing would fabricate results. |
subscription_vs_one_time_salesSubscription vs one-time sales | Sales | Requires Subscriptions | This report requires a subscription contract, recurring-order lineage, interval, activation, cancellation, and one-time-versus-subscription sale snapshots. Ordinary repeat orders are not subscriptions. |
subscriptions_sales_over_timeSubscriptions sales over time | Sales | Requires Subscriptions | This report requires a subscription contract, recurring-order lineage, interval, activation, cancellation, and one-time-versus-subscription sale snapshots. Ordinary repeat orders are not subscriptions. |
total_sales_by_currencyTotal sales by currency | Sales | Requires Historical Fx | Shopify groups rows by checkout currency but converts Total sales to the store currency. Market can expose native-currency rows, but cannot reproduce Shopify's value without historical order-time FX rates. |
The captured-reconciled number is intentionally narrow. It increases only when the same scenario has both a genuine captured Shopify export and a captured production Sellerlane report export, and the provenance-checked comparison passes. A captured Shopify export compared with an internal controlled generator can validate fields and filters, but it does not prove the production report’s numbers. Sellerlane’s internal fixtures test financial semantics; they do not count as production parity evidence. An enabled report is runnable; it is not automatically an exact Shopify match.
The conversion funnel is tracked as discrete stages so you can see exactly where shoppers fall away:
Session → product view → add to cart → checkout started → contact → address → shipping → payment info → purchase.
The Cart & checkout dashboard shows the count at each step and the drop-off between steps, plus headline figures for abandoned carts, abandoned cart value, recovered carts, and the checkout completion rate. Tie this back to abandonment recovery in Automations.
When the built-in dashboards don’t slice the data the way you need, build your own report. Reports draw metrics and dimensions from a server-side catalog (an allowlist) — you never write SQL.
Go to Analytics → Reports and choose New exploration (or start from a ready-made template and edit it).
In Freeform, pick a metric first. The metric’s physical source and financial definition determine the compatible report family. Dimensions, visualization, and filters remain visible but disabled until that first metric resolves the source; incompatible fields are never silently joined.
Choose additional metrics and dimensions from the compatible catalog. Each metric carries its own allowed aggregations (sum, count, distinct count, average, min, max, median, percentile, rate).
Add filters. Each filter is a catalog field plus an operator —
EQ, NEQ, IN, NOT_IN, CONTAINS, STARTS_WITH, ENDS_WITH, GT,
GTE, LT, LTE, BETWEEN, IS_NULL, or NOT_NULL.
Set the granularity — day, week, month, quarter, or year. Selected store-metrics families also support hour for ranges of at most seven days. Minute is a Live View clock and is not available in report explorations.
Choose a comparison — none, previous period, or previous year.
Pick a visualization — KPI, table, line, bar, stacked bar, area, pie, funnel, or heatmap. Geographic maps are a dedicated Live View/location surface, not a freeform report visualization. Area means a stacked area: each band retains its category and the height is the combined value. Area and stacked-bar views therefore require metrics with one physical unit; money, counts, percentages, and durations are never added together.
Save the report with a name.
Switch the Exploration method tab to Cohorts for repeat-customer analysis. That workspace exposes its contract explicitly as Metric → Cohort definition → Visualization → Interval → Filters. Cohort membership is fixed to the first eligible merchandise order; unavailable cohort filters are disabled rather than accepted and ignored. Every result remains at exact cohort date × period × interval grain: omitted interval filters default to monthly, and removing either cell dimension is rejected because summing retention cells would count the same customer in more than one period. Headline totals, comparisons, and time series are intentionally omitted for the same reason. Revenue mode means signed net merchandise sales, not cash receipts or order total sales; a period can be negative after processed reversals.
Saved explorations appear in Analytics → Reports, where you can re-open, edit, Save copy, or delete them and pin favourites. You can also assemble your own dashboard: under Analytics → Dashboard, add report cards, reorder them, and update or remove cards so the layout matches how you actually work.
The Reports lifecycle table follows the captured Shopify structure: Name, Category, Last viewed, Created by, and Pinned. Search, Category and Created by filters, stable sorting, and pin/unpin are server-backed lifecycle controls. Never-viewed reports display an em dash and sort after dated rows in either last-viewed direction.
The Overview supports manual refresh, one-minute auto-refresh, full screen, customization, date/comparison controls, and displays the immutable reporting currency. Card definition controls expose the server-owned metric meaning. Currency switching is intentionally unavailable until historical order-time FX exists; showing a selectable currency that relabels native amounts would be a financial error.
Use Analytics → Customize overview → Add dashboard target to set a durable threshold for an enabled canonical report metric. Choose At least for a floor such as sales or orders, or At most for a ceiling such as a defect or refund rate. The target appears on Overview with its current value, threshold, attainment ratio, fixed period, and whether the threshold is met.
Target periods are snapshots, not rolling labels. For example, This month created during August resolves to the complete August 1–31 civil period in the store reporting timezone. Those dates and that timezone remain fixed even if the store timezone later changes. A custom period uses the inclusive start and end dates you enter.
The metric decides the target’s unit:
10,000 = 100%; andMoney targets require the configured reporting currency. There is no target
currency picker and unlike currencies are never combined. The displayed
Current / target percentage is canonical current value ÷ target value; it
is unavailable for a zero target or an undefined report ratio. For At most
targets, a lower ratio is better. Threshold success uses the selected direction,
not the ratio alone.
You may update only the typed threshold. Metric identity, unit, currency, direction, and resolved period are immutable because changing them would rewrite what prior progress meant. Delete and recreate a target to change those fields. Deletion retires the target from the dashboard; create, update, and delete writes retain the acting store user and before/after audit snapshots. A dashboard can have up to 12 active targets.
Any report can be delivered to an inbox on a schedule.
Open the report and choose Schedule (managed under Analytics → Scheduled).
Set the cadence — daily, weekly, or monthly.
Set the hour of day. For weekly, also pick the day of week; for monthly, the day of month (1–28).
Set the timezone (defaults to your store’s reporting timezone).
Enter one or more recipient emails.
Choose the export format — CSV, XLSX, or JSON.
Save. The schedule shows its next run, last run, and last status so you can confirm it’s working.
You can export any report on demand to CSV, XLSX, or JSON. Exports run asynchronously: Sellerlane queues the job, processes it in the background, and produces a downloadable artifact. Track and download finished files — and cancel ones still running — under Analytics → Exports, where each export shows its status (pending, running, completed, failed, or canceled).
Analytics → Live is a real-time map of your store right now. It’s built on MapLibre with OpenFreeMap tiles, and you can toggle between two modes:
On the map you’ll see active sessions as city-level points, clustered when zoomed out. Dot color represents the latest activity, not visitor identity. The current API returns new/returning visitor and session totals separately, but the map does not yet split its points or clusters into new vs returning segments; that visual split remains an explicit Shopify parity blocker. Alongside the map, Live surfaces carts in progress and orders as they happen, plus a live behavior funnel.
Windows are rolling: visitors “right now” use a ~5-minute window and the behavior funnel a ~10-minute window, so the view always reflects the immediate present rather than the whole day.
The New vs returning customers panel includes only orders linked to a stable customer identity. Guest orders, guest sales, and their later reversals still affect the overall Orders and Total sales headlines, but are never guessed into either customer bucket.
Session location is audience geography from trusted edge/IP data. It is not the customer’s shipping address, POS selling location, or fulfillment location. See Location has three meanings.
Most dashboards and standard reports use pre-aggregated rollups rather than scanning raw events on every load. Background workers build those rollups, so figures can lag the newest accepted event by a few minutes. A freshness indicator reports fresh, delayed, stale, failed, or unknown, with per-source lag and last-success time on the Health view.
An exact-source report is the deliberate exception. It reads a bounded, validated, indexed fact view when rolling the data up would destroy its meaning: an average of daily P75 values is not a range P75, and a current five-minute visitor window is not a daily visitor count. The report catalog identifies its source and applies the applicable currency, consent, test, staff, preview, and bot rules for that population. Unbounded raw-event browsing remains a support/debug surface, not an everyday report executor.
Sellerlane analytics respect buyer consent end to end:
ip_hash); the raw IP is never persisted.ip_city, ip_region, or country_only; postal and metro codes are not
collected.Consent state flows from your storefront consent banner into every visit, so opting out genuinely stops profiling rather than just hiding a number. Configure the banner and tracking destinations in Pixels & tracking.
Marketing attribution
See which channels and campaigns drive revenue in Marketing attribution.
Pixels & tracking
Connect Meta, Google, TikTok and more in Pixels & tracking.
Customers & segments
Dig into RFM, LTV and cohorts in Customers & segments.
Search & discovery
Act on top and zero-result searches in Search & discovery.