WooCommerce sync explained

WooCommerce sync: order polling every 15 min, product refresh every 12 h, optional real-time webhooks. CDM normalizes customer fields across themes.

Written By Salvatore Sinigaglia

Last updated About 4 hours ago

WooCommerce sync: order polling every 15 min, product refresh every 12 h, optional real-time webhooks. CDM normalizes customer fields across themes.

WooCommerce sync explained

WooCommerce data syncs to Wevion via REST API polling (orders every 15 minutes, product refresh every 12 hours) + optional real-time webhooks. The Customer Data Model (CDM) normalizes customer fields across WooCommerce installations that use different themes / plugins. A webhook-health check runs every 24 hours to detect delivery issues.

Who is this for

Mediabuyers running WooCommerce stores trying to understand:

  • When data appears in Wevion
  • Why some custom fields are/aren't synced
  • How conversion attribution from WooCommerce works

Data synced from WooCommerce

Products

  • Product ID, name, slug, description
  • Type (simple, variable, grouped, external)
  • Variants (for variable products): size, color, SKU per variation
  • Regular + sale price per variant
  • Stock quantity per variant
  • Categories + tags
  • Images (URLs)
  • Updated timestamp

Visible at /catalogs after sync.

Orders

  • Order ID + number
  • Status (pending, processing, on-hold, completed, cancelled, refunded, failed)
  • Line items (product + variation + quantity + price)
  • Totals: subtotal, tax, shipping, discount, total
  • Currency
  • Customer email + name
  • Billing + shipping address (city, country)
  • Created + completed timestamps
  • Customer notes
  • UTM parameters (from _wc_order_attribution if WooCommerce Order Attribution plugin enabled, else captured via Wevion's pixel/CAPI)

Customers

  • Customer ID + email
  • Name + billing address
  • Order count + lifetime value
  • Created date
  • Custom fields (via CDM — see below)

Refunds

  • Refund ID + parent order ID
  • Refunded amount
  • Reason (if provided)
  • Created timestamp

Sync mechanisms

REST API polling (primary)

Order polling runs every 15 minutes and product refresh every 12 hours (apps/backend/src/cron/woocommerce-crons.ts):

  • Pulls orders updated since last sync (every 15 min)
  • Refreshes products (every 12 h)
  • Fetches refunds when an order indicates refund activity

Uses WooCommerce REST API standard endpoints + Basic Auth header.

Webhooks (real-time, optional)

If webhooks configured in WP Admin (com-104 step 6):

  • New events delivered within seconds
  • WooCommerce signs payloads with secret (HMAC-SHA256)
  • Wevion verifies signature before processing
  • Failed deliveries retried by WooCommerce per its config (configurable in WP)

With webhooks + polling combination, you get real-time freshness + missed-event recovery.

Customer Data Model (CDM)

woocommerce-cdm.service.ts normalizes customer fields across diverse WooCommerce installations. WooCommerce stores have varied schemas:

  • Default wp_users + wc_customer_lookup tables
  • Custom fields added by themes (Storefront, Astra, Divi, etc.)
  • Plugin-added fields (WooCommerce Subscriptions, Memberships, B2B, etc.)
  • Custom registration forms

CDM extracts:

  • Standard fields (email, name, billing/shipping address, phone)
  • Common custom fields (newsletter opt-in, account type, B2B flags)
  • Last order details

Output: a normalized customer record Wevion can use consistently across stores.

Connection health monitoring

woocommerce-connection-health.service.ts runs as part of the WooCommerce crons (order polling 15 min, product refresh 12 h, webhook health 24 h — apps/backend/src/cron/woocommerce-crons.ts):

CheckWhat it testsFailure means
Site reachableHTTP GET to REST API root returns 200Site down or DNS issue
REST API enabledStandard endpoints return JSONPermalinks disabled or REST API plugin broken
Credentials validAuthenticated test call succeedsConsumer key/secret rotated or revoked
WooCommerce activeWC endpoint returns expected schemaPlugin deactivated or downgraded

If a check fails, the failure reason is available on the connector card. Automatic email/Telegram notification of a health failure is not yet implemented (a TODO in the current code) — check the connector card.

Sync frequency in practice

EventWhen Wevion sees it
New order via webhook< 1 minute
New order without webhook< 15 min (polling)
Order status updateSame as new order
RefundSame
Product update< 12 h (product refresh cron; webhooks deliver sooner if configured)
Customer registration< 15 min

Conversion attribution

When a customer places an order:

  1. Customer landed via UTM-tagged URL (e.g. ?utm_source=facebook&utm_campaign=summer_sale_2026)
  2. WooCommerce stores UTM in order metadata (if Order Attribution plugin enabled)
  3. Wevion's pixel/CAPI also tracks the conversion event with same UTM
  4. On sync, Wevion correlates order to ad campaign via UTM match
  5. Revenue attributed to the campaign in Wevion analytics
  6. Deduplicated against pixel events using event_id

For best attribution: enable WooCommerce Order Attribution plugin (free, official) OR use Wevion's pixel/CAPI for browser-side capture.

Initial sync timing

Store sizeInitial sync
< 100 products + 1k orders5-10 min
500 products + 10k orders20-40 min
5k+ products + 50k+ orders1-3 hours

Performance depends on:

  • Your WordPress server speed
  • Wevion's API call rate (configured to avoid hammering your server)
  • Network latency

Manual force-sync

If you need fresh data RIGHT NOW (e.g. demo for client):

  • /connect/woocommerce → store detail → Force sync button
  • Triggers immediate full sync (not just incremental)
  • Use sparingly — heavy on your WordPress server

Performance considerations for your WordPress server

Wevion's polling makes 5-20 REST API calls per 15-min cycle (depending on store size). Each call typically < 1 second. Negligible load for most stores. For very busy stores (10k+ orders/day):

  • Wevion auto-throttles to avoid spikes
  • Consider using webhooks (less load than polling)
  • Monitor your server via WP plugin (e.g. Query Monitor) if concerned

What you'll see in Wevion

After healthy sync:

  • Dashboard shows WooCommerce revenue attributed to campaigns
  • /catalogs shows product catalog
  • Per-store, per-campaign, per-product breakdowns
  • Health badge: green Healthy

Common questions

  • "Custom fields not synced": CDM covers common fields. For specific custom fields, contact support for mapping setup.
  • "Subscription orders showing wrong total": WooCommerce Subscriptions stores differently. Wevion respects WC's reported total; check if WC plugin is set up correctly.
  • "Variable products showing only parent": variations are pulled separately. Check /catalogs → product detail → variations tab.
  • "Order status 'On hold' missing from reports": by default Wevion includes only Completed + Processing orders in revenue. Configurable per workspace — contact support.

FAQ

How often does WooCommerce data sync to Wevion?

Wevion polls the WooCommerce REST API every 15 minutes for orders (product refresh runs every 12 hours), and you can add optional real-time webhooks for instant events. With webhooks configured, a new order appears in under a minute; without them, it appears within 15 minutes via polling. A webhook-health check runs every 24 hours to detect delivery issues.

What is the Customer Data Model (CDM) in WooCommerce sync?

The CDM is Wevion's normalizer that unifies customer fields across WooCommerce installations using different themes and plugins. Because stores have varied schemas — default tables, theme-added fields like Storefront or Astra, and plugin fields from Subscriptions or B2B — the CDM extracts standard fields, common custom fields, and last-order details into one consistent customer record Wevion uses across stores.

How does Wevion attribute WooCommerce orders to my ad campaigns?

When a customer lands via a UTM-tagged URL and places an order, WooCommerce stores the UTM in order metadata (with the Order Attribution plugin), and Wevion's pixel/CAPI tracks the same event. On sync, Wevion correlates the order to the ad campaign via UTM match, attributes revenue in analytics, and deduplicates against pixel events using event_id.

Which WooCommerce order statuses count toward revenue in Wevion?

By default, Wevion includes only Completed and Processing orders in revenue reporting. Other statuses like On hold are excluded from revenue by default. This behavior is configurable per workspace — contact support if you need statuses such as On hold included. Refunds propagate on sync, reducing attributed revenue accordingly.

Can I force an immediate WooCommerce sync in Wevion?

Yes. Go to /connect/woocommerce, open the store detail, and click Force sync to trigger an immediate full sync rather than the usual incremental one — useful before a client demo. Use it sparingly, since a full sync is heavier on your WordPress server. Regular polling every 15 minutes already keeps data fresh.

Steps

  1. Customer landed via UTM-tagged URL (e.g. ?utmsource=facebook&utmcampaign=summersale2026)
  2. WooCommerce stores UTM in order metadata (if Order Attribution plugin enabled)
  3. Wevion's pixel/CAPI also tracks the conversion event with same UTM
  4. On sync, Wevion correlates order to ad campaign via UTM match
  5. Revenue attributed to the campaign in Wevion analytics
  6. Deduplicated against pixel events using event_id

Last updated: 2026-05-17