Shopify orders sync — what gets imported
Shopify webhooks deliver orders/products/refunds in real time. 15-min polling backfills missed events. 180-day initial backfill.
Written By Salvatore Sinigaglia
Last updated About 4 hours ago
Shopify webhooks deliver orders/products/refunds in real time. 15-min polling backfills missed events. 180-day initial backfill.
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 180 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 → 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
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 only for audit purposes
- 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.
FAQ
How quickly do new Shopify orders appear in Wevion?
Within 30 seconds via webhook, and under 15 minutes via polling. Wevion subscribes to Shopify's orders/create webhook for real-time delivery, with a 15-minute polling fallback that backfills any missed events. Order updates and refunds follow the same freshness, and the initial sync backfills the last 180 days.
Why does Wevion show a different order count than Shopify Admin?
Usually a timezone difference on the day boundary — Wevion's workspace timezone and your Shopify store timezone use different daily cutoffs, so the same orders land in different days. If a refund didn't reduce revenue, its webhook was likely missed; force a re-sync to correct it.
How does Wevion attribute Shopify orders to ad campaigns?
Through UTM parameters read from the order's landing_site and referring_site fields — utm_source, utm_medium, utm_campaign, utm_content, and utm_term. For best results, use Wevion's auto-generated UTM templates in Campaign Creator. Orders without UTMs are attributed via Meta CAPI or Google conversion match-back if the pixel was firing.
Can I import historical Shopify orders beyond 180 days?
Yes, through manual CSV import. Wevion handles Shopify's standard order export CSV format for one-off historical bulk loads — such as importing years of orders for backtesting when onboarding a new workspace. Contact support to trigger a manual CSV import for your workspace.