All segments

Shopify Reporting Apps: Setup and Where Native Breaks

Set up Shopify reporting apps: the read-only scopes to grant, the cost fields Shopify leaves blank, and the point native reports start hiding rows.

  • Published
  • Reading time 13 min read
  • Author Nafiul Hasan
Shopify Reporting Apps: Setup and Where Native Breaks. Diagram: where the reporting stops. RUN Shopify Reporting Apps: Setup andWhere Native Breaks REPORTEDNOT REPORTED pointerflow.com

Short answer

Setting up a Shopify reporting app means giving it read-only Shopify access, connecting Meta and Google as separate spend sources, and entering the cost data Shopify never collects itself — landed cost per SKU, payment fees, 3PL rates. Skip the cost step and the app still shows a confident number — just the wrong one.

Most searches for “Shopify reporting apps” are really asking one question: which app, installed how, actually closes the gap Shopify’s own Analytics section leaves open. A general roundup answers the first half — a list of names — and skips the second half, the part that decides whether the app tells you anything true once it is live. This is a setup guide, not a roundup: the permissions to grant, the cost fields Shopify never fills in for you, the attribution setting almost every install leaves on its default, and the arithmetic that says exactly when Shopify’s own report screens start hiding rows from you. It closes with what a broken reporting setup actually costs a $3M–$30M merchant in a normal month, worked from real inputs rather than asserted as a round number.

What do you need before installing Shopify reporting apps?

Three things need to exist before any Shopify reporting app is worth installing, and skipping them is why a freshly connected app often looks wrong on day one. A Shopify admin login with owner or full-app-management permission is the first, since installing an app from the Shopify App Store requires approving a scope list that a restricted staff account cannot grant. Read access to whichever ad platforms you actually spend on is the second — a Meta Business Manager login with the ad account attached, and a Google Ads account with API access enabled, not just a personal login to the dashboard. Your own landed cost per SKU is the third, gathered from wherever it currently lives — a spreadsheet, a 3PL invoice, a supplier quote — because no reporting app manufactures that number; it only has a field waiting for you to type it in.

Step 1: Grant the app read-only access to your Shopify admin

Installing a Shopify reporting app starts with Shopify’s own app-approval screen, which lists every scope the app is asking to read or write before you confirm the install. A reporting app has no legitimate reason to request write_orders, write_products or write_customers — it reads your order and product data and writes nothing back to the store — so check the requested scopes for read_orders, read_products, read_customers and read_analytics, and treat any write scope on that list as a reason to stop and ask the vendor why. Shopify shows this exact scope list on every public-app install, not a summary of it, so the check costs nothing beyond actually reading the screen instead of clicking past it.

Step 2: Connect Meta and Google Ads as spend sources

Shopify’s own checkout has no record of what you paid Meta or Google for a click, so a reporting app has to pull ad spend directly from each platform rather than through Shopify at all. Open the app’s own integrations panel and connect Meta Ads Manager and Google Ads individually, each through its own login or API token, granting read-only access to campaign, ad set and spend data. Skipping either one does not break the install; it just leaves that channel permanently blank in every blended report the app produces afterward, a quieter failure than an error message and easier to miss until someone asks why a channel’s numbers look empty.

Step 3: Enter landed cost per SKU, not Shopify’s blank default

A reporting app’s margin and profit numbers are only as accurate as the cost figure behind them, and Shopify does not supply one by default. Shopify’s own Cost per item field, found on each product’s Pricing section in the admin, holds a single number per variant, and it ships blank on every product until someone fills it in. Enter the fully landed cost, not the wholesale price alone: unit cost, inbound freight and packaging, for every SKU the app is meant to report on, either inside Shopify’s own field or the app’s separate cost-import screen if it keeps its own copy. A catalogue of a few dozen SKUs takes an afternoon to do properly; a catalogue in the low thousands is worth exporting to a spreadsheet, filling in bulk and re-importing rather than typing one product at a time.

Step 4: Set the attribution window to your own purchase cycle

Every reporting app ships with a default attribution window, and that default is built to be generally reasonable, not built for your store’s specific customers. Open the app’s attribution settings and look for a lookback window, usually expressed as a number of days of click or view credit before a sale is attributed to a channel; the default is commonly borrowed from the ad platforms’ own reporting conventions rather than derived from your own repeat-purchase behaviour. Pull your own average days between a customer’s first visit and their first purchase from Shopify’s customer order history, and set the window to match it — a supplements brand with a short consideration cycle and a furniture brand with a six-week one should not be running the same attribution window, and most installs never touch this setting after the first login.

Step 5: Add your payment-processing and 3PL fee schedule

Payment processing and 3PL fulfilment fees are two recurring costs that sit outside anything Shopify or an ad platform reports, and both need to be entered as their own line items for a margin number to mean anything. Your payment processor’s exact published rate goes in as a percentage-plus-fixed-fee line the same shape it is billed in — Shopify Payments’ own online rate depends on your specific Shopify plan, so pull the current figure from Settings > Payments in your own admin rather than assuming a number. Your 3PL’s per-order pick-and-pack rate, taken from its own current rate card rather than the number in a contract signed two years ago, goes in the same way. Both change more often than most teams update them; a 3PL renegotiation or a Shopify plan change that quietly moves the payment rate is the most common reason a previously accurate app starts drifting.

Step 6: Build and save the blended profit report

With Shopify, ad spend and cost data all connected, the last step is building the report itself rather than leaving the raw data sitting unassembled. Most reporting apps let you construct a channel-by-day and a SKU-by-day view, combining attributed revenue, ad spend, landed cost, payment fees and fulfilment cost into one contribution-margin figure per row, and save that combination as the account’s default so it is the first thing anyone sees on login rather than a blank dashboard someone has to rebuild from memory each time. A saved default view also turns a reporting app from something one person checks occasionally into something the whole team actually uses, since nobody has to remember which filters to reapply.

What Shopify holds by default versus what a reporting app needs you to add
InputShopify’s defaultWhat the app needs instead
Order and session dataCollected automaticallyRead through the Admin API scopes in Step 1
Ad spendNot collected — outside Shopify’s checkoutConnected per platform in Step 2
Landed cost per SKUBlank Cost per item fieldEntered by hand in Step 3
Attribution windowNot applicable — Shopify does not attribute across ad platformsSet to your own purchase cycle in Step 4
Payment and 3PL feesNot itemised anywhere in Shopify AnalyticsEntered from your own rate cards in Step 5

Which step do most Shopify teams get wrong?

Step 3, the landed cost, is the one most installs get wrong, and it is wrong in a quiet way rather than an obvious one. A reporting app with no cost entered does not show a blank margin column — it shows a number, usually treating cost as zero or inheriting whatever sits in Shopify’s own Cost per item field, still blank, which means every order looks like it converted at 100% margin. That number is confident-looking and completely wrong, and because a dashboard with a wrong number looks exactly like a dashboard with a right one, the mistake survives for months until someone cross-checks it against an actual bank statement or a supplier invoice. The fix is not a setting inside the app; it is the discipline of updating landed cost on the same schedule a 3PL contract or a supplier price actually changes, which for most catalogues means quarterly at minimum and immediately after any known cost change.

How do you verify a Shopify reporting app is reporting correctly?

Verification starts with one comparison: pick a specific week, open the reporting app’s total revenue for that week, and open Shopify’s own Analytics Sales report for the identical date range and time zone, then check whether the two numbers actually agree. A small, consistent gap usually traces to one of three causes — the app’s time zone is set differently from the store’s own admin time zone, so a day boundary falls in a different place; a batch of refunds posted inside the window and Shopify’s Net sales figure moved retroactively while the app’s cached total did not; or the app is reporting gross revenue where Shopify’s own report is reporting net, or the reverse. A gap that keeps growing rather than staying flat points somewhere else entirely, usually a subscription order or a draft order whose properties the app’s default filters were never built to recognise — the same failure mode covered in why Klaviyo sometimes shows the wrong order count.

At what point does Shopify’s native reporting break down?

Shopify’s native reports break down once an order-level report needs more than 1,000 rows, and Shopify says so itself: its own Reports documentation states that reports display a maximum of 1,000 rows, a limit chosen so the report loads quickly, with totals calculated across every row even though only the first 1,000 display in the table. The totals stay correct past that point, but any report where the individual rows matter, not just the total, stops showing the full picture right where row 1,000 and row 1,001 happen. An export gets around the display cap for most report types. Whether a few report types — the finance sales tax reports among them — additionally cap the underlying ShopifyQL query itself, requiring the query to be edited by hand to remove the limit, is — metric to confirm — since the cited documentation covers the general 1,000-row display cap only, not which specific reports also cap the query beneath it.

Work out your own break-even point rather than trusting a general one, because it depends on average order value, not on revenue alone. Divide monthly revenue by average order value; once the result passes 1,000, an order-level report — one row per order, not one row per month or per product — is already losing rows in a normal month, not only during a peak. At the $3M annual floor this site writes for, monthly revenue works out to $250,000, so the break-even average order value is $250 — $250,000 divided by 1,000 orders. Below a $250 average order value, which covers most Shopify DTC brands, an order-level report clears the cap before the month is even finished, and every $3M–$30M merchant reading this should re-run that division with their own numbers rather than this one.

Illustrative: how three native Shopify report types reach the 1,000-row cap
Report typeWhat drives its row countIllustrative worked example
Orders export, one row per orderMonthly order count1,000 orders at a $250 average order value = $250,000 in monthly revenue
Sales by product, grouped by dayActive SKUs × days in the report windowA 60-SKU catalogue selling daily reaches 1,000 rows on day 17 of the month (60 × 17 = 1,020)
United States or Canada sales tax reportTaxable line items per periodCapped at 1,000 rows for display, per Shopify’s own documentation; whether the underlying query is also capped is a `metric to confirm`

What does bad reporting actually cost a $3M–$30M merchant every month?

No vendor publishes a per-order or per-SKU cost of bad Shopify reporting, because the honest number depends on your own catalogue, team and ad mix, not a rate card anyone sells — metric to confirm — so what follows is a worked calculation with invented inputs, built to show the method rather than a number to copy. Three costs actually recur every month a reporting setup stays broken, and all three are invented for this example; swap in your own hours, spend and units before trusting the total. Manual reconciliation time: an ops person spending six hours a week stitching Shopify exports, ad-platform CSVs and a 3PL invoice together by hand, at a $50 loaded hourly rate, across four weeks, comes to $1,200 a month (6 × 4 × $50). Continued spend on a channel a blended view makes look healthy: an $8,000-a-month channel running one extra month at a true, post-landed-cost contribution of −$1,500, before anyone with a real per-channel margin number catches it. A missed reorder trigger on a top SKU: no join between sales velocity and 3PL receiving lead time means a five-day stockout on a SKU selling 40 units a day at $28 of contribution margin each, for $5,600 in lost margin (5 × 40 × $28).

Illustrative monthly cost of a broken Shopify reporting setup — every input invented to show the method
Cost sourceWorked calculationMonthly cost (illustrative)
Manual reconciliation labour6 hrs/week × 4 weeks × $50/hr loaded rate$1,200
Overspend on a channel a blended view hidesOne extra month at −$1,500 true contribution before it is caught$1,500
Missed reorder trigger, top SKU stockout5 days × 40 units/day × $28 contribution margin/unit$5,600
Total—$8,300

A Shopify reporting app is a piece of software; the setup behind it — the scopes it can access, the cost data it never invents on its own, the attribution window nobody resets, and the row cap that quietly limits what you can see without an export — is a reporting and analytics problem, not an app-choice problem. Getting all four right the first time is most of what a reporting and analytics build actually does: not picking Triple Whale over Northbeam — Northbeam’s own published Starter tier is $1,500 a month (vendor-reported); Triple Whale’s current tier pricing is — metric to confirm, since its pricing page could not be retrieved directly and third-party summaries of its tiers disagreed with each other — but making sure whichever one gets picked is fed correct inputs from day one instead of confidently wrong ones for the first two quarters. For the boundary between what Shopify’s own admin already reports and what any app is closing, see what Shopify Analytics actually covers and what a Shopify dashboard is versus a profit dashboard; for checking the margin math that feeds a reporting app’s cost fields, the margin calculator works the same contribution-margin arithmetic used in this guide’s stockout example.

Sources

  • Shopify Help Center, Reports and analytics — report types documentation, retrieved September 2026: reports display a maximum of 1,000 rows.
  • Northbeam, published pricing page, retrieved September 2026, listing the Starter tier at $1,500 a month — vendor-reported.
  • Triple Whale’s specific current tier pricing is a metric to confirm: its pricing page could not be retrieved directly, and third-party summaries of its tiers disagreed with each other at the time of writing, so no figure for it is quoted here. Check Triple Whale’s own pricing page before citing a number.
  • The per-order and per-SKU cost of bad reporting is also a metric to confirm — no vendor or research firm publishes it across a comparable population of $3M–$30M Shopify stores, so this piece gives a worked calculation method with invented inputs instead of a number.
  • The setup steps, the scope and cost-field descriptions, and the reconciliation guidance are written from first-hand reporting-analytics builds on Shopify, Recharge and ad-platform stacks, not from a third-party study.

Frequently asked

Do I need Shopify Plus to install a reporting app like Triple Whale or Northbeam?

No. Reporting apps install through the Shopify App Store on any Shopify plan, from Basic upward, because the Admin API scopes a reporting app needs — read access to orders, products and customers — are available regardless of plan. Shopify Plus adds a report builder inside Shopify’s own native Analytics, which is a separate, unrelated feature from a third-party app’s own dashboard.

Does a Shopify reporting app replace Shopify Analytics, or run alongside it?

Alongside it. Shopify Analytics keeps reporting Shopify’s own order and session data regardless of what else is installed, since it is part of the admin rather than a competing product. A reporting app adds a second, separate dashboard built from Shopify’s data plus ad spend and cost inputs Shopify never collects, and most teams end up checking both for different questions.

How long does a reporting app take to backfill historical Shopify orders after it is connected?

It varies by app and by how many years of history the store has, and no vendor publishes a standard figure across all of them — check the specific app’s own documentation before assuming a number. Most backfill a bounded window rather than a store’s entire order history, the same limitation Klaviyo’s own Shopify integration has on its email side.

Does installing a reporting app slow down the Shopify checkout for customers?

No. A reporting app installed through the Shopify App Store reads order and product data through Shopify’s Admin API after a sale completes, not during checkout itself, so it has no code running in the customer-facing checkout flow. Anything that does touch checkout speed — a pixel, a script tag added to the theme — is a different category of app entirely.

What happens to a reporting app’s data if the subscription gets cancelled?

The vendor stops syncing new orders and, after some retention period specific to that app, typically deletes or archives the account. Shopify’s own order history is untouched, since the app only ever read a copy of it — but any blended view the app calculated, its cost inputs and its attribution rules, usually cannot be rebuilt from Shopify alone once access ends.

Can an agency or bookkeeper get access to the reporting app without full Shopify admin access?

Usually, through the app’s own user-invite system rather than Shopify’s. Most reporting apps issue their own logins with their own permission tiers, separate from Shopify’s staff-permission system, so an agency can be given a view-only seat inside the app itself without ever touching the Shopify admin — a narrower and generally safer grant than adding them as Shopify staff.

Do reporting apps correctly handle orders from a subscription platform like Recharge?

Only if they are configured to. A recurring order created by a subscription platform can carry different properties than a one-off storefront order, and a reporting app’s default filters are usually built around storefront properties first. Check the app’s own subscription-handling settings, or run a test order through the subscription platform and confirm it appears in the reports before trusting the totals.

Will a reporting app show correct numbers for a store that also sells through Shopify POS?

Only if POS is explicitly included in its sync settings. Shopify’s own native dashboards combine POS and online orders by default because both write to the same Orders object, but a third-party reporting app only blends POS sales in if it was configured to pull that channel specifically — some installs are set up for online orders alone, which understates a brand also selling in person.

What is the difference between a reporting app and pulling Shopify data into a warehouse like BigQuery?

A reporting app is a finished product with its own dashboard, cost fields and attribution model, built and maintained by a vendor. A warehouse is raw storage — Shopify’s own BigQuery data-share or a connector such as Fivetran lands the data, but building the dashboard, the cost joins and the attribution logic on top of it is then your own team’s job, not a vendor’s.

Is a free Shopify reporting app good enough at $3M–$30M in revenue?

Usually not for long. Free tiers typically cap the ad platforms connected, the history retained or the number of saved reports — limits a single-channel store under $1M rarely hits but a multi-channel $3M+ operation reaches within months. The free tier is a reasonable way to test whether the category is worth paying for, not a permanent setup for a business this size.

How do you tell whether the reporting app’s attribution number is wrong, or Shopify’s own number is wrong?

Check which one is closer to a number you can independently verify — the ad platform’s own self-reported spend and conversions, pulled directly from Meta Ads Manager or Google Ads for the same campaign and date range. Shopify’s order count is close to a fact, since every order is one row in its ledger; an attribution model, whether it lives in Shopify or in the app, is always an estimate.

Can different people on the team see different levels of detail inside a reporting app?

Usually, yes — most reporting apps ship their own role-based permissions, separate from Shopify’s staff-permission system, letting an owner restrict a given login to summary dashboards only or open up full SKU-level and campaign-level detail. That permission layer has to be configured inside the app itself; it does not inherit whatever access that person already has in the Shopify admin.

Does a Shopify reporting app convert multi-currency sales into one reporting currency automatically?

Most do, following the same pattern as Shopify’s own Analytics — reporting in the store’s base currency by default, converting whatever a customer paid in a different presentment currency back to that base currency at the transaction’s own exchange rate. Confirm the specific app’s behaviour before relying on it, since some report presentment currency separately, which changes what a per-market number actually means.

Next step

Is this your reporting & analytics problem, or a symptom of another one?

Bring your numbers — the churn split, the decline rate, whatever your flows are earning — and we will tell you which of them is the expensive one.

Book a call →