Connect a WooCommerce store with the Senderz Marketing plugin in one approval, then sync customers, orders, products, checkout consent and on-site activity.
WooCommerce runs on WordPress, and Senderz connects it with a single plugin called Senderz Marketing. Installing that plugin and approving it once wires up both halves of the connection: the store API that syncs your customers, orders and products, and the on-site features that show popups, capture forms, collect checkout consent and track shopper activity.
Running WordPress without a shop? The same plugin covers you, and the setup is shorter. See
WordPress. This page is for sites where WooCommerce is active.
Fully working. The guided connect, WooCommerce REST key provisioning, customer sync
including guest buyers, two years of order history, live order and customer webhooks, product
catalog sync, checkout marketing consent, on-site popups, web push, product
and cart tracking, back-in-stock requests, registered-user sync, and form capture from seven
popular form plugins.Partial. The WhatsApp checkout box renders and records the tick, but only reaches the
contact’s WhatsApp subscription through the daily customer sync, and only for a shopper who has
an account on the site. See Checkout marketing consent.Known limits. The checkout consent box appears on the classic checkout shortcode only.
The WooCommerce block checkout is not supported yet. Per-variation SKUs are not imported, so a
variable product syncs at the product level. The Cart and checkout activity setting only
reports a shopper who has signed in or typed an email address at the checkout.
Nothing leaves your site before you connect it. On a fresh install the plugin makes no
outbound request of any kind: no storefront script, no tracking beacon, no version ping. Every
outbound behaviour is gated on the connection you approve.
If you were running the older Senderz for WooCommerce plugin, install this one over it. Your existing settings carry across and the old plugin is deactivated automatically. Then press Connect to Senderz so the site is linked to your workspace directly.
A WordPress administrator account that can install plugins and manage WooCommerce.
A Senderz account where you are the owner or an admin of the workspace. Viewers, editors and designers cannot connect a store.
A public HTTPS site address, for example https://shop.example.com. Senderz refuses private, loopback and local network addresses during the guided connect. A staging or LAN site must use manual setup instead.
Pretty permalinks under Settings → Permalinks. Do not use the Plain option, or the WooCommerce REST API will not answer.
The WooCommerce REST API reachable and not blocked by a firewall, maintenance mode, security plugin or HTTP basic authentication.
In WordPress go to Plugins, then Add New, search for Senderz Marketing, and
install and activate it. WordPress opens the Senderz screen straight after activation.
2
Open the Senderz screen
With WooCommerce active the plugin lives under Marketing → Senderz Marketing. On a site
with no WooCommerce it is its own top-level Senderz Marketing menu item. The old
Settings → Senderz link still works if you have it bookmarked.
3
Press Connect to Senderz
You are taken to Senderz to approve the request. Sign in if you are not already.
4
Approve the workspace
The approval screen names your site and the workspace it will join, and lists what the site
is allowed to do. Check the workspace is the right one, then press Connect site. If it is
wrong, switch workspace first and start again.
5
Both halves connect
You land back in WordPress showing Connected. Because the plugin is running as a logged-in
administrator, it creates its own WooCommerce REST key at this point and hands it to Senderz,
so you never generate or paste a key. The key appears in WooCommerce → Settings → Advanced →
REST API with the description Senderz.
Back in Senderz, open Integrations from the left sidebar. You will see one tile called WooCommerce & WordPress with two rows on it, Store data and Website features. Both should read connected. Open the tile to reach the detail page, which shows the same two rows under Complete your WooCommerce setup.
The tile deliberately covers both halves, because they are one site. The badge follows the worse
of the two, so a tile reading Setup incomplete or Needs attention means one half needs
work even though the other is fine.
Both rows on the detail page have their own action, and using one never disturbs the other.
Website features disconnected. Install and activate Senderz Marketing, then press Connect to Senderz on its Connection tab.
Store data disconnected. The plugin retries the key creation on the next WordPress admin page load, so open any admin page first. If it still does not connect, use one of the alternative routes below.
On the detail page press Connect store data, enter your public store URL and choose
Connect with WooCommerce. Your store shows WooCommerce’s own access screen, you approve
it, and WooCommerce returns the keys to Senderz directly. Nothing is copied by hand. This
route needs HTTPS and pretty permalinks, and it opens a browser popup, so allow popups for
Senderz before you start.
Enter API keys manually
In WooCommerce → Settings → Advanced → REST API, choose Add key. Give it a description
such as Senderz, pick an administrator as the user, set permissions to Read/Write, and
generate it. Copy the ck_ consumer key and cs_ consumer secret into Senderz using Enter
API keys manually in the connect dialog. WooCommerce shows the full secret only once.
Manual plugin setup for an unreachable site
A staging, local or firewalled site cannot complete the guided approval, because Senderz has
to reach it back over public HTTPS. On the plugin’s Connection tab use Manual setup: paste
your Workspace ID from Settings → Workspace in Senderz, and an API key created under
Settings → API Tokens, then press Save and verify.
Never email a consumer secret or paste it into a support ticket. If one is exposed or lost,
revoke that key in WooCommerce, create a new one, and reconnect Senderz.
This trips people up, so it is worth stating plainly. Almost everything is configured in Senderz, and the plugin’s WordPress screens mostly show you what is set.
Setting
Where you change it
The checkout consent box, its wording, and the list it joins
Senderz, Marketing consent card
Cart and checkout activity tracking
Senderz, Site activity card
Back-in-stock requests and their labels
Senderz, Site activity card
Registered-user sync and the registration opt-in
Senderz, Site activity card
The list every synced customer joins
Senderz, Customer sync list card
Which forms are captured and which field is the email, phone or name
WordPress, Senderz Marketing → Forms
Site address override, for example www versus non-www
WordPress, Senderz Marketing → Advanced
The plugin’s Store and Users tabs are read-only mirrors with a Manage in Senderz link. A change you make in Senderz reaches the site within about five minutes while someone is in the WordPress admin, and otherwise on the plugin’s hourly refresh.
Every optional feature starts switched off. Checkout marketing consent, cart and checkout
tracking, back-in-stock requests and registered-user
sync are all off until you turn them on. Connecting the store does not silently start collecting
anything.
Existing customers import on connect. Senderz reads both WooCommerce’s own customer list and
WooCommerce Analytics, then merges them, so guest buyers who never created an account are
included. On an older or restricted store where Analytics is unavailable, Senderz falls back
to registered customers only, and new guest buyers are picked up afterwards from live order
activity.
2
Order history
Up to two years of order history back-fills, capped at 25,000 orders. Historical
orders land with their real order dates, so lifetime value, repeat-purchase and dormancy
windows are correct from day one. They deliberately do not trigger automations or fire
outbound webhooks, so a two-year-old order can never set off an abandoned-cart email.
3
Live orders and customers
Senderz creates four WooCommerce webhooks on connect, for customer created, customer updated,
order created and order updated. Reconnecting does not duplicate them, and Sync now checks
they are still in place.
4
Product catalog
Products, prices, images, SKUs and categories import and refresh hourly, so
product-aware campaigns, coupons and storefront features use current data. Per-variation
SKUs are not imported yet, so a variable product syncs at the product level.
5
Ongoing re-sync
Connected stores re-sync customers automatically once a day. You can also force one at any
time with Sync now on the tile, or Re-import on the Historical data card after a
long disconnection.
The plugin also sends paid orders to Senderz over its own connection, separately from the
WooCommerce webhooks. It watches for orders reaching processing and completed, queues
them locally, and retries if the send fails. On first run it works back through up to two years
and 25,000 paid orders. Both paths carry the same order identity, so an order that arrives twice
is counted once. This is why order data can still flow on a store whose native webhooks were
never created successfully.
WooCommerce order status decides which event Senderz records.
WooCommerce status
Senderz event
pending, on-hold, failed
Checkout started
processing
Order placed
completed
Order fulfilled
cancelled
Order cancelled
refunded
Order refunded
checkout-draft, draft, trash
Nothing is recorded
An order that is created already in completed is recorded as an order placed, so stores that auto-complete every order still report revenue.
Mapping unpaid statuses to a started checkout is what makes abandonment recovery work with
Israeli external payment pages such as Grow, Cardcom and PayPlus, where the shopper leaves your
site to pay and the order sits unpaid until they come back.
Every checkout-started event carries the exact pay for this order link for that order, so an abandoned-checkout automation can drop the shopper straight back into paying. The plugin supplies the precise link, which matters if you use a custom or translated checkout page slug. Use {{recoveryUrl}} in the message.You can override the status mapping for your workspace if your store uses custom statuses. Contact support to set that up.
The plugin adds one unticked consent box to the classic checkout, covering email, SMS and WhatsApp together. Turn it on in Senderz under the Marketing consent card on the integration detail page.
I have my own checkbox renders nothing and reads the box your checkout already has, so a
shopper is never asked the same question twice. It is the default because most stores already
have one, and it collects nothing until you give us that box’s field name below. Use our
checkbox renders the box described here instead.
Your own wording. One tick opts the shopper in to email, SMS and WhatsApp, so name every channel
it covers. Leave it blank to use the translated Senderz default. The text sits beside the
checkbox, not inside it.
Files a consenting shopper into a specific Senderz list. Joining a list is not itself consent, so
what you may send is still decided by the shopper’s own opt-in.
A pre-ticked box is not explicit consent under Israeli law, which expects the shopper to act.
Leave Ticked by default off unless you have taken your own legal advice. A shopper who leaves
the box unticked is still recorded as a contact but is never sent marketing, and Senderz will not
let a checkout withdraw consent a shopper gave somewhere else, so an unticked box never
unsubscribes anyone.
One tick subscribes the shopper on every channel it can reach: email needs an email address, SMS
and WhatsApp need a phone number. A channel with no address for that shopper is skipped rather
than recorded, so consent is never stored against a contact we cannot message.
WooCommerce core has no standard marketing-consent field on a customer. On import Senderz looks for consent metadata written by Senderz itself, by Mailchimp for WooCommerce, and by other common opt-in plugins, per channel. Where there is no recognised positive signal, the customer imports not subscribed and sending still gates on consent. Imports only ever add consent, never remove it.If your store records consent under an unusual key, support can point Senderz at it for your workspace without a plugin change.
Once the site is connected, the plugin loads the Senderz storefront runtime on your pages. It is enqueued through WordPress’s normal script API, and the plugin marks it as do-not-optimise for the common caching and minifying plugins.
Popups and forms
Every popup you publish appears without touching your theme again.
Web push
The plugin serves the service worker browser push needs, from your own domain.
Popups can apply a won discount straight to the shopper’s cart, because the plugin supplies the security token WooCommerce requires for that. See Installing popups on your store for the full install and test walkthrough.
Two things record shopper behaviour, and they behave differently. It is worth knowing which is which when you are checking whether something works.
Storefront runtime
Cart and checkout activity
On as soon as the site is connected. In the browser it reads the product structured data your
theme already publishes to record product viewed, watches cart requests to work out
product added to cart and product removed from cart, and recognises your cart and
checkout pages for cart viewed and checkout started.Activity from a visitor Senderz cannot yet name is held rather than recorded. The moment they
identify themselves, usually by subscribing through a popup, the held activity is attached to
their contact.
Off until you turn it on in the Site activity card. Your site sends add to cart, remove
from cart and quantity changes to Senderz directly, along with the shopper’s email address,
which makes it the reliable path for a known shopper.It only fires for a shopper who has signed in or typed an email address at the checkout.
Nothing is sent for anyone else. The address is held in your site’s own WooCommerce session,
never in a cookie a third-party script could read.
The first cart reading is a baseline, not activity. Anything already in the basket when the
page loads was added on an earlier visit, so it is never reported as if it just happened. Only
changes after that produce events.
Both feed the Added to cart and Checkout started automation triggers, and the product timeline on each contact.
Turn on Back in stock requests to show a request form on out-of-stock products. Simple products only. You can set the button label and the marketing opt-in label.The request carries its own unticked marketing opt-in. A shopper who leaves it unticked is still recorded against that product so you can see the demand, but Senderz only sends marketing to people who have opted in, so the back-in-stock message reaches those who ticked it.When the product comes back in stock the request reaches Senderz as a custom event named wordpress.back_in_stock. Use that exact name when building an automation from it.
Turn on Sync registered users to send everyone who registers on your site to Senderz as a contact. Leave it off and only people who place an order become contacts.Turn off Create contacts for guest orders if you do not want an order placed without an account to create one. The order still counts towards revenue and reporting either way; with it off, a guest order that matches a shopper you already know still updates that contact, so turning it off never hides someone Senderz has already met.
Accounts arrive subscribed to nothing. Creating an account is not marketing consent. Only a
shopper who ticks the opt-in checkbox you can add to the registration form is ever subscribed,
and that checkbox is unticked by default.
Turning sync on starts sending the accounts you already have, in the background. You can also press Sync existing users now on the plugin’s Users tab. Account deletions reach Senderz as a custom event named wordpress.user_deleted.
The plugin turns submissions from the form plugin you already use into Senderz contacts. Supported: Contact Form 7, WPForms, Gravity Forms, Elementor Pro Forms, Fluent Forms, Formidable Forms and Ninja Forms.
1
Open Senderz Marketing, then Forms
Your forms are listed under the plugin they belong to.
2
Tick Capture submissions from this form
Nothing is sent from a form you have not switched on.
3
Map the fields
For each field choose Do not send, Email, Phone, First name, Last name or
Marketing consent checkbox. Fields you do not map are never sent.
4
Choose the consent rule
Never subscribe. Capture the contact only is the default. You can instead say the whole
form is a marketing opt-in, or that a specific consent checkbox has to be ticked.
If a form is not listed, submit it once. Some form plugins do not expose their fields until a
submission exists.
Captured contacts show a consent source of WordPress form on their profile and can start the Created profile and Added to list automation triggers. See Embedded forms for the hosted alternative on non-WordPress pages.
The integration detail page has a Recent data panel that shows, for each event type, when it last arrived and how many arrived today. Counts reset at midnight in your workspace timezone. For WooCommerce it reports checkout started, order placed, ordered product, fulfilled order, refunded order and cancelled order.Use it as your first check whenever something feels wrong. An event type stuck on a dash has never arrived.
On Integrations, the WooCommerce & WordPress tile shows Store data and Website
features both connected.
2
Customers arrived
Open Contacts and find a known WooCommerce customer. Check their consent state looks right
and was not assumed.
3
Popups render
Open your storefront in a private browsing window and confirm a published popup appears.
4
Cart activity records
With Cart and checkout activity on, sign in or type an email at the checkout, then add an
item. Open that person in Contacts and check the add to cart appears on their timeline.
Reaching the checkout should also count a checkout started in Recent data.
5
An order lands
Place a test order and confirm it appears on the contact’s timeline and in Recent data.
The two halves disconnect separately.Store data. Use Disconnect on the integration detail page. Senderz first removes the WooCommerce webhooks it created, then deletes the stored credential. If webhook removal fails, the only consequence is a few orphaned webhooks in WooCommerce that no longer do anything, and you can delete them by hand.Website features. Press Disconnect on the plugin’s Connection tab, or deactivate the plugin. The plugin stops loading the storefront runtime and stops sending anything.To stop all WooCommerce activity, do both.
Disconnecting does not delete contacts or the store history already in your workspace. Your event
mappings are set aside rather than deleted, so reconnecting restores your own choices instead of
reverting to defaults.
A popup or feature you just set up does not work, and only on WordPress
A caching or optimisation plugin has cached its own copy of the Senderz runtime and is serving a frozen version. The giveaway is that cart and checkout pages behave correctly while product and category pages do not, because most optimisers exclude cart and checkout by default. Purge the optimiser’s cache once. Current plugin versions mark the runtime as do-not-optimise, so this only affects a site that cached it before upgrading.
Nothing appears on the site at all
Confirm the plugin’s Connection tab reads Connected and that you have a published popup whose targeting matches the page. If you connected Senderz with a different address, for example www versus non-www, set the right one under Senderz Marketing → Advanced → Site address.
Couldn’t reach the WooCommerce REST API, or a 404
Enable pretty permalinks, save the permalinks page once, and confirm the WooCommerce REST API is not blocked by a security plugin, firewall or maintenance mode.
The store URL is rejected
Enter the full public HTTPS address where WordPress is installed. Remove admin paths such as /wp-admin and any query string. Private, local network and loopback addresses are refused on purpose. Use manual setup for a staging or local site.
Website features connected, store data not
Open any WordPress admin page so the plugin can retry creating its REST key. If it still does not connect, use the WooCommerce approval screen or enter API keys manually.
Store data connected, website features not
Install and activate Senderz Marketing, then press Connect to Senderz on its Connection tab and approve the same workspace. Connecting one half never replaces the other.
A security plugin blocks the connection
Allow WooCommerce REST requests and the WooCommerce authorisation endpoint. Turn off maintenance mode and HTTP basic authentication while you connect.
WooCommerce rejects the API keys
Confirm the consumer key starts with ck_, the secret starts with cs_, the key is active, and permissions are Read/Write. Re-copy them with no stray spaces.
The approval window is blocked or closes early
Allow popups for Senderz, start again, sign in to WordPress first, and keep the window open until it returns you to Senderz.
A form is missing from the Forms tab
Submit it once. Some form plugins do not expose their fields until there has been a submission.
The checkout consent box does not appear
Confirm the channel is switched on in the Marketing consent card, and that your theme uses the classic checkout shortcode. The WooCommerce block checkout is not supported yet.
No cart activity appears
Turn on Cart and checkout activity, then identify the shopper by signing in or entering an email at checkout, because that setting only reports a known shopper. Remember the first cart reading of a page load is a baseline, so add or remove something after the page has settled.
Existing customers are missing
Press Sync now, or Re-import on the Historical data card. Confirm the REST key owner can manage WooCommerce, so Senderz can read the WooCommerce Analytics customer list that includes guests.
A setting changed in Senderz has not reached the site
Open any WordPress admin page. Settings refresh about every five minutes there, and hourly otherwise.
Duplicate messages go out
Disable the equivalent campaign in the previous email, popup or review plugin before recreating that journey in Senderz.
Build a capture form or game and let the connected plugin serve it.
Build an abandoned-cart flow
Trigger recovery messages from identified cart and checkout activity.
Review consent
Keep checkout, form and imported-customer subscription states compliant.
Create store coupons
Have Senderz create real WooCommerce discount codes for campaigns and rewards.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Senderz","description":"Senderz is the Israel-first marketing platform for email, SMS, web push and voice. Documentation, guides, integrations and API reference.","colors":{"primary":"#141414","light":"#fafafa","dark":"#737373"},"logo":{"light":"https://mintcdn.com/senderz/TYfOlOCqzxvvnafR/logo/logo-light.png?fit=max\u0026auto=format\u0026n=TYfOlOCqzxvvnafR\u0026q=85\u0026s=716b2d481f50aa8a6539edb6be85247f","dark":"https://mintcdn.com/senderz/TYfOlOCqzxvvnafR/logo/logo-dark.png?fit=max\u0026auto=format\u0026n=TYfOlOCqzxvvnafR\u0026q=85\u0026s=fd55875da479e5492f832c94aadcaa4b","href":"https://senderz.app"},"favicon":"https://mintcdn.com/senderz/TYfOlOCqzxvvnafR/favicon.ico?fit=max\u0026auto=format\u0026n=TYfOlOCqzxvvnafR\u0026q=85\u0026s=536e1b773b66d5a4d4bdd0491fce1c5a","appearance":{"default":"light"},"background":{"color":{"light":"#f6f6f6","dark":"#0a0a0a"}},"navbar":{"links":[{"href":"mailto:hello@senderz.app","label":"Support"},{"href":"https://status.senderz.app","label":"Status"}],"primary":{"type":"button","label":"Open Senderz","href":"https://app.senderz.app"}},"footer":{"socials":{"website":"https://senderz.app","x":"https://x.com/senderz","linkedin":"https://www.linkedin.com/company/senderz"},"links":[{"header":"Product","items":[{"label":"Dashboard","href":"https://app.senderz.app"},{"label":"Pricing","href":"https://senderz.app/pricing"}]},{"header":"Legal","items":[{"label":"Terms","href":"https://app.senderz.app/terms"},{"label":"Privacy","href":"https://app.senderz.app/privacy"},{"label":"Acceptable use","href":"https://app.senderz.app/acceptable-use"}]}]},"search":{"prompt":"Search the Senderz docs"},"styling":{"eyebrows":"breadcrumbs","codeblocks":"system","latex":false},"navigation":{"languages":[{"language":"he","default":true,"href":"he/getting-started/introduction"},{"language":"en","href":"en/getting-started/introduction"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"senderz","hasAudioNarration":false,"actualSubdomain":"senderz","customDomains":["docs.senderz.app"],"gitSource":{"type":"github","owner":"appdever01","repo":"sender","deployBranch":"docs","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ac293e5f04d9190a8c6d0e9","clientVersion":"0.0.4124","searchFilterCounts":[{"language":"en","tag":"Guides","count":52},{"language":"en","tag":"Integrations","count":18},{"language":"en","tag":"Campaigns \u0026 automation","count":17},{"language":"en","tag":"API reference","count":15},{"language":"en","tag":"Public API","count":8},{"language":"en","tag":"E-commerce","count":8},{"language":"en","tag":"Audience","count":7},{"language":"en","tag":"Channels","count":6},{"language":"en","tag":"Account","count":5},{"language":"en","tag":"Automation \u0026 no-code","count":5},{"language":"he","tag":"מדריך","count":4},{"language":"he","tag":"אינטגרציות","count":4},{"language":"he","tag":"סקירה","count":4},{"language":"he","tag":"צעדים ראשונים","count":3},{"language":"he","tag":"רגולציה בישראל","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"en/integrations/woocommerce","slug":"/en/integrations/woocommerce","pageMetadata":{"title":"WooCommerce","description":"Connect a WooCommerce store with the Senderz Marketing plugin in one approval, then sync customers, orders, products, checkout consent and on-site activity.","icon":"wordpress","href":"/en/integrations/woocommerce"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Connect a WooCommerce store with the Senderz Marketing plugin in one approval, then sync customers, orders, products, checkout consent and on-site activity.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Card,CardGroup,Heading,Info,Note,ParamField,Step,Steps,Tab,Table,Tabs,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!ParamField)_missingMdxReference(`ParamField`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`WooCommerce runs on WordPress, and Senderz connects it with a single plugin called `,_jsx(_components.strong,{children:`Senderz Marketing`}),`. Installing that plugin and approving it once wires up both halves of the connection: the store API that syncs your customers, orders and products, and the on-site features that show popups, capture forms, collect checkout consent and track shopper activity.`]}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Running WordPress without a shop?`}),` The same plugin covers you, and the setup is shorter. See\n`,_jsx(_components.a,{href:`/en/integrations/wordpress`,children:`WordPress`}),`. This page is for sites where WooCommerce is active.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`what-is-live-today`,children:`What is live today`}),`\n`,_jsxs(Info,{children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Fully working.`}),` The guided connect, WooCommerce REST key provisioning, customer sync\nincluding guest buyers, two years of order history, live order and customer webhooks, product\ncatalog sync, checkout marketing consent, on-site popups, web push, product\nand cart tracking, back-in-stock requests, registered-user sync, and form capture from seven\npopular form plugins.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Partial.`}),` The WhatsApp checkout box renders and records the tick, but only reaches the\ncontact’s WhatsApp subscription through the daily customer sync, and only for a shopper who has\nan account on the site. See `,_jsx(_components.a,{href:`#checkout-marketing-consent`,children:`Checkout marketing consent`}),`.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Known limits.`}),` The checkout consent box appears on the `,_jsx(_components.strong,{children:`classic checkout shortcode only`}),`.\nThe WooCommerce block checkout is not supported yet. Per-variation SKUs are not imported, so a\nvariable product syncs at the product level. The `,_jsx(_components.strong,{children:`Cart and checkout activity`}),` setting only\nreports a shopper who has signed in or typed an email address at the checkout.`]})]}),`\n`,_jsx(Heading,{level:`2`,id:`the-plugin`,children:`The plugin`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Detail`}),_jsx(_components.th,{children:`Value`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Name in the WordPress plugin directory`}),_jsx(_components.td,{children:_jsx(_components.strong,{children:`Senderz Marketing`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Directory listing`}),_jsx(_components.td,{children:_jsx(_components.a,{href:`https://wordpress.org/plugins/senderz-marketing-connect/`,children:`wordpress.org/plugins/senderz-marketing-connect`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Current version`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`2.1.6`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Requires`}),_jsx(_components.td,{children:`WordPress 6.2 or newer, PHP 7.2 or newer`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`WooCommerce`}),_jsx(_components.td,{children:`Compatible with High-Performance Order Storage`})]})]})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Nothing leaves your site before you connect it.`}),` On a fresh install the plugin makes no\noutbound request of any kind: no storefront script, no tracking beacon, no version ping. Every\noutbound behaviour is gated on the connection you approve.`]})}),`\n`,_jsxs(_components.p,{children:[`If you were running the older `,_jsx(_components.strong,{children:`Senderz for WooCommerce`}),` plugin, install this one over it. Your existing settings carry across and the old plugin is deactivated automatically. Then press `,_jsx(_components.strong,{children:`Connect to Senderz`}),` so the site is linked to your workspace directly.`]}),`\n`,_jsx(Heading,{level:`2`,id:`before-you-start`,children:`Before you start`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`A `,_jsx(_components.strong,{children:`WordPress administrator`}),` account that can install plugins and manage WooCommerce.`]}),`\n`,_jsxs(_components.li,{children:[`A Senderz account where you are the `,_jsx(_components.strong,{children:`owner`}),` or an `,_jsx(_components.strong,{children:`admin`}),` of the workspace. Viewers, editors and designers cannot connect a store.`]}),`\n`,_jsxs(_components.li,{children:[`A `,_jsx(_components.strong,{children:`public HTTPS`}),` site address, for example `,_jsx(_components.code,{children:`https://shop.example.com`}),`. Senderz refuses private, loopback and local network addresses during the guided connect. A staging or LAN site must use manual setup instead.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Pretty permalinks`}),` under `,_jsx(_components.strong,{children:`Settings → Permalinks`}),`. Do not use the `,_jsx(_components.strong,{children:`Plain`}),` option, or the WooCommerce REST API will not answer.`]}),`\n`,_jsx(_components.li,{children:`The WooCommerce REST API reachable and not blocked by a firewall, maintenance mode, security plugin or HTTP basic authentication.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`connect-your-store`,children:`Connect your store`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Install Senderz Marketing`,children:_jsxs(_components.p,{children:[`In WordPress go to `,_jsx(_components.strong,{children:`Plugins`}),`, then `,_jsx(_components.strong,{children:`Add New`}),`, search for `,_jsx(_components.strong,{children:`Senderz Marketing`}),`, and\ninstall and activate it. WordPress opens the Senderz screen straight after activation.`]})}),_jsx(Step,{title:`Open the Senderz screen`,children:_jsxs(_components.p,{children:[`With WooCommerce active the plugin lives under `,_jsx(_components.strong,{children:`Marketing → Senderz Marketing`}),`. On a site\nwith no WooCommerce it is its own top-level `,_jsx(_components.strong,{children:`Senderz Marketing`}),` menu item. The old\n`,_jsx(_components.strong,{children:`Settings → Senderz`}),` link still works if you have it bookmarked.`]})}),_jsx(Step,{title:`Press Connect to Senderz`,children:_jsx(_components.p,{children:`You are taken to Senderz to approve the request. Sign in if you are not already.`})}),_jsx(Step,{title:`Approve the workspace`,children:_jsxs(_components.p,{children:[`The approval screen names your site and the workspace it will join, and lists what the site\nis allowed to do. Check the workspace is the right one, then press `,_jsx(_components.strong,{children:`Connect site`}),`. If it is\nwrong, switch workspace first and start again.`]})}),_jsx(Step,{title:`Both halves connect`,children:_jsxs(_components.p,{children:[`You land back in WordPress showing `,_jsx(_components.strong,{children:`Connected`}),`. Because the plugin is running as a logged-in\nadministrator, it creates its own WooCommerce REST key at this point and hands it to Senderz,\nso you never generate or paste a key. The key appears in `,_jsx(_components.strong,{children:`WooCommerce → Settings → Advanced →\nREST API`}),` with the description `,_jsx(_components.code,{children:`Senderz`}),`.`]})})]}),`\n`,_jsxs(_components.p,{children:[`Back in Senderz, open `,_jsx(_components.strong,{children:`Integrations`}),` from the left sidebar. You will see one tile called `,_jsx(_components.strong,{children:`WooCommerce \u0026 WordPress`}),` with two rows on it, `,_jsx(_components.strong,{children:`Store data`}),` and `,_jsx(_components.strong,{children:`Website features`}),`. Both should read connected. Open the tile to reach the detail page, which shows the same two rows under `,_jsx(_components.strong,{children:`Complete your WooCommerce setup`}),`.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`The tile deliberately covers both halves, because they are one site. The badge follows the worse\nof the two, so a tile reading `,_jsx(_components.strong,{children:`Setup incomplete`}),` or `,_jsx(_components.strong,{children:`Needs attention`}),` means one half needs\nwork even though the other is fine.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`if-only-one-half-connects`,children:`If only one half connects`}),`\n`,_jsx(_components.p,{children:`Both rows on the detail page have their own action, and using one never disturbs the other.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Website features disconnected.`}),` Install and activate Senderz Marketing, then press `,_jsx(_components.strong,{children:`Connect to Senderz`}),` on its Connection tab.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Store data disconnected.`}),` The plugin retries the key creation on the next WordPress admin page load, so open any admin page first. If it still does not connect, use one of the alternative routes below.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`alternative-connect-routes`,children:`Alternative connect routes`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`WooCommerce approval screen`,icon:`shield-check`,id:`woocommerce-approval-screen`,children:_jsxs(_components.p,{children:[`On the detail page press `,_jsx(_components.strong,{children:`Connect store data`}),`, enter your public store URL and choose\n`,_jsx(_components.strong,{children:`Connect with WooCommerce`}),`. Your store shows WooCommerce’s own access screen, you approve\nit, and WooCommerce returns the keys to Senderz directly. Nothing is copied by hand. This\nroute needs HTTPS and pretty permalinks, and it opens a browser popup, so allow popups for\nSenderz before you start.`]})}),_jsx(Accordion,{title:`Enter API keys manually`,icon:`key`,id:`enter-api-keys-manually`,children:_jsxs(_components.p,{children:[`In `,_jsx(_components.strong,{children:`WooCommerce → Settings → Advanced → REST API`}),`, choose `,_jsx(_components.strong,{children:`Add key`}),`. Give it a description\nsuch as `,_jsx(_components.code,{children:`Senderz`}),`, pick an administrator as the user, set permissions to `,_jsx(_components.strong,{children:`Read/Write`}),`, and\ngenerate it. Copy the `,_jsx(_components.code,{children:`ck_`}),` consumer key and `,_jsx(_components.code,{children:`cs_`}),` consumer secret into Senderz using `,_jsx(_components.strong,{children:`Enter\nAPI keys manually`}),` in the connect dialog. WooCommerce shows the full secret only once.`]})}),_jsx(Accordion,{title:`Manual plugin setup for an unreachable site`,icon:`lock`,id:`manual-plugin-setup-for-an-unreachable-site`,children:_jsxs(_components.p,{children:[`A staging, local or firewalled site cannot complete the guided approval, because Senderz has\nto reach it back over public HTTPS. On the plugin’s Connection tab use `,_jsx(_components.strong,{children:`Manual setup`}),`: paste\nyour `,_jsx(_components.strong,{children:`Workspace ID`}),` from `,_jsx(_components.strong,{children:`Settings → Workspace`}),` in Senderz, and an API key created under\n`,_jsx(_components.strong,{children:`Settings → API Tokens`}),`, then press `,_jsx(_components.strong,{children:`Save and verify`}),`.`]})})]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Never email a consumer secret or paste it into a support ticket. If one is exposed or lost,\nrevoke that key in WooCommerce, create a new one, and reconnect Senderz.`})}),`\n`,_jsx(Heading,{level:`2`,id:`where-each-setting-lives`,children:`Where each setting lives`}),`\n`,_jsxs(_components.p,{children:[`This trips people up, so it is worth stating plainly. Almost everything is configured `,_jsx(_components.strong,{children:`in Senderz`}),`, and the plugin’s WordPress screens mostly show you what is set.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Setting`}),_jsx(_components.th,{children:`Where you change it`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`The checkout consent box, its wording, and the list it joins`}),_jsxs(_components.td,{children:[`Senderz, `,_jsx(_components.strong,{children:`Marketing consent`}),` card`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Cart and checkout activity tracking`}),_jsxs(_components.td,{children:[`Senderz, `,_jsx(_components.strong,{children:`Site activity`}),` card`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Back-in-stock requests and their labels`}),_jsxs(_components.td,{children:[`Senderz, `,_jsx(_components.strong,{children:`Site activity`}),` card`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Registered-user sync and the registration opt-in`}),_jsxs(_components.td,{children:[`Senderz, `,_jsx(_components.strong,{children:`Site activity`}),` card`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`The list every synced customer joins`}),_jsxs(_components.td,{children:[`Senderz, `,_jsx(_components.strong,{children:`Customer sync list`}),` card`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Which forms are captured and which field is the email, phone or name`}),_jsxs(_components.td,{children:[`WordPress, `,_jsx(_components.strong,{children:`Senderz Marketing → Forms`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Site address override, for example www versus non-www`}),_jsxs(_components.td,{children:[`WordPress, `,_jsx(_components.strong,{children:`Senderz Marketing → Advanced`})]})]})]})]}),`\n`,_jsxs(_components.p,{children:[`The plugin’s `,_jsx(_components.strong,{children:`Store`}),` and `,_jsx(_components.strong,{children:`Users`}),` tabs are read-only mirrors with a `,_jsx(_components.strong,{children:`Manage in Senderz`}),` link. A change you make in Senderz reaches the site within about five minutes while someone is in the WordPress admin, and otherwise on the plugin’s hourly refresh.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Every optional feature starts switched off.`}),` Checkout marketing consent, cart and checkout\ntracking, back-in-stock requests and registered-user\nsync are all off until you turn them on. Connecting the store does not silently start collecting\nanything.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`what-syncs`,children:`What syncs`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Customers, including guests`,children:_jsx(_components.p,{children:`Existing customers import on connect. Senderz reads both WooCommerce’s own customer list and\nWooCommerce Analytics, then merges them, so guest buyers who never created an account are\nincluded. On an older or restricted store where Analytics is unavailable, Senderz falls back\nto registered customers only, and new guest buyers are picked up afterwards from live order\nactivity.`})}),_jsx(Step,{title:`Order history`,children:_jsxs(_components.p,{children:[`Up to `,_jsx(_components.strong,{children:`two years`}),` of order history back-fills, capped at `,_jsx(_components.strong,{children:`25,000 orders`}),`. Historical\norders land with their real order dates, so lifetime value, repeat-purchase and dormancy\nwindows are correct from day one. They deliberately do not trigger automations or fire\noutbound webhooks, so a two-year-old order can never set off an abandoned-cart email.`]})}),_jsx(Step,{title:`Live orders and customers`,children:_jsxs(_components.p,{children:[`Senderz creates four WooCommerce webhooks on connect, for customer created, customer updated,\norder created and order updated. Reconnecting does not duplicate them, and `,_jsx(_components.strong,{children:`Sync now`}),` checks\nthey are still in place.`]})}),_jsx(Step,{title:`Product catalog`,children:_jsxs(_components.p,{children:[`Products, prices, images, SKUs and categories import and refresh `,_jsx(_components.strong,{children:`hourly`}),`, so\nproduct-aware campaigns, coupons and storefront features use current data. Per-variation\nSKUs are not imported yet, so a variable product syncs at the product level.`]})}),_jsx(Step,{title:`Ongoing re-sync`,children:_jsxs(_components.p,{children:[`Connected stores re-sync customers automatically once a day. You can also force one at any\ntime with `,_jsx(_components.strong,{children:`Sync now`}),` on the tile, or `,_jsx(_components.strong,{children:`Re-import`}),` on the `,_jsx(_components.strong,{children:`Historical data`}),` card after a\nlong disconnection.`]})})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`The plugin also sends paid orders to Senderz over its own connection, separately from the\nWooCommerce webhooks. It watches for orders reaching `,_jsx(_components.strong,{children:`processing`}),` and `,_jsx(_components.strong,{children:`completed`}),`, queues\nthem locally, and retries if the send fails. On first run it works back through up to two years\nand 25,000 paid orders. Both paths carry the same order identity, so an order that arrives twice\nis counted once. This is why order data can still flow on a store whose native webhooks were\nnever created successfully.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`order-status-and-what-it-means`,children:`Order status and what it means`}),`\n`,_jsx(_components.p,{children:`WooCommerce order status decides which event Senderz records.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`WooCommerce status`}),_jsx(_components.th,{children:`Senderz event`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`pending`}),`, `,_jsx(_components.code,{children:`on-hold`}),`, `,_jsx(_components.code,{children:`failed`})]}),_jsx(_components.td,{children:`Checkout started`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`processing`})}),_jsx(_components.td,{children:`Order placed`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`completed`})}),_jsx(_components.td,{children:`Order fulfilled`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`cancelled`})}),_jsx(_components.td,{children:`Order cancelled`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`refunded`})}),_jsx(_components.td,{children:`Order refunded`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`checkout-draft`}),`, `,_jsx(_components.code,{children:`draft`}),`, `,_jsx(_components.code,{children:`trash`})]}),_jsx(_components.td,{children:`Nothing is recorded`})]})]})]}),`\n`,_jsxs(_components.p,{children:[`An order that is `,_jsx(_components.strong,{children:`created`}),` already in `,_jsx(_components.code,{children:`completed`}),` is recorded as an order placed, so stores that auto-complete every order still report revenue.`]}),`\n`,_jsx(Info,{children:_jsx(_components.p,{children:`Mapping unpaid statuses to a started checkout is what makes abandonment recovery work with\nIsraeli external payment pages such as Grow, Cardcom and PayPlus, where the shopper leaves your\nsite to pay and the order sits unpaid until they come back.`})}),`\n`,_jsx(Heading,{level:`3`,id:`recovery-links`,children:`Recovery links`}),`\n`,_jsxs(_components.p,{children:[`Every checkout-started event carries the exact `,_jsx(_components.strong,{children:`pay for this order`}),` link for that order, so an abandoned-checkout automation can drop the shopper straight back into paying. The plugin supplies the precise link, which matters if you use a custom or translated checkout page slug. Use `,_jsx(_components.code,{children:`{{recoveryUrl}}`}),` in the message.`]}),`\n`,_jsx(_components.p,{children:`You can override the status mapping for your workspace if your store uses custom statuses. Contact support to set that up.`}),`\n`,_jsx(Heading,{level:`2`,id:`checkout-marketing-consent`,children:`Checkout marketing consent`}),`\n`,_jsxs(_components.p,{children:[`The plugin adds `,_jsx(_components.strong,{children:`one`}),` unticked consent box to the classic checkout, covering email, SMS and WhatsApp together. Turn it on in Senderz under the `,_jsx(_components.strong,{children:`Marketing consent`}),` card on the integration detail page.`]}),`\n`,_jsx(ParamField,{path:`Collect marketing consent at checkout`,type:`toggle`,default:`off`,id:`param-collect-marketing-consent-at-checkout`,children:_jsx(_components.p,{children:`Whether consent is collected at checkout at all.`})}),`\n`,_jsx(ParamField,{path:`Which checkbox customers tick`,type:`choice`,default:`I have my own checkbox`,id:`param-which-checkbox-customers-tick`,children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`I have my own checkbox`}),` renders nothing and reads the box your checkout already has, so a\nshopper is never asked the same question twice. It is the default because most stores already\nhave one, and it collects nothing until you give us that box’s field name below. `,_jsx(_components.strong,{children:`Use our\ncheckbox`}),` renders the box described here instead.`]})}),`\n`,_jsx(ParamField,{path:`Text shown beside the checkbox`,type:`text`,id:`param-text-shown-beside-the-checkbox`,children:_jsx(_components.p,{children:`Your own wording. One tick opts the shopper in to email, SMS and WhatsApp, so name every channel\nit covers. Leave it blank to use the translated Senderz default. The text sits beside the\ncheckbox, not inside it.`})}),`\n`,_jsx(ParamField,{path:`Ticked by default`,type:`toggle`,default:`off`,id:`param-ticked-by-default`,children:_jsx(_components.p,{children:`Starts the box already ticked, so a shopper who changes nothing agrees. See the warning below\nbefore turning this on.`})}),`\n`,_jsx(ParamField,{path:`Field name of your checkbox`,type:`text`,id:`param-field-name-of-your-checkbox`,children:_jsxs(_components.p,{children:[`Only when you use your own box. The `,_jsx(_components.code,{children:`name`}),` attribute of that checkbox, for example\n`,_jsx(_components.code,{children:`newsletter_optin`}),`. Classic checkout only.`]})}),`\n`,_jsx(ParamField,{path:`List for customers who agree`,type:`list`,id:`param-list-for-customers-who-agree`,children:_jsx(_components.p,{children:`Files a consenting shopper into a specific Senderz list. Joining a list is not itself consent, so\nwhat you may send is still decided by the shopper’s own opt-in.`})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`A pre-ticked box is not explicit consent under Israeli law`}),`, which expects the shopper to act.\nLeave `,_jsx(_components.strong,{children:`Ticked by default`}),` off unless you have taken your own legal advice. A shopper who leaves\nthe box unticked is still recorded as a contact but is never sent marketing, and Senderz will not\nlet a checkout withdraw consent a shopper gave somewhere else, so an unticked box never\nunsubscribes anyone.`]})}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`One tick subscribes the shopper on every channel it can reach: email needs an email address, SMS\nand WhatsApp need a phone number. A channel with no address for that shopper is skipped rather\nthan recorded, so consent is never stored against a contact we cannot message.`})}),`\n`,_jsx(Heading,{level:`3`,id:`consent-on-imported-customers`,children:`Consent on imported customers`}),`\n`,_jsxs(_components.p,{children:[`WooCommerce core has no standard marketing-consent field on a customer. On import Senderz looks for consent metadata written by Senderz itself, by Mailchimp for WooCommerce, and by other common opt-in plugins, per channel. Where there is no recognised positive signal, the customer imports `,_jsx(_components.strong,{children:`not subscribed`}),` and sending still gates on consent. Imports only ever add consent, never remove it.`]}),`\n`,_jsx(_components.p,{children:`If your store records consent under an unusual key, support can point Senderz at it for your workspace without a plugin change.`}),`\n`,_jsx(Heading,{level:`2`,id:`on-site-features`,children:`On-site features`}),`\n`,_jsx(_components.p,{children:`Once the site is connected, the plugin loads the Senderz storefront runtime on your pages. It is enqueued through WordPress’s normal script API, and the plugin marks it as do-not-optimise for the common caching and minifying plugins.`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Popups and forms`,icon:`window-maximize`,href:`/en/messaging/popups`,children:_jsx(_components.p,{children:`Every popup you publish appears without touching your theme again.`})}),_jsx(Card,{title:`Web push`,icon:`bell`,href:`/en/channels/push`,children:_jsx(_components.p,{children:`The plugin serves the service worker browser push needs, from your own domain.`})})]}),`\n`,_jsxs(_components.p,{children:[`Popups can apply a won discount straight to the shopper’s cart, because the plugin supplies the security token WooCommerce requires for that. See `,_jsx(_components.a,{href:`/en/messaging/popup-install`,children:`Installing popups on your store`}),` for the full install and test walkthrough.`]}),`\n`,_jsx(Heading,{level:`3`,id:`product-and-cart-tracking`,children:`Product and cart tracking`}),`\n`,_jsx(_components.p,{children:`Two things record shopper behaviour, and they behave differently. It is worth knowing which is which when you are checking whether something works.`}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`Storefront runtime`,id:`storefront-runtime`,children:[_jsxs(_components.p,{children:[`On as soon as the site is connected. In the browser it reads the product structured data your\ntheme already publishes to record `,_jsx(_components.strong,{children:`product viewed`}),`, watches cart requests to work out\n`,_jsx(_components.strong,{children:`product added to cart`}),` and `,_jsx(_components.strong,{children:`product removed from cart`}),`, and recognises your cart and\ncheckout pages for `,_jsx(_components.strong,{children:`cart viewed`}),` and `,_jsx(_components.strong,{children:`checkout started`}),`.`]}),_jsx(_components.p,{children:`Activity from a visitor Senderz cannot yet name is held rather than recorded. The moment they\nidentify themselves, usually by subscribing through a popup, the held activity is attached to\ntheir contact.`})]}),_jsxs(Tab,{title:`Cart and checkout activity`,id:`cart-and-checkout-activity`,children:[_jsxs(_components.p,{children:[`Off until you turn it on in the `,_jsx(_components.strong,{children:`Site activity`}),` card. Your site sends add to cart, remove\nfrom cart and quantity changes to Senderz directly, along with the shopper’s email address,\nwhich makes it the reliable path for a known shopper.`]}),_jsxs(_components.p,{children:[`It only fires for a shopper who has `,_jsx(_components.strong,{children:`signed in or typed an email address at the checkout`}),`.\nNothing is sent for anyone else. The address is held in your site’s own WooCommerce session,\nnever in a cookie a third-party script could read.`]})]})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`The first cart reading is a baseline, not activity.`}),` Anything already in the basket when the\npage loads was added on an earlier visit, so it is never reported as if it just happened. Only\nchanges after that produce events.`]})}),`\n`,_jsxs(_components.p,{children:[`Both feed the `,_jsx(_components.strong,{children:`Added to cart`}),` and `,_jsx(_components.strong,{children:`Checkout started`}),` automation triggers, and the product timeline on each contact.`]}),`\n`,_jsx(Heading,{level:`3`,id:`back-in-stock-requests`,children:`Back-in-stock requests`}),`\n`,_jsxs(_components.p,{children:[`Turn on `,_jsx(_components.strong,{children:`Back in stock requests`}),` to show a request form on out-of-stock products. Simple products only. You can set the button label and the marketing opt-in label.`]}),`\n`,_jsx(_components.p,{children:`The request carries its own unticked marketing opt-in. A shopper who leaves it unticked is still recorded against that product so you can see the demand, but Senderz only sends marketing to people who have opted in, so the back-in-stock message reaches those who ticked it.`}),`\n`,_jsxs(_components.p,{children:[`When the product comes back in stock the request reaches Senderz as a custom event named `,_jsx(_components.code,{children:`wordpress.back_in_stock`}),`. Use that exact name when building an automation from it.`]}),`\n`,_jsx(Heading,{level:`3`,id:`who-becomes-a-contact`,children:`Who becomes a contact`}),`\n`,_jsxs(_components.p,{children:[`Turn on `,_jsx(_components.strong,{children:`Sync registered users`}),` to send everyone who registers on your site to Senderz as a contact. Leave it off and only people who place an order become contacts.`]}),`\n`,_jsxs(_components.p,{children:[`Turn off `,_jsx(_components.strong,{children:`Create contacts for guest orders`}),` if you do not want an order placed without an account to create one. The order still counts towards revenue and reporting either way; with it off, a guest order that matches a shopper you already know still updates that contact, so turning it off never hides someone Senderz has already met.`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Accounts arrive subscribed to nothing. Creating an account is not marketing consent. Only a\nshopper who ticks the opt-in checkbox you can add to the registration form is ever subscribed,\nand that checkbox is unticked by default.`})}),`\n`,_jsxs(_components.p,{children:[`Turning sync on starts sending the accounts you already have, in the background. You can also press `,_jsx(_components.strong,{children:`Sync existing users now`}),` on the plugin’s `,_jsx(_components.strong,{children:`Users`}),` tab. Account deletions reach Senderz as a custom event named `,_jsx(_components.code,{children:`wordpress.user_deleted`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`capture-your-existing-forms`,children:`Capture your existing forms`}),`\n`,_jsxs(_components.p,{children:[`The plugin turns submissions from the form plugin you already use into Senderz contacts. Supported: `,_jsx(_components.strong,{children:`Contact Form 7`}),`, `,_jsx(_components.strong,{children:`WPForms`}),`, `,_jsx(_components.strong,{children:`Gravity Forms`}),`, `,_jsx(_components.strong,{children:`Elementor Pro Forms`}),`, `,_jsx(_components.strong,{children:`Fluent Forms`}),`, `,_jsx(_components.strong,{children:`Formidable Forms`}),` and `,_jsx(_components.strong,{children:`Ninja Forms`}),`.`]}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Open Senderz Marketing, then Forms`,children:_jsx(_components.p,{children:`Your forms are listed under the plugin they belong to.`})}),_jsx(Step,{title:`Tick Capture submissions from this form`,children:_jsx(_components.p,{children:`Nothing is sent from a form you have not switched on.`})}),_jsx(Step,{title:`Map the fields`,children:_jsxs(_components.p,{children:[`For each field choose `,_jsx(_components.strong,{children:`Do not send`}),`, `,_jsx(_components.strong,{children:`Email`}),`, `,_jsx(_components.strong,{children:`Phone`}),`, `,_jsx(_components.strong,{children:`First name`}),`, `,_jsx(_components.strong,{children:`Last name`}),` or\n`,_jsx(_components.strong,{children:`Marketing consent checkbox`}),`. Fields you do not map are never sent.`]})}),_jsx(Step,{title:`Choose the consent rule`,children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Never subscribe. Capture the contact only`}),` is the default. You can instead say the whole\nform is a marketing opt-in, or that a specific consent checkbox has to be ticked.`]})})]}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`If a form is not listed, submit it once. Some form plugins do not expose their fields until a\nsubmission exists.`})}),`\n`,_jsxs(_components.p,{children:[`Captured contacts show a consent source of `,_jsx(_components.strong,{children:`WordPress form`}),` on their profile and can start the `,_jsx(_components.strong,{children:`Created profile`}),` and `,_jsx(_components.strong,{children:`Added to list`}),` automation triggers. See `,_jsx(_components.a,{href:`/en/integrations/embedded-forms`,children:`Embedded forms`}),` for the hosted alternative on non-WordPress pages.`]}),`\n`,_jsx(Heading,{level:`2`,id:`watch-it-working`,children:`Watch it working`}),`\n`,_jsxs(_components.p,{children:[`The integration detail page has a `,_jsx(_components.strong,{children:`Recent data`}),` panel that shows, for each event type, when it last arrived and how many arrived today. Counts reset at midnight in your workspace timezone. For WooCommerce it reports checkout started, order placed, ordered product, fulfilled order, refunded order and cancelled order.`]}),`\n`,_jsx(_components.p,{children:`Use it as your first check whenever something feels wrong. An event type stuck on a dash has never arrived.`}),`\n`,_jsx(Heading,{level:`2`,id:`verify-the-connection`,children:`Verify the connection`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Both halves connected`,children:_jsxs(_components.p,{children:[`On `,_jsx(_components.strong,{children:`Integrations`}),`, the `,_jsx(_components.strong,{children:`WooCommerce \u0026 WordPress`}),` tile shows `,_jsx(_components.strong,{children:`Store data`}),` and `,_jsx(_components.strong,{children:`Website\nfeatures`}),` both connected.`]})}),_jsx(Step,{title:`Customers arrived`,children:_jsxs(_components.p,{children:[`Open `,_jsx(_components.strong,{children:`Contacts`}),` and find a known WooCommerce customer. Check their consent state looks right\nand was not assumed.`]})}),_jsx(Step,{title:`Popups render`,children:_jsx(_components.p,{children:`Open your storefront in a private browsing window and confirm a published popup appears.`})}),_jsx(Step,{title:`Cart activity records`,children:_jsxs(_components.p,{children:[`With `,_jsx(_components.strong,{children:`Cart and checkout activity`}),` on, sign in or type an email at the checkout, then add an\nitem. Open that person in `,_jsx(_components.strong,{children:`Contacts`}),` and check the add to cart appears on their timeline.\nReaching the checkout should also count a checkout started in `,_jsx(_components.strong,{children:`Recent data`}),`.`]})}),_jsx(Step,{title:`An order lands`,children:_jsxs(_components.p,{children:[`Place a test order and confirm it appears on the contact’s timeline and in `,_jsx(_components.strong,{children:`Recent data`}),`.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`disconnecting`,children:`Disconnecting`}),`\n`,_jsx(_components.p,{children:`The two halves disconnect separately.`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Store data.`}),` Use `,_jsx(_components.strong,{children:`Disconnect`}),` on the integration detail page. Senderz first removes the WooCommerce webhooks it created, then deletes the stored credential. If webhook removal fails, the only consequence is a few orphaned webhooks in WooCommerce that no longer do anything, and you can delete them by hand.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Website features.`}),` Press `,_jsx(_components.strong,{children:`Disconnect`}),` on the plugin’s Connection tab, or deactivate the plugin. The plugin stops loading the storefront runtime and stops sending anything.`]}),`\n`,_jsx(_components.p,{children:`To stop all WooCommerce activity, do both.`}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`Disconnecting does not delete contacts or the store history already in your workspace. Your event\nmappings are set aside rather than deleted, so reconnecting restores your own choices instead of\nreverting to defaults.`})}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting`,children:`Troubleshooting`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`What you see`}),_jsx(_components.th,{children:`What to check`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`A popup or feature you just set up does not work, and only on WordPress`}),_jsx(_components.td,{children:`A caching or optimisation plugin has cached its own copy of the Senderz runtime and is serving a frozen version. The giveaway is that cart and checkout pages behave correctly while product and category pages do not, because most optimisers exclude cart and checkout by default. Purge the optimiser’s cache once. Current plugin versions mark the runtime as do-not-optimise, so this only affects a site that cached it before upgrading.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Nothing appears on the site at all`}),_jsxs(_components.td,{children:[`Confirm the plugin’s Connection tab reads `,_jsx(_components.strong,{children:`Connected`}),` and that you have a published popup whose targeting matches the page. If you connected Senderz with a different address, for example www versus non-www, set the right one under `,_jsx(_components.strong,{children:`Senderz Marketing → Advanced → Site address`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Couldn’t reach the WooCommerce REST API`}),`, or a `,_jsx(_components.code,{children:`404`})]}),_jsx(_components.td,{children:`Enable pretty permalinks, save the permalinks page once, and confirm the WooCommerce REST API is not blocked by a security plugin, firewall or maintenance mode.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`The store URL is rejected`}),_jsxs(_components.td,{children:[`Enter the full public HTTPS address where WordPress is installed. Remove admin paths such as `,_jsx(_components.code,{children:`/wp-admin`}),` and any query string. Private, local network and loopback addresses are refused on purpose. Use manual setup for a staging or local site.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Website features connected, store data not`}),_jsx(_components.td,{children:`Open any WordPress admin page so the plugin can retry creating its REST key. If it still does not connect, use the WooCommerce approval screen or enter API keys manually.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Store data connected, website features not`}),_jsxs(_components.td,{children:[`Install and activate Senderz Marketing, then press `,_jsx(_components.strong,{children:`Connect to Senderz`}),` on its Connection tab and approve the same workspace. Connecting one half never replaces the other.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`A security plugin blocks the connection`}),_jsx(_components.td,{children:`Allow WooCommerce REST requests and the WooCommerce authorisation endpoint. Turn off maintenance mode and HTTP basic authentication while you connect.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`WooCommerce rejects the API keys`}),_jsxs(_components.td,{children:[`Confirm the consumer key starts with `,_jsx(_components.code,{children:`ck_`}),`, the secret starts with `,_jsx(_components.code,{children:`cs_`}),`, the key is active, and permissions are `,_jsx(_components.strong,{children:`Read/Write`}),`. Re-copy them with no stray spaces.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`The approval window is blocked or closes early`}),_jsx(_components.td,{children:`Allow popups for Senderz, start again, sign in to WordPress first, and keep the window open until it returns you to Senderz.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`A form is missing from the Forms tab`}),_jsx(_components.td,{children:`Submit it once. Some form plugins do not expose their fields until there has been a submission.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`The checkout consent box does not appear`}),_jsxs(_components.td,{children:[`Confirm the channel is switched on in the `,_jsx(_components.strong,{children:`Marketing consent`}),` card, and that your theme uses the classic checkout shortcode. The WooCommerce block checkout is not supported yet.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`No cart activity appears`}),_jsxs(_components.td,{children:[`Turn on `,_jsx(_components.strong,{children:`Cart and checkout activity`}),`, then identify the shopper by signing in or entering an email at checkout, because that setting only reports a known shopper. Remember the first cart reading of a page load is a baseline, so add or remove something after the page has settled.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Existing customers are missing`}),_jsxs(_components.td,{children:[`Press `,_jsx(_components.strong,{children:`Sync now`}),`, or `,_jsx(_components.strong,{children:`Re-import`}),` on the `,_jsx(_components.strong,{children:`Historical data`}),` card. Confirm the REST key owner can manage WooCommerce, so Senderz can read the WooCommerce Analytics customer list that includes guests.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`A setting changed in Senderz has not reached the site`}),_jsx(_components.td,{children:`Open any WordPress admin page. Settings refresh about every five minutes there, and hourly otherwise.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Duplicate messages go out`}),_jsx(_components.td,{children:`Disable the equivalent campaign in the previous email, popup or review plugin before recreating that journey in Senderz.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`recommended-next-steps`,children:`Recommended next steps`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Publish a popup`,icon:`window-maximize`,href:`/en/messaging/popups`,children:_jsx(_components.p,{children:`Build a capture form or game and let the connected plugin serve it.`})}),_jsx(Card,{title:`Build an abandoned-cart flow`,icon:`cart-shopping`,href:`/en/messaging/flows`,children:_jsx(_components.p,{children:`Trigger recovery messages from identified cart and checkout activity.`})}),_jsx(Card,{title:`Review consent`,icon:`shield-check`,href:`/en/audience/consent`,children:_jsx(_components.p,{children:`Keep checkout, form and imported-customer subscription states compliant.`})}),_jsx(Card,{title:`Create store coupons`,icon:`ticket`,href:`/en/messaging/coupons`,children:_jsx(_components.p,{children:`Have Senderz create real WooCommerce discount codes for campaigns and rewards.`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":"system","config":{},"pageMetadata":{"title":"WooCommerce","description":"Connect a WooCommerce store with the Senderz Marketing plugin in one approval, then sync customers, orders, products, checkout consent and on-site activity.","icon":"wordpress","href":"/en/integrations/woocommerce"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"What is live today","slug":"what-is-live-today","depth":2,"children":[]},{"title":"The plugin","slug":"the-plugin","depth":2,"children":[]},{"title":"Before you start","slug":"before-you-start","depth":2,"children":[]},{"title":"Connect your store","slug":"connect-your-store","depth":2,"children":[{"title":"If only one half connects","slug":"if-only-one-half-connects","depth":3,"children":[]},{"title":"Alternative connect routes","slug":"alternative-connect-routes","depth":3,"children":[]}]},{"title":"Where each setting lives","slug":"where-each-setting-lives","depth":2,"children":[]},{"title":"What syncs","slug":"what-syncs","depth":2,"children":[]},{"title":"Order status and what it means","slug":"order-status-and-what-it-means","depth":2,"children":[{"title":"Recovery links","slug":"recovery-links","depth":3,"children":[]}]},{"title":"Checkout marketing consent","slug":"checkout-marketing-consent","depth":2,"children":[{"title":"Consent on imported customers","slug":"consent-on-imported-customers","depth":3,"children":[]}]},{"title":"On-site features","slug":"on-site-features","depth":2,"children":[{"title":"Product and cart tracking","slug":"product-and-cart-tracking","depth":3,"children":[]},{"title":"Back-in-stock requests","slug":"back-in-stock-requests","depth":3,"children":[]},{"title":"Who becomes a contact","slug":"who-becomes-a-contact","depth":3,"children":[]},{"title":"Capture your existing forms","slug":"capture-your-existing-forms","depth":3,"children":[]}]},{"title":"Watch it working","slug":"watch-it-working","depth":2,"children":[]},{"title":"Verify the connection","slug":"verify-the-connection","depth":2,"children":[]},{"title":"Disconnecting","slug":"disconnecting","depth":2,"children":[]},{"title":"Troubleshooting","slug":"troubleshooting","depth":2,"children":[]},{"title":"Recommended next steps","slug":"recommended-next-steps","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"senderz","siteName":"Senderz","title":"WooCommerce - Senderz","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"he":{"href":"/he/getting-started/introduction","matchLevel":4},"en":{"href":"/en/integrations/woocommerce","matchLevel":0}}},"lastModified":"2026-10-04T17:59:10.070Z","originalFileLocation":"en/integrations/woocommerce.mdx","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Connect a WooCommerce store with the Senderz Marketing plugin in one approval, then sync customers, orders, products, checkout consent and on-site activity.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Senderz\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/senderz/i8tUhenf4EX6qIDZ/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/senderz/i8tUhenf4EX6qIDZ/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/senderz/i8tUhenf4EX6qIDZ/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/senderz/i8tUhenf4EX6qIDZ/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/senderz/i8tUhenf4EX6qIDZ/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/senderz/i8tUhenf4EX6qIDZ/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/senderz/i8tUhenf4EX6qIDZ/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/senderz/i8tUhenf4EX6qIDZ/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/senderz/i8tUhenf4EX6qIDZ/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"WooCommerce - Senderz\">\u003cmeta data-mint-head property=\"og:description\" content=\"Connect a WooCommerce store with the Senderz Marketing plugin in one approval, then sync customers, orders, products, checkout consent and on-site activity.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Senderz\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.senderz.app/en/integrations/woocommerce\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://senderz.mintlify.site/_mintlify/api/og/v2?division=E-commerce\u0026amp;title=WooCommerce\u0026amp;description=Connect+a+WooCommerce+store+with+the+Senderz+Marketing+plugin+in+one+approval%2C+then+sync+customers%2C+orders%2C+products%2C+checkout+consent+and+on-site+activity.\u0026amp;theme=5f67aa4bce0831aa15b0a1ff\u0026amp;signature=7f5e03f1f3589bfd688b596d1aa0a64cb69175b591e5916a104f1464b1c09238\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"WooCommerce - Senderz\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Connect a WooCommerce store with the Senderz Marketing plugin in one approval, then sync customers, orders, products, checkout consent and on-site activity.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://senderz.mintlify.site/_mintlify/api/og/v2?division=E-commerce\u0026amp;title=WooCommerce\u0026amp;description=Connect+a+WooCommerce+store+with+the+Senderz+Marketing+plugin+in+one+approval%2C+then+sync+customers%2C+orders%2C+products%2C+checkout+consent+and+on-site+activity.\u0026amp;theme=5f67aa4bce0831aa15b0a1ff\u0026amp;signature=7f5e03f1f3589bfd688b596d1aa0a64cb69175b591e5916a104f1464b1c09238\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/senderz/i8tUhenf4EX6qIDZ/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Senderz\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#141414\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.senderz.app/en/integrations/woocommerce\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/en/integrations/woocommerce.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.senderz.app/#organization\",\"name\":\"Senderz\",\"url\":\"https://docs.senderz.app\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/senderz/TYfOlOCqzxvvnafR/logo/logo-light.png?fit=max\u0026auto=format\u0026n=TYfOlOCqzxvvnafR\u0026q=85\u0026s=716b2d481f50aa8a6539edb6be85247f\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.senderz.app#website\",\"name\":\"Senderz\",\"url\":\"https://docs.senderz.app\",\"publisher\":{\"@id\":\"https://docs.senderz.app/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.senderz.app/en/integrations/woocommerce#webpage\",\"url\":\"https://docs.senderz.app/en/integrations/woocommerce\",\"name\":\"WooCommerce\",\"description\":\"Connect a WooCommerce store with the Senderz Marketing plugin in one approval, then sync customers, orders, products, checkout consent and on-site activity.\",\"dateModified\":\"2026-10-04T17:59:10.070Z\",\"isPartOf\":{\"@id\":\"https://docs.senderz.app#website\"},\"breadcrumb\":{\"@id\":\"https://docs.senderz.app/en/integrations/woocommerce#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.senderz.app/en/integrations/woocommerce#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"E-commerce\",\"item\":\"https://docs.senderz.app/en/integrations/shopify\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"WooCommerce\",\"item\":\"https://docs.senderz.app/en/integrations/woocommerce\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.senderz.app/en/integrations/woocommerce#article\",\"headline\":\"WooCommerce\",\"name\":\"WooCommerce\",\"description\":\"Connect a WooCommerce store with the Senderz Marketing plugin in one approval, then sync customers, orders, products, checkout consent and on-site activity.\",\"url\":\"https://docs.senderz.app/en/integrations/woocommerce\",\"mainEntityOfPage\":{\"@id\":\"https://docs.senderz.app/en/integrations/woocommerce#webpage\"},\"dateModified\":\"2026-10-04T17:59:10.070Z\",\"publisher\":{\"@id\":\"https://docs.senderz.app/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.senderz.app#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Senderz\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Senderz\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/en/integrations/woocommerce.md","siteName":"Senderz","nav":{"global":null,"languages":[{"language":"he","default":true,"pages":[{"title":"he","href":"/he/getting-started/introduction"}]},{"language":"en","tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":"/en/getting-started/introduction"}]},{"tab":"Integrations","groups":[{"group":"Overview","pages":[{"title":"Integrations overview","icon":"plug","href":"/en/integrations/overview"}]},{"group":"E-commerce","pages":[{"title":"Shopify","description":"Install Senderz from the Shopify App Store or connect a store from inside Senderz, then sync customers, orders, products and storefront behaviour.","icon":"shopify","href":"/en/integrations/shopify"},{"title":"WooCommerce","icon":"wordpress","href":"/en/integrations/woocommerce"},{"title":"Konimbo","description":"Connect a Konimbo store to Senderz: API token, automatic webhooks, customer and order sync, the storefront snippet, and the limits that are real today.","icon":"store","href":"/en/integrations/konimbo"},{"title":"Magento 2","icon":"store","href":"/en/integrations/magento"},{"title":"Wix","icon":"store","href":"/en/integrations/wix"},{"title":"WordPress","icon":"wordpress","href":"/en/integrations/wordpress"},{"title":"Payments and invoicing","icon":"credit-card","href":"/en/integrations/payments-and-invoicing"},{"title":"Reviews and loyalty apps","icon":"star","href":"/en/integrations/reviews-and-loyalty"}]},{"group":"Automation \u0026 no-code","pages":[{"title":"Make","icon":"puzzle-piece","href":"/en/integrations/make"},{"title":"Outbound webhooks","icon":"arrow-right-from-bracket","href":"/en/integrations/webhooks-outbound"},{"title":"Inbound webhooks","icon":"arrow-right-to-bracket","href":"/en/integrations/webhooks-inbound"},{"title":"Embedded forms","icon":"input-text","href":"/en/integrations/embedded-forms"},{"title":"Import from Google Sheets","icon":"table","href":"/en/integrations/google-sheets"}]},{"group":"Advertising","pages":[{"title":"Meta audiences","icon":"facebook","href":"/en/integrations/meta-audiences"},{"title":"Google Customer Match","icon":"google","href":"/en/integrations/google-customer-match"}]},{"group":"AI","pages":[{"title":"AI provider (your API key)","icon":"wand-magic-sparkles","href":"/en/integrations/ai-provider"},{"title":"MCP server (AI assistant access)","icon":"plug","href":"/en/integrations/mcp"}]}]},{"tab":"API reference","pages":[{"title":"API reference","href":"/en/api-reference/introduction"}]}]}]},"basePath":"","title":"WooCommerce - Senderz","buildId":"dpl_8hoxaqFTU7hTr6A2fUraxAyjuiZo","deploymentId":"dpl_8hoxaqFTU7hTr6A2fUraxAyjuiZo","dynamics":[],"chunks":[]}