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.tshandles CSV → DBFormat: 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 identifierutm_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
Connect Shopify — prerequisite
Shopify troubleshooting — sync issues
Set up Meta Pixels and Conversions API — CAPI deduplication with Shopify data