Skip to main content

Introduction

Shopify is a direct-to-consumer commerce platform for online stores. The connector reads a shop’s orders, refunds, products, and product variants via Shopify’s Admin GraphQL Bulk Operations API, exposing order-level revenue, sales analytics, and product catalog data for dashboards. As an e-commerce connector, order, revenue, and product breakdowns are standardized so widgets can aggregate alongside ad-platform sources without additional configuration. Several headline order metrics — Gross Sales, Net Sales, Total Sales, Tax Amount, Shipping Fee, Net Returns, Net Discount — are reconstructed to match the values shown in Shopify’s own analytics, so cross-source dashboards reconcile cleanly against the Shopify admin UI. To connect this data source, see How to connect Shopify to Adriel.

Data refresh strategy

Architecture data

Architecture covers the store, products, and product variants. The catalog is fully refreshed once per day via a dedicated Shopify Bulk Operation. Each product variant becomes a separate record; the snapshot includes product title, variant title, SKU, price, compare-at (retail) price, status, image URL, inventory unit cost (when set), and created / updated timestamps.

Reports data

Reports include order-level financial and status data. Refresh schedule. Orders sync hourly at :39 past the hour (UTC) (cron 0 39 * * * *). At every refresh, orders created or modified in the last 1 day are pulled. Order chunks are materialized one day at a time. Historical window. Up to 90 days of historical orders can be back-filled (maxFromDate = 90 days ago). Data older than 90 days cannot be retrieved from Shopify through this connector. Payment-date attribution. Order attribution uses the payment date (processedAt), not the creation date (createdAt) — driven by paymentDateMode: true. Orders placed in one period and paid in another are reported against the payment period.

Architecture levels

Store → Product → Variant, and Order → Line item. Each product variant is a separate record. Each order line item is a separate row on the order.

Date range limits

Metrics

How to read the columnsThe Data type column uses this vocabulary: Number, Currency, Percentage, Ratio, Duration, Date, Text, URL, Array, Boolean.The API Key column uses code style like currentTotalPriceSet for the literal Shopify Admin GraphQL field name. Italic text describes how a value is produced when it doesn’t map cleanly to a single Shopify field — typically Adriel-side reconstruction of a Shopify analytics figure, aggregation across order rows, or a computed formula.

Orders

Refund reporting timing. Refund detail cannot be retrieved in the same bulk operation as orders. The connector first runs a lightweight bulk operation to identify orders with refunds in the date window, then fetches full refund detail via a direct GraphQL query batched by up to 250 order names. Refund figures on freshly-refunded orders may lag the initial order sync by one cycle.

Revenue & sales

Native Shopify metric reconstruction. Gross Sales, Net Sales, Total Sales, Net Discount, Net Returns, Tax Amount, and Shipping Fee are reconstructed from Shopify’s sales agreement data (ShopifyAgreement / ShopifyAgreementSale) so they match the values shown in Shopify’s own admin analytics. Dashboards built on these metrics reconcile against the Shopify admin.
Multi-currency handling. Shopify Markets and Shopify Payments support multi-currency natively; each order’s original currency is captured via currencyCode. Adriel applies a currency conversion rate fetched at sync time to convert all monetary values to the asset’s configured reporting currency (default USD).

Products

Product Order metrics link products with their orders. When a Product Order metric is used with a product filter, only the portion of the order tied to that product is included, and only orders containing at least one matching product are shown. If a product has been deleted in Shopify, the related orders may not appear — use Product Order metrics only when necessary.

Customers

Costs

Cost metrics depend on inventory unit cost. Order Products Cost Amount and Product Cost populate only when the merchant has set inventoryItem.unitCost on products inside Shopify, and the Shopify app has the read_inventory scope (“product costs” permission). Products without an inventory unit cost contribute no value to these metrics.

Breakdowns

Shopify-provided vs Adriel-providedBreakdowns whose API Key is a Shopify GraphQL field (e.g. paymentGatewayNames, sourceName, customerJourneySummary.firstVisit.utmParameters.source) come directly from Shopify’s Admin GraphQL response. Breakdowns marked Adriel-derived are computed on top of the raw order or product data — grouping by extracted attributes, resolving customer type from the order index, or splitting reports by time.

Store & product hierarchy

Order details

Customer & geography

Marketing attribution (Customer journey UTM)

UTM values come from Shopify’s customer journey summary, not from parsing Adriel-side URLs. Shopify records the first and last visit that led to the order and exposes the UTM parameters and source on each. The connector maps them to breakdowns so orders can be grouped by acquisition channel.

Time & date grouping

Shopify’s Bulk Operations return order-level records with timestamps. Adriel groups them into these views for reporting. All time-grouping breakdowns are Adriel-side aggregations of the same underlying order data.

Overview & status

Limitations

Based on the current connector, Shopify has:
  • A 90-day historical limit (maxFromDate = 90 days ago). Orders older than 90 days from today cannot be back-filled.
  • Hourly refresh cadence. The orders cron runs at 0 39 * * * * (UTC) on a rolling 1-day window; intra-hour changes surface on the next tick.
  • Custom private-app connection type is being deprecated. New connections must use the custom OAuth app flow.
  • Cost metrics require the read_inventory scope. Without it, inventoryItem.unitCost is not returned and Product Cost / Order Products Cost Amount are null.
  • No deleted-data retention. Products or orders deleted in Shopify no longer appear. Orders that reference a deleted product variant fall back to a placeholder variant ID and may not surface under Product Order metrics.
  • Test orders excluded. Orders flagged test: true in Shopify are silently dropped and produce no rows.
  • One bulk operation of each type at a time per store. On API versions before 2026-01, Shopify runs only one bulk operation of each type at a time per shop, so concurrent Adriel refreshes are serialized (Shopify Bulk Operations).
  • refundLineItems not available via bulk. Refund detail is fetched with a separate non-bulk GraphQL query, chunked at 250 orders per request.
  • Gross/Net/Total Sales on plain order rows are 0 — the reconstructed values live on the paired agreement (transaction) rows. Widgets should not filter out transaction rows when using these metrics.

API references (Shopify)

See also