Executive summary
- What changed: ShopifyQL API version 2026-10 extends two schemas. The shop_campaign_insights schema gains a shop_campaign_orders metric plus country and country_code dimensions, and the sales schema gains four Shop Campaign dimensions.
- Why it happened: Campaign performance and sales data previously lived in separate shapes. Adding campaign dimensions to the sales schema lets revenue be attributed to the campaign that drove it without stitching datasets together after the fact.
- Who should care: Teams building custom reporting on top of ShopifyQL, and anyone whose BI layer pulls Shopify marketing data into a warehouse alongside other channels.
What changed
The shop_campaign_insights schema already brought campaign sales, ad spend, and customer results together in one dataset keyed by campaign, supporting metrics such as shop_campaign_sales, shop_campaign_ad_spend, shop_campaign_return_on_ad_spend, and shop_campaign_average_customer_acquisition_cost. Version 2026-10 adds shop_campaign_orders, which gives order volume next to those figures, and country plus country_code dimensions, which allow geographic segmentation inside campaign reporting.
The second half is arguably more useful. The sales schema now carries four Shop Campaign dimensions, which means you can group ordinary sales reporting by the campaign that produced it. That removes a join that previously had to happen downstream, usually in a warehouse, usually with a mapping table someone maintained by hand.
Why it matters
The practical gain is reading acquisition efficiency from the same query that reads revenue. Order volume alongside sales and ad spend turns a single aggregate into a diagnosable picture: whether a campaign grew revenue by bringing in more orders or by raising order value, and whether return on ad spend held once customer acquisition cost is accounted for. Country segmentation then shows whether a campaign that looks mediocre in aggregate is performing well in one market and poorly in another, which is the difference between cutting a campaign and reallocating it.
For a Plus merchant this mostly matters because it reduces the surface area of custom reporting. Every hand-built join between marketing and sales data breaks when a campaign is renamed. Pushing attribution into the query layer removes a class of silent reporting error. It is the same discipline we apply to conversion rate optimisation programmes: decisions should rest on numbers the platform computes, not on a spreadsheet step that nobody validates.
Role-specific impact
- Marketers: You gain the ability to ask better questions of Shop Campaigns, specifically which campaigns bring customers in profitably rather than just which generate the most revenue. Note that these fields are API-side, so the benefit arrives when someone builds the report or your BI tool adds support.
- Developers: Move ShopifyQL queries to version 2026-10 to access the new fields. Group shop_campaign_sales and shop_campaign_ad_spend by shop_campaign_name to compare return against cost, and use the new country dimensions for market-level breakdowns. Where you currently join campaign data to sales downstream, consider replacing that logic with the sales schema dimensions.
- Store admins: No admin change and no setting to enable. Existing reports continue to work on earlier versions.
Use-case example
Real-world scenario
A home goods brand spends around 60,000 USD a quarter across Shop Campaigns and reports blended return on ad spend of roughly 3.1. Grouping the new order metric and country dimension by campaign reveals that one campaign carrying about 20 percent of spend is returning near 1.4 in a single market while performing acceptably elsewhere. Previously that pattern was invisible without exporting both datasets and joining them by hand, a job that took an analyst most of a day each quarter and was therefore done rarely. Reallocating that portion of spend toward campaigns returning above 3 is a concrete decision the data now supports directly.
Implementation checklist
- Confirm you are running Shop Campaigns and that campaign reporting matters enough to justify the work.
- Update ShopifyQL queries to API version 2026-10.
- Add shop_campaign_orders to existing campaign insight queries so order volume sits beside sales and spend.
- Introduce country or country_code as a dimension where you sell across multiple markets.
- Review downstream joins between marketing and sales data, and replace them with the sales schema Shop Campaign dimensions where the join exists only to attribute revenue.
- Validate new figures against a known period before changing spend, since a reporting change and a performance change are easy to confuse.
FAQ
- Q: Do we have to change anything to keep current reports working?
- A: No. These are additive fields on a new API version. Queries pinned to an earlier version behave exactly as before, so the upgrade is driven by whether you want the new breakdowns.
- Q: Is this visible in Shopify admin analytics?
- A: The change is to the ShopifyQL API, the layer custom reports and BI integrations query. Treat it as a capability for your reporting stack rather than a new admin dashboard.
Resources
shop_campaign_insights schema reference
Need guidance? Talk to Makro.