Zapier Connector for WooCommerce links your store to Zapier in both directions. Store events reach your Zaps the moment they happen, and Zaps create or update store data in return. Everything that travels either way is recorded in a log you can read, filter and replay from your own admin.
Overview
↑ Back to topThe plugin does three things. It sends store events to Zapier: 74 triggers across orders, products, customers, coupons and notes, plus subscriptions, bookings and memberships when those extensions are active. It accepts inbound calls so Zaps can create and update store data. And it keeps an activity log of both directions, with automatic retries and one-click resends.
It pairs with a companion app on the Zapier platform. With that app, connecting is a matter of entering your store URL and an application password, and turning a Zap on subscribes it to your store automatically. A manual route using Zapier’s “Webhooks by Zapier” also works and is described below.
Requirements
↑ Back to top- WordPress 6.5 or higher
- PHP 7.4 or higher
- WooCommerce 9.0 or higher (tested up to 11.0.1)
- A Zapier account. The free plan is enough when you use the Zapier Connector app, because its triggers are not premium. The manual route relies on “Webhooks by Zapier”, which Zapier reserves for its paid plans.
- HTTPS on your store, because Zapier only delivers to and accepts secure URLs
Optional, detected automatically when present: WooCommerce Subscriptions, WooCommerce Bookings, WooCommerce Memberships.
There is no license key to enter and no account to connect. After activating the plugin, go to WooCommerce > Settings > Advanced > Zapier.
Usage
↑ Back to topAll settings live on one screen with four tabs: Triggers, Actions, Activity and Advanced.
Turning the connector on
↑ Back to topThe Enable Zapier Connector toggle at the top of the Triggers tab is a master switch. While it is off, no events are sent and no listeners run, but your feeds are kept exactly as they are. It is the setting to use when you want to pause every automation at once, for a migration or a bulk import, without dismantling anything.
Feeds
↑ Back to topA feed connects one store event to one Zap. Each feed has a name for your own benefit, a trigger, a Zapier webhook URL, and an active switch.
Feeds are created two ways.
Through the Zapier Connector app, which is the usual route. Build a Zap in Zapier, choose Zapier Connector for WooCommerce as the trigger app, connect your store, pick a trigger rule, and publish. The plugin creates the matching feed by itself, named “Zap (managed by Zapier)”. Turning the Zap off again removes it. If the settings screen is already open when you publish, press Refresh beside “Add feed” to pick the new feed up without reloading the page.
By hand, if you prefer the Webhooks by Zapier route. Create a Zap with the “Webhooks by Zapier” trigger and the “Catch Hook” event, copy the URL Zapier shows you, then press Add feed here, choose a trigger, and paste the URL. Press Send sample so Zapier receives a real payload and can offer you real fields to map in its editor.
The trigger list is grouped by resource. Orders offer created, updated, paid, deleted, restored, a status-changed trigger for any status, and one trigger per status registered on your store, including statuses added by other plugins. Products offer the same lifecycle events plus stock low and stock status changes, again with one trigger per status. Customers, coupons and order notes complete the standard set.
Connecting Zapier to your store
↑ Back to topThe Zapier Connector app asks for three things:
- Store URL, for example
https://example.com, with no trailing slash and no/wp-admin - WordPress username of a user allowed to manage WooCommerce
- Application password, created in WordPress under Users > Profile > Application Passwords
An application password is not your login password. It is a separate credential, scoped to one connection and revocable at any time from the same screen, which is why it is the right thing to hand to an outside service.
The connection test tells you precisely what is wrong when it fails: credentials rejected, plugin not installed, or plugin installed but disabled.
Actions: letting Zaps write to your store
↑ Back to topThe Actions tab lists the endpoints Zapier calls to act on your store. With the Zapier Connector app, these appear as ready-made actions in the Zap editor: create and update customers, coupons, products, orders, subscriptions and user memberships, add order and subscription notes, and find records by email, SKU, coupon code, order number, customer or plan slug.
Field names are the WooCommerce REST API’s own, so anything the API accepts, an action accepts. Each action offers a curated set of common fields plus an Additional Fields entry that takes any other REST field as key and value; a value that looks like JSON is decoded, so nested structures such as a billing address survive the trip.
Every inbound call is recorded on the Activity tab, marked “inbound”, so automation running against your store is as auditable as automation running from it.
Activity: what actually happened
↑ Back to topThe Activity tab lists every outbound delivery and every inbound action, newest first, with the event, the object it concerned, the HTTP status the other side returned, and how long the call took. A status filter narrows the list to successes or failures.
Resend replays a delivery with the payload exactly as it was originally sent, which is what you want after fixing a broken Zap: the event is re-delivered as it happened, not as the object looks now.
Failures retry on their own, after 5 minutes, then 30 minutes, then 2 hours. A response that cannot succeed on a retry, such as a rejected payload, is not retried. Each attempt is a separate row, numbered, so a delivery that failed twice before succeeding tells its whole story.
Rows are kept for 90 days and cleaned up daily.
When a feed keeps failing
↑ Back to topA feed whose deliveries exhaust their retries five times in a row deactivates itself and writes a line in the activity log saying so. This happens when a Zap has been deleted or turned off on Zapier’s side while its feed remains here: without this, the store would keep calling a dead URL forever.
To recover, check the Zap still exists, then switch the feed back on with its Active toggle. A single successful delivery resets the counter.
Coming from another Zapier extension
↑ Back to topIf your store already sends events to Zapier through another extension, the Advanced tab shows an Import section listing the WooCommerce webhooks it created.
Importing recreates each one as a feed aimed at the same Zapier URL. Your existing Zaps keep receiving events with nothing to change on Zapier’s side. The original webhooks are disabled at the same time, so nothing is delivered twice while both plugins are installed.
Two things to know. Webhooks whose event has no equivalent here are listed with the reason and skipped rather than imported silently. And Zaps triggered on subscriptions deserve a check afterwards: the previous extension delivered subscriptions in an older payload format, so a mapped field may sit under a different name.
Debug mode
↑ Back to topOn the Advanced tab, Debug mode writes delivery details to WooCommerce > Status > Logs under the zapier-connector source. Leave it off in normal use; turn it on when you are investigating something with support.
WooCommerce > Status also carries a Zapier Connector section reporting the version, the master switch, active and total feeds, delivery counts and the resources detected. It is made to be pasted into a support conversation.
Use cases
↑ Back to topEvery paid order in a spreadsheet and a team channel
↑ Back to topCreate a Zap on the order paid trigger, with two actions: append a row to a spreadsheet and post to your team channel. Publish it; the feed appears here by itself. Every checkout now lands in both places within seconds, and the Activity tab tells you it did.
Chase failed subscription renewals before the customer notices
↑ Back to topWith WooCommerce Subscriptions active, use the subscription renewal failed trigger to create a task in your CRM and alert whoever handles billing. Because the payload is the subscription as your store’s REST API describes it, the customer, the amount and the next payment date are all available to map.
Restock alerts that reach the right person
↑ Back to topSet a low stock amount on the products that matter, then build a Zap on the product stock low trigger. Send it wherever your buying happens: a channel, a task board, an email to your supplier. Note that the trigger needs stock management enabled on the product and a low stock amount set; without both, WooCommerce never raises the event.
Reward a customer automatically
↑ Back to topAutomation in the other direction. When a form is submitted, or a customer reaches a milestone in your CRM, have the Zap call the create coupon action with a code built from their name. The coupon exists on your store seconds later, and the call is logged on the Activity tab.
Keep a fulfilment system and your orders in step
↑ Back to topWhen your warehouse marks a parcel as shipped, have the Zap update the order status and add an order note. Set the note to be visible to the customer and WooCommerce emails it, exactly as it would for a note written by hand on the order screen.
FAQ
↑ Back to topDo I need a paid Zapier plan?
↑ Back to topNo, if you use the Zapier Connector app: its triggers work on Zapier’s free plan, subject to that plan’s usual task quota. The manual route uses “Webhooks by Zapier”, which Zapier reserves for its paid plans.
How fast is “real time”?
↑ Back to topThe event is queued the instant it happens and delivered by the WooCommerce queue, normally within seconds. There is no polling interval to wait for.
Will this slow down my checkout?
↑ Back to topNo. Deliveries run asynchronously, off the customer’s request. A slow or unreachable Zap cannot slow a sale.
A Zap did not run. Where do I look?
↑ Back to topThe Activity tab, filtered on Failed. If the delivery is there with an error status, the event fired and the problem is on the receiving side; the HTTP status and message say which. If the delivery is not there at all, either the master switch is off, or no active feed matches that trigger, or the feed paused itself after repeated failures, which is written in the log as its own line.
I created a Zap but no feed appeared here.
↑ Back to topThe feed is created when the Zap is turned on, not while it is a draft. If it is published and the screen still looks unchanged, press Refresh beside “Add feed”: the settings screen does not poll.
Can I use my custom order statuses?
↑ Back to topYes. The trigger list is read from your store when you open it, so a status registered by another plugin appears as its own trigger, named after that status.
I already use another Zapier extension. Do I have to rebuild my Zaps?
↑ Back to topUsually not. See “Coming from another Zapier extension” above: the importer points feeds at the same Zapier URLs your webhooks already use, so your Zaps keep running untouched.
Does it work with HPOS and the block checkout?
↑ Back to topYes, both are declared compatible and tested.
What happens if I deactivate the plugin?
↑ Back to topScheduled deliveries are cancelled and nothing further is sent. Feeds, settings and history are kept, so reactivating resumes where you left off.
Does it work on a multisite network?
↑ Back to topYes. Each site keeps its own feeds, settings and delivery history. Activating across a network creates the necessary table on every site, and a site created later gets one too.
Which data leaves my store?
↑ Back to topOnly what the trigger you chose carries: the object as your store’s REST API represents it, sent to the URL of the Zap you built. Nothing is sent anywhere else, and nothing is sent at all while the master switch is off.
Developer documentation
↑ Back to topREST API
↑ Back to topThe plugin registers two groups of routes under the zapier-connector/v1 namespace. All require the manage_woocommerce capability and authenticate as a normal WordPress user, in practice through an application password.
Consumed by the settings screen:
| Route | Method | Purpose |
|---|---|---|
/settings | GET, POST | Read and write settings and feeds |
/triggers | GET | Trigger list grouped by resource |
/history | GET | Activity log, paginated and filterable |
/history/{id}/resend | POST | Replay one delivery |
/import | GET, POST | Preview and run the webhook import |
/test-feed | POST | Send a sample payload to a URL |
Consumed by Zapier:
| Route | Method | Purpose |
|---|---|---|
/ping | GET | Connection test; reports version and master switch |
/hooks | POST | Subscribe: creates a managed feed |
/hooks/{id} | DELETE | Unsubscribe: removes it. Idempotent |
/samples | GET | Recent real payloads for a trigger |
/hook-triggers | GET | Trigger list for dynamic dropdowns |
/actions/{resource} | POST | Create an object |
/actions/{resource}/{id} | PUT, PATCH | Update an object |
/actions/{resource}/find | GET | Find one object |
{resource} is one of order, product, customer, coupon, order_note, and, when the matching extension is active, subscription, subscription_note, booking, user_membership, membership_plan. Note routes take their parent in the body as order_id, subscription_id or parent_id.
Filters
↑ Back to topzapier_connector_resources
Add or remove resources, and with them their triggers and actions. A resource extends ZAPC_Resource and declares its triggers as data.
add_filter( 'zapier_connector_resources', function ( $resources ) {
$resources[] = new My_Custom_Resource();
return $resources;
} );
zapier_connector_max_consecutive_failures
How many exhausted deliveries in a row deactivate a feed. Default 5.
add_filter( 'zapier_connector_max_consecutive_failures', function () {
return 10;
} );
zapier_connector_history_retention_days
How many days of activity are kept before the daily cleanup removes them. Default 90.
add_filter( 'zapier_connector_history_retention_days', function () {
return 365;
} );
Scheduled actions
↑ Back to topDeliveries run through the WooCommerce queue (Action Scheduler) in the zapier-connector group, on the zapier_connector_deliver hook. Retries are scheduled as single actions on the same hook. The daily cleanup runs on zapier_connector_history_cleanup.
Queued jobs are visible under WooCommerce > Status > Scheduled Actions, filtered on that group.
Database
↑ Back to topOne custom table, {prefix}zapc_history, one row per delivery attempt and per inbound action. Columns cover the date, direction, feed, trigger, resource, object, target URL, status, HTTP status, message, attempt number, duration and payload. Payloads are capped at 64 KB, because the log is a diagnostic and not an archive.
Settings live in a single option, zapc_settings, holding the master switch, the feed list and debug mode.
Logging
↑ Back to topWith debug mode on, the plugin writes to the WooCommerce logger under the source zapier-connector, readable at WooCommerce > Status > Logs.
MCP tools (WordPress Abilities API)
↑ Back to topNine abilities are registered under the zapier-connector namespace, discoverable through wp_get_abilities() by any MCP connector. Each requires manage_woocommerce. The plugin registers the abilities only; it does not implement an MCP server.
| Ability | Reads or writes |
|---|---|
zapier-connector/get-settings | Read. Webhook URLs are truncated, since holding one lets anyone post into the Zap |
zapier-connector/list-triggers | Read |
zapier-connector/list-activity | Read |
zapier-connector/create-feed | Write |
zapier-connector/update-feed | Write |
zapier-connector/delete-feed | Write, destructive |
zapier-connector/send-sample | Write, sends a delivery |
zapier-connector/resend-delivery | Write, sends a delivery |
zapier-connector/update-settings | Write |