EmailEcommerceWooCommerceAutomationsHow to

Connect WooCommerce to email: orders, customers and instant updates

ProfilePilot Team | Oct 6, 2026 | 6 min read

Connect a WooCommerce store so orders start email automations within a minute, keep instant updates flowing with a real server cron, and see why an order did not start an email.

Connect the store

  1. In WordPress, open WooCommerce → Settings → Advanced → REST API and choose Add key.
  2. Give it a description such as "ProfilePilot email", pick a user with shop manager rights, and set Permissions to Read/Write.
  3. Copy the consumer key and consumer secret.
  4. In ProfilePilot, open Marketing → Email → Store connections, choose WooCommerce, paste your store URL, the key and the secret, and connect.

ProfilePilot reads customers and orders. The write permission is used only to add ProfilePilot's own webhooks (instant updates). It never changes your orders, products or customers. With a read-only key the store still syncs, but only once a day and when you choose Sync now.

What syncs, and when

  • Instant updates: WooCommerce sends ProfilePilot a webhook when an order or customer is created or updated. An order that is Processing, Completed or On hold starts automations that use the Order placed, First purchase or Purchased product triggers, usually within a minute.
  • Hourly checks when the store goes quiet: if no instant update has arrived for an hour, ProfilePilot pulls recent changes from the store every hour until updates start flowing again. The store card shows a note while this is happening.
  • Daily reconciliation: once a day ProfilePilot checks the store for anything missed and re-adds webhooks that were removed or disabled.
  • Sync now on the store card pulls changes straight away.

An order is only ever counted once. If a webhook arrives after an hourly check already picked the order up, nothing is sent twice.

Keep instant updates flowing: use a real server cron

WooCommerce delivers webhooks through WordPress's background task runner (WP-Cron and Action Scheduler). By default WP-Cron only runs when someone visits the site, and caching, performance or marketplace plugins can stop it running at all. When that happens WooCommerce queues the webhooks and does not send them, so orders reach ProfilePilot late (at the next hourly check).

To fix it, ask your developer or host to:

  1. Add this line to wp-config.php, above "That's all, stop editing": `define( 'DISABLE_WP_CRON', true );`
  2. Add a server cron job that runs every 5 minutes, for example: `*/5 * * * * curl -s https://your-store.example/wp-cron.php?doing_wp_cron > /dev/null 2>&1` (or `wp cron event run --due-now` with WP-CLI).
  3. Exclude wp-cron.php from page caching and security rules.

To check: in WordPress open WooCommerce → Status → Scheduled Actions → Pending and search for "webhook". A long list of pending webhook deliveries means background tasks are not running.

Why an order did not start an email

Open the automation and choose Enrollments (or Analytics). The Skipped panel lists the last 30 days of people the trigger reached but did not enroll, with a reason:

  • Not subscribed: the buyer has not agreed to marketing email.
  • Unsubscribed or on the suppression list: they opted out, bounced or complained.
  • No email address: the order had no usable email.
  • Already in this flow or Already went through: check "Can someone go through this more than once?" in the automation settings.
  • Flow was paused: turn the automation on.
  • Store automations need a paid plan: the Free plan can connect and sync a store, but store-triggered automations need a paid plan.
  • Example address: addresses at example.com and similar test domains never receive email.

Show the order in the email

In an email of an automation that starts on an order, use Insert personal field… → Order:

  • `{{order.number}}`, `{{order.date}}`, `{{order.total}}` (with the currency symbol), `{{order.status}}`
  • `{{order.items}}`: one line per item, such as "2 × Ceramic mug — R150.00"
  • `{{order.item_count}}`, `{{order.shipping_method}}`, `{{order.billing_first_name}}`, `{{store.name}}`

Add a fallback after a bar for anything that may be empty, for example `{{first_name|there}}`. Preview and Test Run fill these with a sample order.

Quick Tasks

  • ✓In WooCommerce, create a REST API key with Read/Write permission
  • ✓Open Marketing → Email → Store connections, choose WooCommerce and paste the store URL and key
  • ✓Make sure WP-Cron / Action Scheduler runs from a real server cron job
  • ✓Place a test order as a subscribed contact you own and check the automation’s Enrollments page
  • ✓If someone was not enrolled, read the reason under Skipped

Keep learning

See the latest guides, experiments, and rollouts.

Back to Resources
Connect WooCommerce to email: orders, customers and instant updates