Skip to content
← All integrations

Commerce

The order is the outcome — refunds included.

An order is not revenue until it survives the refund window. Shopify orders land within seconds of checkout, and the same order is sent again when it is edited, partly refunded, returned or cancelled. Ingestion is keyed on order id and version, so a delivery Shopify retries replaces a row instead of adding one, and a refund lands as a signed adjustment against the original sale. Cost per item feeds margin where you maintain it and your finance system supplies the definition where you do not — the business metrics service resolves which, and the model never produces the figure itself.

In short: A Shopify app install authorises the Admin API and registers webhooks for orders, refunds, cancellations, fulfilments and payouts. Each order arrives with its line items, discounts and currency and is matched to the click and journey that preceded it before it counts as a channel outcome.

What it is

Shopify is the storefront, checkout and order record for a commerce business. The integration is a read path for commercial outcomes plus one narrow write path — order tags and customer segment membership — that touches no money, no pricing and no fulfilment.

What Realvertising receives

  • Orders with line items, quantities, discount allocations, shipping, tax, presentment and shop currency, and the sales channel each order came through.
  • Refunds, returns, cancellations and order edits, applied as signed adjustments against the original order and never as new sales.
  • Customer records and order history for repeat-rate and lifetime-value inputs, plus subscription contracts and their renewal state where subscriptions run on the shop.
  • Shopify Payments payouts and transaction fees, giving the amount that actually settled behind a day of orders rather than the gross booked at checkout.

What it sends back

  • Order tags and metafields recording the credited channel, campaign and click identifier, so your own reporting can inspect what the Control Plane matched.
  • Customer segment membership for suppression and seeding — existing buyers, high-value cohorts, lapsed customers — refreshed as new orders arrive.
  • A storefront web pixel that captures click identifiers and UTM parameters at landing and carries them into checkout, which is what makes order-to-click matching possible at all.

What this lets you ask

Questions this connection makes answerable.

  • "How much of last month's Shopify revenue credited to paid social was refunded before it settled?"
  • "Which campaigns are credited with first orders from customers who bought again within ninety days?"
  • "What is the margin on orders recorded after Google spend, once discounts and cost per item are taken out?"

How it connects

  1. 1Install the Realvertising app on the shop and approve the Admin API scopes: orders, customers, products, and payouts if you use Shopify Payments.
  2. 2Enable the web pixel extension so click identifiers and UTM parameters survive from landing page through to checkout.
  3. 3Choose a backfill window. Historical orders import first, webhooks take over for new ones, and order-to-click matching begins with the first order after the pixel goes live.

Where it stops

  • Webhooks are at-least-once and can arrive out of order. Deduplication on order id and version, plus a reconciliation pass that re-reads the order from the Admin API, means a late delivery corrects a row rather than duplicating it — but the corrected figure can move after you first saw it.
  • Cost per item only exists if you maintain it. Where variant cost is blank, margin falls back to your finance system's definition and the order is flagged as carrying no shop-level cost.
  • Draft orders, POS sales and gift card redemptions behave unlike online checkout. They are ingested and labelled, but a POS sale carries no click identifier and cannot be matched to an ad.

Integrations

Everything the Growth Brain can read.

Web analyticsIndependent journey and conversion truth from your own site — held beside network-reported numbers, never merged into them.CRMQualified leads, pipeline and closed-won outcomes become the signal networks optimise toward — not form fills.Finance systemMoney that actually arrived — payments, subscriptions, refunds — becomes the value networks optimise against.Accounting systemGross margin and contribution, as your accountants define them, become the floor under every budget decision.Content platformAd copy is assembled from claims your content platform already approved, and a lapsed claim stops being used.Brand assetsOnly assets with a live licence and the right usage rights reach a placement, and expiry pulls them back out.Consent platformConfigured consent state decides which identifiers may be activated, enforced at every hand-off to a network.Custom APIYour own outcomes and values, posted with an idempotency key and forwarded to the networks as conversion signals.Google AdsOAuth into your manager account, read the campaign tree, write budgets and targets, return conversions keyed by GCLID.MetaSystem User token, Business Manager discovery, budgets written back, and server-side Conversions API events that deduplicate.TikTokBusiness Center OAuth, campaign sync, Events API server events with dedupe, and budgets written under Constitution limits.LinkedInAd account discovery, campaign and creative sync, Lead Gen Form pull, and CRM stages returned through the Conversions API.Microsoft AdsEntra sign-in, account hierarchy sync, offline conversions keyed on MSCLKID, and writes that respect import-managed campaigns.ShopifyOrders, refunds and payouts arrive as commercial outcomes, keyed by order id so a retried webhook cannot count a sale twice.StripePayments, invoices, subscriptions, refunds and payouts ingested on event id, so a replayed webhook never double-counts.

One goal. Every channel. Real business truth.

Connect your ad accounts, say what a good customer is worth, and let the Growth Brain work the objective inside limits you set.

No ad spend commitment · Connect one channel to start · [email protected]