{"id":346619,"date":"2026-08-02T13:37:17","date_gmt":"2026-08-02T13:37:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/postbeagle-for-woocommerce\/"},"modified":"2026-08-02T13:36:57","modified_gmt":"2026-08-02T13:36:57","slug":"postbeagle-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/postbeagle-for-woocommerce\/","author":13276917,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.5.1","stable_tag":"1.5.1","tested":"7.0.2","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"PostBeagle for WooCommerce","header_author":"PostBeagle","header_description":"Integrate PostBeagle email marketing with WooCommerce checkout","assets_banners_color":"d7e6f6","last_updated":"2026-08-02 13:36:57","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/postbeagle.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":37,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.5.1":{"tag":"1.5.1","author":"ZoidB","date":"2026-08-02 13:36:57"}},"upgrade_notice":{"1.5.1":"<p>Browsing-behaviour tracking (product views and the click-through cookie) is now off by default. Enable it under Settings \u2192 Data Collection if you use it.<\/p>","1.5.0":"<p>Important security fix: the API key is no longer exposed to the browser. Abandoned cart recovery and revenue attribution are now off by default \u2014 if you relied on either, re-enable them under Settings \u2192 Data Collection.<\/p>","1.4.0":"<p>Internal rename of all plugin identifiers for WordPress.org compliance. Settings and data migrate automatically on first load after upgrade \u2014 no action needed.<\/p>","1.3.0":"<p>Adds HPOS compatibility, block checkout support, sodium-encrypted API key storage, automation tag steps, and WP.org compliance improvements. Minimum WooCommerce 8.9 required.<\/p>","1.1.0":"<p>Adds WooCommerce automations, email capture (shortcode\/block\/Elementor), form integrations, lifetime-value sync, and bulk customer import.<\/p>","1.0.0":"<p>Initial release of PostBeagle for WooCommerce.<\/p>"},"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3631812,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3631812,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3631812,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"postbeagle\/signup":{"name":"postbeagle\/signup","title":"PostBeagle Signup"}},"tagged_versions":["1.5.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3631812,"resolution":"1","location":"assets","locale":"","width":1243,"height":629},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3631812,"resolution":"2","location":"assets","locale":"","width":1249,"height":751},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3631812,"resolution":"3","location":"assets","locale":"","width":1232,"height":1265},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3631812,"resolution":"4","location":"assets","locale":"","width":1240,"height":1268},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3631812,"resolution":"5","location":"assets","locale":"","width":1234,"height":561}},"screenshots":{"1":"General settings \u2014 enable PostBeagle and show the opt-in checkbox at checkout","2":"Connection \u2014 enter your API key and verify the connection to PostBeagle","3":"WooCommerce automations \u2014 welcome, first purchase, repeat purchase, product purchased, abandoned cart, and win-back","4":"Form integrations \u2014 Contact Form 7, WPForms, Fluent Forms, and Gravity Forms","5":"Import existing customers \u2014 one-time batched import with lifetime value"}},"plugin_section":[],"plugin_tags":[3148,264,455,274239,286],"plugin_category":[42,45],"plugin_contributors":[274240],"plugin_business_model":[],"class_list":["post-346619","plugin","type-plugin","status-publish","hentry","plugin_tags-checkout","plugin_tags-email-marketing","plugin_tags-newsletter","plugin_tags-postbeagle","plugin_tags-woocommerce","plugin_category-contact-forms","plugin_category-ecommerce","plugin_contributors-zoidb","plugin_committers-zoidb"],"banners":{"banner":"https:\/\/ps.w.org\/postbeagle-for-woocommerce\/assets\/banner-772x250.png?rev=3631812","banner_2x":"https:\/\/ps.w.org\/postbeagle-for-woocommerce\/assets\/banner-1544x500.png?rev=3631812","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/postbeagle-for-woocommerce\/assets\/icon-256x256.png?rev=3631812","icon_2x":"https:\/\/ps.w.org\/postbeagle-for-woocommerce\/assets\/icon-256x256.png?rev=3631812","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/postbeagle-for-woocommerce\/assets\/screenshot-1.png?rev=3631812","caption":"General settings \u2014 enable PostBeagle and show the opt-in checkbox at checkout"},{"src":"https:\/\/ps.w.org\/postbeagle-for-woocommerce\/assets\/screenshot-2.png?rev=3631812","caption":"Connection \u2014 enter your API key and verify the connection to PostBeagle"},{"src":"https:\/\/ps.w.org\/postbeagle-for-woocommerce\/assets\/screenshot-3.png?rev=3631812","caption":"WooCommerce automations \u2014 welcome, first purchase, repeat purchase, product purchased, abandoned cart, and win-back"},{"src":"https:\/\/ps.w.org\/postbeagle-for-woocommerce\/assets\/screenshot-4.png?rev=3631812","caption":"Form integrations \u2014 Contact Form 7, WPForms, Fluent Forms, and Gravity Forms"},{"src":"https:\/\/ps.w.org\/postbeagle-for-woocommerce\/assets\/screenshot-5.png?rev=3631812","caption":"Import existing customers \u2014 one-time batched import with lifetime value"}],"raw_content":"<!--section=description-->\n<p>PostBeagle for WooCommerce seamlessly integrates your WooCommerce store with PostBeagle email marketing platform. Allow customers to opt-in to your email list during checkout and automatically sync their information to PostBeagle.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Add opt-in checkbox to WooCommerce checkout<\/li>\n<li>Customize opt-in checkbox text<\/li>\n<li>Automatically sync opted-in customers to PostBeagle, tagged first-time vs. repeat<\/li>\n<li>Map WooCommerce order data to PostBeagle custom fields (incl. customer lifetime value and order count)<\/li>\n<li>One-time bulk import of existing customers with lifetime value<\/li>\n<li>WooCommerce automations: welcome, first purchase, repeat purchase, product purchased, abandoned cart, and win-back \u2014 each can tag the customer and trigger a PostBeagle automation<\/li>\n<li>Email capture anywhere: [postbeagle_signup] shortcode, Gutenberg block, and Elementor widget<\/li>\n<li>Form integrations: Contact Form 7, WPForms, Fluent Forms, and Gravity Forms (add contact, apply tags, trigger automations)<\/li>\n<li>Support for double opt-in workflows<\/li>\n<li>Abandoned cart recovery, revenue attribution and browsing-behaviour tracking are all off by default \u2014 you choose what data leaves your store (see External Services below)<\/li>\n<li>Comprehensive error logging and debugging<\/li>\n<li>Secure API key storage<\/li>\n<li>Never disrupts the checkout process<\/li>\n<\/ul>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 5.8 or higher<\/li>\n<li>WooCommerce 8.9 or higher<\/li>\n<li>PHP 7.4 or higher (PHP 7.2+ with the sodium PECL extension, or PHP 7.2+ compiled with --with-sodium)<\/li>\n<li>PHP sodium extension (libsodium) \u2014 included by default in PHP 7.2+; required for secure API key encryption. The plugin will fall back to a weaker encoding method if sodium is unavailable, but this is not recommended.<\/li>\n<li>PostBeagle account with API access<\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<p>This plugin is a client for PostBeagle, a third-party email marketing service. It sends data to <code>https:\/\/api.postbeagle.com<\/code> and does not function without a PostBeagle account.<\/p>\n\n<p>Nothing is transmitted until you enter an API key and enable the plugin.<\/p>\n\n<p><strong>Always active once configured<\/strong><\/p>\n\n<ul>\n<li><code>POST \/api\/contacts<\/code> \u2014 when a customer ticks the newsletter opt-in checkbox at checkout (unchecked by default). Sends: email, first name, last name, tags, and any custom fields you have mapped (which may include order total, products, categories, lifetime value and order count).<\/li>\n<li><code>POST \/api\/events<\/code> \u2014 automation events you have explicitly enabled (welcome, first purchase, repeat purchase, product purchased, win-back). Sends: email plus the relevant order or product data.<\/li>\n<li><code>GET \/api\/email-lists<\/code> \u2014 retrieves your lists for the settings screen. Sends: no customer data.<\/li>\n<li><code>GET \/api\/suppressions\/changes<\/code> \u2014 retrieves unsubscribes so they can be honoured locally. Sends: no customer data.<\/li>\n<li><code>POST \/api\/webhooks\/automation\/{id}<\/code> and <code>POST \/api\/automation-recipes\/install<\/code> \u2014 used by the form integrations and the one-click automation setup button. Sends: email and tags.<\/li>\n<\/ul>\n\n<p>Failed requests are retried from a local outbox table.<\/p>\n\n<p><strong>Off by default \u2014 you must enable these<\/strong><\/p>\n\n<ul>\n<li><strong>Abandoned cart recovery<\/strong> (Settings \u2192 Data Collection). In the recommended \"capture during checkout\" mode, the shopper's email address is sent as they type it at checkout, together with their cart contents, <em>before<\/em> the order is placed. This is how abandoned cart recovery works, and it means personal data is processed before purchase \u2014 review your local privacy obligations before enabling. Switch to \"only after a completed order\" to avoid pre-purchase capture entirely, or turn on Privacy mode to capture only shoppers who ticked the opt-in checkbox. Endpoints: <code>POST \/api\/events<\/code>, <code>GET \/api\/carts\/{token}\/snapshot<\/code>.<\/li>\n<li><strong>Revenue attribution<\/strong> (Settings \u2192 Data Collection). Reports every paid order \u2014 including orders from customers who did not opt in \u2014 so campaigns can be credited with the sales they drove. Sends: billing email, order id and number, total, currency, status, timestamp, coupon codes, and line items (product id, SKU, name, categories, quantity, price).<\/li>\n<li><strong>Browsing behaviour<\/strong> (Settings \u2192 Data Collection). Sets a first-party <code>pb_cid<\/code> cookie (90 days, HttpOnly) when a subscriber clicks through from a PostBeagle email, so the visit can be credited to the campaign that sent it, and reports the products that visitor views to <code>POST \/api\/events<\/code>. Only visitors already identified by that cookie or by being logged in are tracked; anonymous visitors are never tracked. <strong>When this setting is off no cookie is written and no product views are sent<\/strong> \u2014 this is the plugin's only use of cookies.<\/li>\n<\/ul>\n\n<p><strong>Terms and privacy<\/strong><\/p>\n\n<ul>\n<li><a href=\"https:\/\/postbeagle.com\/terms\">PostBeagle Terms of Service<\/a><\/li>\n<li><a href=\"https:\/\/postbeagle.com\/privacy\">PostBeagle Privacy Policy<\/a><\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to <code>\/wp-content\/plugins\/postbeagle-for-woocommerce\/<\/code><\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress<\/li>\n<li>Go to WooCommerce &gt; PostBeagle Settings<\/li>\n<li>Enter your PostBeagle API credentials<\/li>\n<li>Select your target email list<\/li>\n<li>Customize the opt-in checkbox text (optional)<\/li>\n<li>Configure field mappings (optional)<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20postbeagle%20account%3F\"><h3>Do I need a PostBeagle account?<\/h3><\/dt>\n<dd><p>Yes, you need an active PostBeagle account with API access.<\/p><\/dd>\n<dt id=\"will%20this%20slow%20down%20my%20checkout%3F\"><h3>Will this slow down my checkout?<\/h3><\/dt>\n<dd><p>No. Requests to PostBeagle use a short timeout and are retried in the background from a local queue, so the checkout never waits on them and never fails because of them.<\/p><\/dd>\n<dt id=\"when%20exactly%20is%20data%20sent%3F\"><h3>When exactly is data sent?<\/h3><\/dt>\n<dd><p>Out of the box, only when a customer ticks the newsletter opt-in checkbox at checkout, and only after the order is placed.<\/p>\n\n<p>Three optional features send more than that, and each is off until you switch it on under WooCommerce \u2192 PostBeagle \u2192 Data Collection:<\/p>\n\n<ul>\n<li><strong>Abandoned cart recovery<\/strong> in \"capture during checkout\" mode sends the shopper's email and cart contents <em>before<\/em> the order is placed. Choose \"only after a completed order\" to avoid that entirely.<\/li>\n<li><strong>Revenue attribution<\/strong> sends every paid order, including from customers who did not opt in.<\/li>\n<li><strong>Browsing behaviour<\/strong> sets a cookie when a subscriber clicks through from a PostBeagle email, and reports the products they view.<\/li>\n<\/ul>\n\n<p>See the External Services section below for the full detail.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20the%20api%20call%20fails%3F\"><h3>What happens if the API call fails?<\/h3><\/dt>\n<dd><p>The checkout process continues normally. Failed syncs are logged for review in the WordPress debug log.<\/p><\/dd>\n<dt id=\"does%20this%20support%20double%20opt-in%3F\"><h3>Does this support double opt-in?<\/h3><\/dt>\n<dd><p>Yes, the plugin respects double opt-in settings configured in your PostBeagle account.<\/p><\/dd>\n<dt id=\"can%20i%20map%20custom%20fields%3F\"><h3>Can I map custom fields?<\/h3><\/dt>\n<dd><p>Yes, you can map WooCommerce order data (order total, products, categories, etc.) to PostBeagle custom fields.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.5.1<\/h4>\n\n<ul>\n<li>Product view tracking and the <code>pb_cid<\/code> click-through cookie are now off by default behind their own Browsing behaviour setting \u2014 no cookie is written and no browsing data is sent unless the store owner turns it on<\/li>\n<li>Clarified in the readme exactly when data is sent, and corrected an FAQ answer that contradicted the External Services section<\/li>\n<li>Added a sanitize callback to the last remaining register_setting() call without one<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>Security: the account API key is no longer sent to the browser. Product view events now go through an authenticated admin-ajax endpoint, and the key never leaves the server<\/li>\n<li>Abandoned cart recovery is now off by default, with a capture mode choice (\"during checkout\" or \"only after a completed order\") and an optional Privacy mode that captures only shoppers who ticked the opt-in checkbox<\/li>\n<li>Revenue attribution (sending every paid order, including from customers who did not opt in) is now off by default and controlled by its own setting<\/li>\n<li>The <code>pb_cid<\/code> cookie is no longer set on a site that has not been enabled and connected to an account<\/li>\n<li>Rewrote the External Services disclosure to list every endpoint, every data category, and the exact consent model<\/li>\n<li>Fixed a fatal error on sites running Elementor, caused by a stale file path left over from the 1.4.0 rename<\/li>\n<li>Fixed a translation call that ran before the text domain was ready, which triggered a notice on WordPress 6.7+<\/li>\n<li>Fixed abandoned cart recovery links, which could never be redeemed: the code that built them and the code that validated them had drifted apart on the signing secret, the meaning of the embedded timestamp, and the base64 alphabet. Generation and validation now share one implementation, and links already in circulation are still accepted<\/li>\n<li>Fixed abandoned cart and win-back timing on sites not set to UTC: schedules and inactivity comparisons used site-local time where a UTC timestamp was required, skewing both by the site's UTC offset<\/li>\n<li>Custom table schema changes now apply on plugin update, not only on activation<\/li>\n<li>Log directory is now protected on nginx as well as Apache<\/li>\n<li>Suppression sync now writes to the plugin log instead of the PHP error log<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Renamed all plugin identifiers from the <code>pb_<\/code> prefix to <code>postbeagle_<\/code> for WordPress.org coding-standards compliance \u2014 classes, constants, options, transients, AJAX actions, cron hooks, script handles, and the three custom tables<\/li>\n<li>Added a one-time upgrade migration that moves existing settings, pending abandoned-cart timers, and custom table data to the new names \u2014 no reconfiguration required<\/li>\n<li>Order meta keys (<code>_pb_*<\/code>) and the <code>pb_cid<\/code> identity cookie are intentionally unchanged, so historical order data and links in already-delivered emails keep working<\/li>\n<li><code>PB_ENCRYPTION_KEY<\/code> in wp-config.php is still honoured alongside the new <code>POSTBEAGLE_ENCRYPTION_KEY<\/code> name<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Added HPOS (High-Performance Order Storage) compatibility \u2014 plugin now works correctly with WooCommerce custom order tables<\/li>\n<li>Added block checkout support via the WooCommerce Additional Checkout Field API (WC 8.9+)<\/li>\n<li>Added consent record storage for GDPR compliance (records label, timestamp, checkout type, plugin version)<\/li>\n<li>Upgraded API key storage to sodium encryption (auto-migrates from legacy format)<\/li>\n<li>Masked API key display in settings \u2014 key never appears in page source<\/li>\n<li>Implemented automation tag steps (add_tag, remove_tag) in the worker<\/li>\n<li>Added External Services disclosure for WP.org compliance<\/li>\n<li>Fixed uninstall to use batched HPOS-safe cleanup<\/li>\n<li>Updated minimum WooCommerce requirement to 8.9<\/li>\n<li>Various security and coding standards improvements for WP.org Plugin Check compliance<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>WooCommerce sync: products, categories, SKUs, order value, customer lifetime value and order count as custom fields<\/li>\n<li>First-time vs. repeat customer tagging at checkout<\/li>\n<li>One-time bulk import of existing customers (batched) with lifetime value<\/li>\n<li>WooCommerce automations: welcome, first purchase, repeat purchase, product purchased, abandoned cart, win-back<\/li>\n<li>Email capture: [postbeagle_signup] shortcode, Gutenberg block, and Elementor widget<\/li>\n<li>Form integrations: Contact Form 7, WPForms, Fluent Forms, Gravity Forms (contact + tags + automation trigger)<\/li>\n<li>Implemented the previously-missing PB_Field_Mapper and a shared contact-sync service<\/li>\n<li>Added a self-contained unit test suite (tests\/run.php)<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>API credential configuration<\/li>\n<li>List selection<\/li>\n<li>Checkout opt-in checkbox<\/li>\n<li>Custom field mapping<\/li>\n<li>Error logging and debugging<\/li>\n<li>Double opt-in support<\/li>\n<\/ul>","raw_excerpt":"Integrate PostBeagle email marketing with WooCommerce checkout to automatically add customers to your email lists.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/346619","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=346619"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/zoidb"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=346619"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=346619"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=346619"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=346619"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=346619"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=346619"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}