Premium Integrations
How to Post a Slack Message When a WooCommerce Product Is Purchased
Want your team to see new sales land in Slack in real time instead of checking the WooCommerce orders screen? Zapify does this with the free A product is purchased trigger and the Send a Slack message action. Slack is a Zapify PRO integration.
What this automation does
The automation is one trigger plus one action:
- Trigger: A product is purchased (
WC_PRODUCT_PURCHASED, WooCommerce) - Action: Send a Slack message (
SLACK_SEND_MESSAGE, Slack)
When an order containing the product you choose reaches a paid status, Zapify posts a message to the Slack channel you specify.
PRO feature
Slack is a Zapify PRO integration and needs a Connection under Settings → Connections. The WooCommerce trigger itself is free.
Before you start
- WooCommerce installed and active.
- A Slack app for your workspace with a bot user OAuth token (starts
xoxb-), created under OAuth & Permissions in your Slack app's settings — see Slack's authentication basics if you're setting one up for the first time. The bot needs thechat:writescope. - The bot invited into the channel you want it to post to — Slack won't let it post to a channel it isn't a member of.
How to build the automation
Step 1: Connect Slack
- Go to Settings → Connections and click Add New.

- Choose Slack, paste in the bot user OAuth token, and name the connection something like Sales Slack.

- Save.
See Connections for how this screen works generally.
Step 2: Create a new automation
- In the WordPress admin, go to Zapify → Automations.
- Click Add New to open the builder.
- Name it clearly, such as Announce new sales in Slack.

Step 3: Add the "A product is purchased" trigger
- Click Add Trigger.

- Choose WooCommerce as the app.

- Select A product is purchased.

- Leave the Product field as Any to hear about every sale, or pick a specific product to only announce that one.
Step 4: Add the "Send a Slack message" action
- Click Add Action.

- Choose Slack as the app, and select Send a Slack message.

Step 5: Configure the action
| Field | Required | What it does |
|---|---|---|
| Connection | Yes | The Slack connection you set up in Step 1. |
| Channel | Yes | A channel name (#sales) or ID. The bot must already be a member. |
| Message | Yes | The text to post. Insert order tokens to include the product and amount. |
| Post as | No | Overrides the bot's display name for this message. Leave empty to use the bot's own name. |
For example:
- Channel:
#sales - Message:
New sale: {{trigger:PRODUCT_NAMES}} — {{trigger:ORDER_TOTAL}} {{trigger:CURRENCY}}
Step 6: Set the steps Live and save
- Set both the trigger and the action to Live.
- Click Save.

Step 7: Test it
Place a test order and mark it as paid. Check the Slack channel for the message, or open Zapify → Logs — a failed post shows Slack's own error code, such as channel_not_found or not_in_channel.
Tokens you can use
The A product is purchased trigger exposes these tokens for the Message field:
| Token | Value |
|---|---|
| Product IDs / Product names | The purchased products |
| Order ID / Order number | Order identifiers |
| Order total / Currency | Order value and currency |
| Billing email / first name / last name | Customer details |
Conclusion
With the free A product is purchased trigger and the Send a Slack message action, Zapify puts new sales in front of your team the moment they happen. Log the same events to a spreadsheet with add a row to a Google Sheet, or create a fulfilment task with create a ClickUp task.
FAQs
Is this free in Zapify?
The trigger is free. Send a Slack message is part of the Slack PRO integration and needs an active Zapify PRO licence and a Connection.
The action reports success but nothing appeared in Slack. Why?
Slack answers with an HTTP 200 even when it refuses a message — a wrong or unauthorised channel comes back as {"ok":false,"error":"channel_not_found"}, still with a 200 status. Zapify reads Slack's own response and reports the real error in Zapify → Logs, so check there rather than assuming a 200-looking result means the message posted.
Why does the action need a bot token instead of a webhook URL?
An incoming webhook is bound to a single channel when it's created, so posting to different channels from different automations would mean a separate webhook — and connection — for each. A bot token lets one connection post to any channel it's a member of.
The action fails with "not_in_channel" or similar. What do I do?
Invite the bot into that channel from Slack itself — a bot can only post to channels it has actually joined.
Can I override which name the message posts under?
Yes, using the Post as field. Leave it empty to post under the bot's own configured name.
Do I need to write any code?
No. The connection and every field are configured visually — the bot token is the only thing you copy from Slack.