See all services → Shopify Plus Partner
API Developer

Query Shop Campaign Results With New ShopifyQL Fields

ShopifyQL version 2026-10 adds a shop_campaign_orders metric, country dimensions, and four Shop Campaign dimensions on the sales schema, so campaign spend and revenue can be analysed together.

Executive summary

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

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

  1. Confirm you are running Shop Campaigns and that campaign reporting matters enough to justify the work.
  2. Update ShopifyQL queries to API version 2026-10.
  3. Add shop_campaign_orders to existing campaign insight queries so order volume sits beside sales and spend.
  4. Introduce country or country_code as a dimension where you sell across multiple markets.
  5. 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.
  6. Validate new figures against a known period before changing spend, since a reporting change and a performance change are easy to confuse.

FAQ

Resources

shop_campaign_insights schema reference

Need guidance? Talk to Makro.