New Analytics: Full Order History, CSV Export, and an Analytics API
TLDR
- Analytics is rebuilt on order-level records with unlimited retention, replacing the old rolling 60-day window
- A one-click history import loads orders back to your install date, plus roughly 90 days before that as a comparison baseline
- A new revenue-over-time chart with day, week, and month grouping, plus an All time date range, joins the existing presets and custom ranges
- Export the current date range and bundle filter as a CSV in one click
- The new GET /v1/analytics endpoint returns a daily series of bundle revenue, units, orders, and AOV comparison for dashboards, Sheets, and warehouses
- Every figure is net of refunds, and every order that contains a bundle carries a full breakdown in your own store
Bundle analytics in Flex Bundles used to run on a rolling 60-day window. That was fine for checking last week, but it could not answer the questions serious brands actually ask about bundles. How did the holiday gift sets do against last year? Did the AOV lift hold up after we changed the discount? Which bundle has been quietly growing for six months?
So we rebuilt it. Analytics now runs on order-level records with unlimited retention, and everything on top of that has been upgraded to match: full history import, a revenue chart, CSV export, and a proper API.
Here is what changed and how to use it.
Unlimited retention, with your full history imported
The 60-day window is gone. Once a day has data, it never expires.
To fill in the past, open Flex Bundles → Analytics and click Import order history. The import loads every order back to the day you installed Flex Bundles, plus roughly 90 days before that. Those pre-install months matter: they give the AOV comparison a real baseline of what your orders looked like before bundles existed, so the lift you see is measured against something.
The import runs in the background and figures fill in over a few minutes. When it finishes, the Analytics page shows the exact date your data starts and the date of your first bundle sale, so you always know how far back a report can go. If you ran an import under the old window, you will see an option to import the rest.
A revenue chart you can zoom out on
The Analytics page now opens with a bundle revenue chart for the selected range. Group it by day for the last month, by week for a quarter, or by month for the full history, and hover any point for the exact figure. The peak in the range is labelled so the big days stand out at a glance.
Date range presets now include All time alongside today, yesterday, last 7, 30, and 60 days, week to date, month to date, and custom start and end dates. Every range respects your shop's timezone, so daily numbers line up with Shopify's own reports.
Filter to a single bundle and the chart, the totals, and the component table all follow. The component table shows how many units of each component moved inside the bundle and what share of the bundle's volume each one represents, which is the fastest way to spot the option nobody picks in a build-your-own box.
AOV comparison, with the lift in dollars
Below the chart, the AOV comparison puts orders with bundles next to orders without them for the same range: average order value for each, the difference, and the percent change. When bundle orders come in higher, the page also multiplies the difference by the number of bundle orders to show the additional revenue bundles brought in over the period.
Two things to know about the counts. First, per-bundle order counts can add up to more than the total, because an order containing two different bundles is counted under each. The distinct order count is the one in the AOV comparison. Second, there is no conversion rate. Flex Bundles measures orders, not page views, so use attach rate (the share of orders containing a bundle) and the AOV comparison as your effectiveness measures, and pair them with your web analytics for the funnel.
Export exactly what is on screen
Set a date range, optionally pick a bundle, and click Export CSV. The file has three sections that open cleanly in Excel or Google Sheets: per-bundle totals (revenue, units, orders), per-component units within each bundle, and the AOV comparison for the range.
Because retention is unlimited, any period with recorded data can be exported. This is the quickest path when someone just needs the numbers in a spreadsheet by end of day.
The Analytics API
For anything recurring, there is now a GET /v1/analytics endpoint. It uses the same API key as the Bundles Admin API, generated on the Settings page, and returns a daily series plus range totals as JSON.
curl "https://api.flexbundles.com/v1/analytics?start=2026-07-01&end=2026-07-31" \
-H "Authorization: Bearer fxb_your_api_key"
Each day in the range gets a row with revenue, units, and orders per bundle, plus the count and value of orders with and without bundles. Totals for the range include the per-bundle rollup sorted by revenue, the amount refunded, and the full AOV comparison. Days with no orders are zero-filled, so the series drops straight into a chart. A single request can span up to 366 days, and the response tells you the earliest date with data so you can page back through the years.
A small script on a schedule is all it takes to keep a dashboard fresh. If your team lives in Google Sheets, an Apps Script with a daily trigger does the job, and the Exporting Your Data guide has one you can paste in. The same endpoint feeds Looker Studio, a BI tool, or a nightly warehouse load.
Order-level data stays in your store
The daily rollup is an aggregate. The full-fidelity record lives on your orders, in your own Shopify store, where you can read it with an Admin API token you control:
- Every order containing a bundle is tagged
flex-bundles-has-bundle, which makes bundle orders filterable in the orders list, Segments, and Flow. - Each of those orders carries a
$app:bundle_breakdownmetafield: the bundles in the order, their revenue and units, and the exact component variants and quantities.
This is the data to reach for when you need to join bundle purchases to customers, cohorts, or repeat behaviour. It persists for the life of the order, and for large ranges a Shopify Bulk Operation returns it as a JSONL file ready for a warehouse. The Exporting Your Data guide has the GraphQL query and the metafield shape.
Everything is net of refunds
The Analytics page, the CSV export, and the Analytics API all report revenue and units net of refunds. A refund is subtracted from the day its order was placed, so a report you pulled last week can shrink slightly once returns land. Order counts are never reduced, so a fully refunded order still counts as an order, and bundle units only drop when a whole bundle's worth of components is refunded. Order-level breakdown records describe what was sold at purchase time and are not modified by refunds, so join them against Shopify's refund data if you need net figures per order.
Why this matters
Bundles are a core revenue line for the brands we work with, and a core revenue line deserves the same reporting rigour as everything else in the business. That means history you can compare year over year, numbers that agree with Shopify's, a clean path into whatever tools your team already uses, and no lock-in to an in-app dashboard. All three routes (CSV, API, and order metafields) draw on the same underlying records, so the numbers agree wherever you look at them.
If you are already on Flex Bundles, open the Analytics page and run the history import. If you are evaluating bundle apps and want your bundle data to be yours, install Flex Bundles and see what your orders have been telling you.
Frequently Asked Questions
Do I need to do anything to get my old orders into analytics?
Yes, once. Open Flex Bundles → Analytics and click Import order history. The import loads orders back to when you installed Flex Bundles, plus roughly 90 days before that as a comparison baseline. It runs in the background and the page shows the exact date your data starts. If you ran an import under the old 60-day window, the page offers to import the rest.
Is there a conversion rate?
No. Flex Bundles measures orders, not page views, so it cannot see how many people looked at a bundle and walked away. Use attach rate (the share of orders that contain a bundle) and the AOV comparison as your effectiveness measures, and pair them with your web analytics for funnel metrics.
How are refunds handled?
Revenue and units in the Analytics page, the CSV export, and the Analytics API are net of refunds. A refund is subtracted from the day its order was placed, so historical numbers can shrink after a return. Order counts are never reduced, so a fully refunded order still counts as an order. The Analytics API also reports the total refunded amount for the range.
How far back can a single API request go?
Up to 366 days. For longer pulls, page by year starting from the earliest_available date in the response. Retention itself is unlimited: once a day has data, it never expires.
Can I get order-level detail, not just daily totals?
Yes, and it lives in your own store. Every order containing a bundle is tagged flex-bundles-has-bundle and carries a $app:bundle_breakdown metafield listing each bundle, its revenue and units, and the exact component variants and quantities. Query it with Shopify's Admin GraphQL API or a Bulk Operation to load it into a warehouse.