Shopify orders sync — what gets imported

Last updated: May 19, 2026

Shopify orders sync — what gets imported

After connect, Wevion syncs products, orders, and refunds from your Shopify store. Real-time via webhooks (< 30s latency for new orders); 15-minute polling backfills missed events. Initial sync pulls last 90 days. Manual CSV import available for historical bulk loads.

Who is this for

Mediabuyers running Shopify-attributed campaigns. Anyone wondering "why is Shopify revenue showing N in Wevion vs N+X in Shopify Admin".

Data flowing from Shopify to Wevion

Products

Synced via apps/backend/src/services/shopify/shopify-product-ingestion.service.ts. Per product:

  • ID, title, description

  • Variants (size, color, SKU per variant)

  • Prices (regular + sale per variant)

  • Images

  • Inventory levels per variant per location

  • Status (active / archived / draft)

  • Updated timestamp (for incremental sync)

Visible at /catalogs after first sync.

Orders

Synced via orders/create, orders/updated, orders/cancelled webhooks:

  • Order ID + reference number

  • Line items (products + quantities + per-line prices)

  • Total amount + currency

  • Customer email (hashed for privacy-conscious sends to ad platforms)

  • Source (web, POS, draft order)

  • Status (pending / paid / fulfilled / cancelled)

  • UTM source/medium/campaign (from URL the customer landed on)

  • Created + updated timestamps

Used for: conversion attribution to ad campaigns, revenue rollups, ROAS calculation.

Refunds

Synced via refunds/create webhook:

  • Refund ID + linked order ID

  • Refund amount + currency

  • Refund reason (if entered)

  • Created timestamp

Effect: reduces attributed revenue for the associated campaign retroactively.

Sync mechanisms

Webhooks (real-time)

Webhooks are the primary mechanism. Shopify fires HTTP POSTs to Wevion's webhook URL when events occur:

  • Typical latency: 5-30 seconds

  • HMAC signed (verified by Wevion before processing)

  • Failed deliveries retried by Shopify with backoff

If Shopify can't reach Wevion (network issue, Wevion downtime), webhook eventually retried.

Polling (backup, 15 minutes)

Every 15 minutes, Wevion polls Shopify's REST API for: orders updated since last poll, products updated since last poll. Catches anything webhooks missed.

This is the same 15-min cadence Wevion uses for all integrations (consistency).

Manual CSV import

For historical bulk loads (e.g. importing 3 years of orders for backtesting):

  • apps/backend/src/services/shopify/shopify-csv-import.service.ts handles CSV → DB

  • Format: Shopify's standard order export CSV

  • Use case: onboarding new workspace with extensive history; one-off

Contact support to trigger manual CSV import for your workspace.

Initial sync timing

Store size

Initial sync time

< 100 products + 1k orders/year

2-5 min

500 products + 10k orders/year

10-20 min

5k products + 100k orders/year

30-60 min

50k+ products

1-3 hours

During initial sync the connector card shows Syncing badge. Once Synced, ongoing webhooks + 15-min polling take over.

How sync feeds ad platforms

Wevion's pixel + CAPI infrastructure uses Shopify orders for:

  • Meta CAPI: server-side Purchase events fired from Wevion using Shopify order data (see meta-105 Pixels and CAPI setup)

  • Google Conversions API: same model for Google Ads

  • TikTok Events API: same for TikTok

  • Snap Pixel (browser): for Snap Pixel deduplication

Deduplication via event_id matching ad-platform browser pixel events with Wevion's server-fired CAPI events.

UTM attribution

Wevion reads UTM parameters from the order's landing_site and referring_site fields:

  • utm_source → ad platform (Meta, Google, TikTok)

  • utm_medium → cpc, organic, etc.

  • utm_campaign → campaign ID (Wevion attempts to match to your campaigns via campaign_id stored as UTM)

  • utm_content → ad-level identifier

  • utm_term → keyword (Google)

For best attribution: use Wevion's auto-generated UTM templates in Campaign Creator. Manual UTM also respected.

Data freshness expectations

  • New order: visible in Wevion within 30 seconds via webhook, < 15 min via polling

  • Order update (e.g. fulfillment): same

  • Refund: same as order updates

  • Product update: synced within 15 min

  • Inventory change: synced within 15 min (no webhook for inventory in current setup)

Data ownership

  • Order data: stored in Wevion DB for analytics

  • Customer PII (email): hashed before sending to ad platforms; raw email retained for HubSpot sync (if connected) and audit

  • Retention: per-workspace per-plan (see acc-112 quota reference for full retention table)

  • Wevion does not sell, share, or analyze your customer data beyond what's needed for the analytics features you use

Currency

Wevion respects each Shopify store's currency. Cross-channel reports auto-convert via daily FX rate to workspace currency.

If your Shopify store changes currency (rare, requires Shopify support), Wevion detects on next sync.

What you'll see in Wevion analytics

  • Dashboard: total revenue attributed to ad campaigns (last N days)

  • Per-platform: Meta/Google/TikTok revenue breakdown

  • Per-campaign: revenue + ROAS per campaign

  • Product-level: top products from ad-driven traffic

  • Customer-level (with consent): repeat customer rate, LTV by campaign

Common questions

  • "Wevion shows N orders, Shopify shows N+1": timezone difference between Wevion's workspace TZ and Shopify's store TZ on day-boundary. Same orders, different cutoff.

  • "Refund didn't reduce revenue": refund webhook missed; force re-sync.

  • "Orders missing UTM": customer landed directly (no UTM URL). Wevion attributes via Meta CAPI / Google Conversion match-back if pixel was firing.

  • "Bundle products attributed wrong": Wevion splits bundles into individual line items based on Shopify's product breakdown. Verify product setup.

Related