=== WP Fusion Lite - Marketing Automation and CRM Integration for WordPress ===
Contributors: verygoodplugins
Tags: crm, marketing automation, sync, integration, membership
Requires at least: 4.6
Requires PHP: 7.4
Tested up to: 7.0
Stable tag: 3.47.13
License: GPLv3 or later
License URI: http://www.gnu.org/licenses/gpl-3.0.html
Source Code: https://github.com/verygoodplugins/wp-fusion-lite

WP Fusion Lite synchronizes your WordPress users with contact records in your CRM or marketing automation system.

== Description ==

WP Fusion Lite synchronizes your WordPress users with leading CRMs and marketing automation systems, keeps user profiles in sync with CRM contact records, and lets you protect site content based on CRM tags.

= Features =

* Automatically [create new contacts in your CRM](https://wpfusion.com/documentation/getting-started/general-settings/?utm_campaign=free-plugin&utm_source=wp-org#automatically-create-contact-records-for-new-users) when users register in WordPress
* [Restrict access to site content](https://wpfusion.com/documentation/getting-started/access-control/?utm_campaign=free-plugin&utm_source=wp-org) using tags and lists in your CRM
* [Synchronize any WordPress user data]((https://wpfusion.com/documentation/getting-started/syncing-contact-fields/?utm_campaign=free-plugin&utm_source=wp-org)) with custom fields in your CRM
* [Apply tags when users register](https://wpfusion.com/documentation/getting-started/general-settings/?utm_campaign=free-plugin&utm_source=wp-org#assign-tags)
* [Import contacts from your CRM](https://wpfusion.com/documentation/tutorials/import-users/?utm_campaign=free-plugin&utm_source=wp-org) as new WordPress users and generate passwords for them
* [Export WordPress users](https://wpfusion.com/documentation/tutorials/batch-operations/?utm_campaign=free-plugin&utm_source=wp-org) to your CRM as contact records
* [Track visitor activity](https://wpfusion.com/documentation/tutorials/site-tracking-scripts/?utm_campaign=free-plugin&utm_source=wp-org) using your CRM's tracking scripts (with supported CRMs)

> WP Fusion is a critical tool in our toolkit for our clients, and we VERY strongly encourage our clients to use WP Fusion if they have any kind of CRM. The software is top notch, and the support team is fast and friendly. Nothing but love for WP Fusion from my team here at House Trevethan.

> Allen Trevethan - House Trevethan

= Lite Version =

This is a free version of [WP Fusion](https://wpfusion.com/?utm_campaign=free-plugin&utm_source=wp-org). WP Fusion Lite synchronizes your **registered WordPress users** with your connected CRM, including their name and email address.

It does not apply tags based on purchases or course activity, sync form entries, sync customers, or detect any data generated by other plugins.

For integration with WooCommerce, LearnDash, Gravity Forms, Elementor and [over 100 other popular WordPress plugins](https://wpfusion.com/documentation/integrations/?utm_campaign=free-plugin&utm_source=wp-org), check out [one of our paid licenses](https://wpfusion.com/pricing/?utm_campaign=free-plugin&utm_source=wp-org).

[youtube https://www.youtube.com/watch?v=XolMCxnDMvQ] 

= Benefits =

* ⚡ Replace Zapier, Integromat, and other integration tools. WP Fusion gives you a direct data sync between your site and your CRM, with no delays or limits.

* 🔒 Create easy to manage membership sites with drip-released content using timers and logic in your CRM.

* 💎 Personalize your site by displaying data from CRM contact records, and showing / hiding content based on a user's CRM tags or lists.

> WP Fusion allows us to provide tailored customer experiences in WordPress that wow every time.

> Hundreds of plugins that used to be one size fits all, can now perform differently for each Ontraport contact. For example, a low scoring Ontraport contact can be presented with a winback customer journey in WordPress.

> This has allowed our clients to increase customer engagement and retention. It's the only solution that should be considered for any WordPress integration.

> Josh Schleifer - Triple Canopy

= Docs and Tutorials =

 * 📦 [Installation Guide](https://wpfusion.com/documentation/getting-started/installation-guide/?utm_campaign=free-plugin&utm_source=wp-org)
 * 🔒 [Controlling access to content with CRM tags](https://wpfusion.com/documentation/getting-started/access-control/?utm_campaign=free-plugin&utm_source=wp-org)
 * 📝 [Shortcodes](https://wpfusion.com/documentation/getting-started/shortcodes/?utm_campaign=free-plugin&utm_source=wp-org)
 * 👀 [Displaying CRM data in WordPress](https://wpfusion.com/documentation/tutorials/displaying-crm-data-in-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
 * 🔥 [Sync WordPress users with CRM contact records](https://wpfusion.com/documentation/getting-started/syncing-contact-fields/?utm_campaign=free-plugin&utm_source=wp-org)
 * 🔑 [Import users from your CRM and generate passwords](https://wpfusion.com/documentation/tutorials/import-users/?utm_campaign=free-plugin&utm_source=wp-org)
 * 📤 [Export users and metadata to your CRM](https://wpfusion.com/documentation/tutorials/batch-operations/?utm_campaign=free-plugin&utm_source=wp-org)
 * 📈 [Sync Google Analytics and other leadsource variables with your CRM](https://wpfusion.com/documentation/tutorials/lead-source-tracking/?utm_campaign=free-plugin&utm_source=wp-org)
 * 🏷️ [Track user activity using tags](https://wpfusion.com/documentation/getting-started/tracking-user-activity/?utm_campaign=free-plugin&utm_source=wp-org)
 * 🔮 [Auto login links](https://wpfusion.com/documentation/tutorials/auto-login-links/?utm_campaign=free-plugin&utm_source=wp-org)

> WP Fusion builds a critical bridge between our WooCommerce powered ecommerce site and LifterLMS powered training site to our CRM ActiveCampaign. It was easy to set up. The technical support is above and beyond anything I've ever seen. What it does is clearly intelligently designed and well built.

> Chris Badgett - LifterLMS

[youtube https://www.youtube.com/watch?v=wzRajxCUxNI]

= Supported CRMs and marketing automation platforms =

* [ActiveCampaign](https://wpfusion.com/documentation/installation-guides/how-to-connect-activecampaign-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [AgileCRM](https://wpfusion.com/documentation/installation-guides/how-to-connect-agiilecrm-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Autopilot](https://wpfusion.com/documentation/installation-guides/how-to-connect-autopilot-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Autonami](https://wpfusion.com/documentation/installation-guides/how-to-connect-autonami-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Bento](https://wpfusion.com/documentation/installation-guides/how-to-connect-bento-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [BirdSend](https://wpfusion.com/documentation/installation-guides/how-to-connect-birdsend-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Capsule](https://wpfusion.com/documentation/installation-guides/how-to-connect-capsule-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Constant Contact](https://wpfusion.com/documentation/installation-guides/how-to-connect-constant-contact-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [ConvertKit](https://wpfusion.com/documentation/installation-guides/how-to-connect-convertkit-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Copper](https://wpfusion.com/documentation/installation-guides/how-to-connect-copper-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Customerly](https://wpfusion.com/documentation/installation-guides/how-to-connect-customerly-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Customer.io](https://wpfusion.com/documentation/installation-guides/how-to-connect-customer-io-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Drift](https://wpfusion.com/documentation/installation-guides/how-to-connect-drift-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Drip](https://wpfusion.com/documentation/installation-guides/how-to-connect-drip-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [EmailOctopus](https://wpfusion.com/documentation/installation-guides/how-to-connect-emailoctopus-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Emercury](https://wpfusion.com/documentation/installation-guides/how-to-connect-emercury-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Encharge](https://wpfusion.com/documentation/installation-guides/how-to-connect-encharge-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Engage](https://wpfusion.com/documentation/installation-guides/how-to-connect-engage-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [EngageBay](https://wpfusion.com/documentation/installation-guides/how-to-connect-engagebay-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Flexie](https://wpfusion.com/documentation/installation-guides/how-to-connect-flexie-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [FluentCRM (same site or REST API)](https://wpfusion.com/documentation/installation-guides/how-to-connect-fluentcrm-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [GetResponse](https://wpfusion.com/documentation/installation-guides/how-to-connect-getresponse-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Gist](https://wpfusion.com/documentation/installation-guides/how-to-connect-gist-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Groundhogg (same site or REST API)](https://wpfusion.com/documentation/installation-guides/how-to-connect-groundhogg-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Growmatik](https://wpfusion.com/documentation/installation-guides/how-to-connect-growmatik-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [HighLevel](https://wpfusion.com/documentation/installation-guides/how-to-connect-highlevel-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [HubSpot](https://wpfusion.com/documentation/installation-guides/how-to-connect-hubspot-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Infusionsoft](https://wpfusion.com/documentation/installation-guides/how-to-connect-infusionsoft-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Intercom](https://wpfusion.com/documentation/installation-guides/how-to-connect-intercom-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Jetpack CRM](https://wpfusion.com/documentation/installation-guides/how-to-connect-jetpack-crm-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Kartra](https://wpfusion.com/documentation/installation-guides/how-to-connect-kartra-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Kit](https://wpfusion.com/documentation/installation-guides/how-to-connect-kit-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Klaviyo](https://wpfusion.com/documentation/installation-guides/how-to-connect-klaviyo-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Klick-Tipp](https://wpfusion.com/documentation/installation-guides/how-to-connect-klick-tipp-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Loopify](https://wpfusion.com/documentation/installation-guides/how-to-connect-loopify-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [MailChimp](https://wpfusion.com/documentation/installation-guides/how-to-connect-mailchimp-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [MailEngine](https://wpfusion.com/documentation/installation-guides/how-to-connect-mailengine-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [MailerLite](https://wpfusion.com/documentation/installation-guides/how-to-connect-mailerlite-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Mailjet](https://wpfusion.com/documentation/installation-guides/how-to-connect-mailjet-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [MailPoet](https://wpfusion.com/documentation/installation-guides/how-to-connect-mailpoet-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Maropost](https://wpfusion.com/documentation/installation-guides/how-to-connect-maropost-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Mautic](https://wpfusion.com/documentation/installation-guides/how-to-connect-mautic-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Microsoft Dynamics 365](https://wpfusion.com/documentation/installation-guides/how-to-connect-microsoft-dynamics-365-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [MooSend](https://wpfusion.com/documentation/installation-guides/how-to-connect-moosend-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [NationBuilder](https://wpfusion.com/documentation/installation-guides/how-to-connect-nationbuilder-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Omnisend](https://wpfusion.com/documentation/installation-guides/how-to-connect-omnisend-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Ontraport](https://wpfusion.com/documentation/installation-guides/how-to-connect-ontraport-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Ortto](https://wpfusion.com/documentation/installation-guides/how-to-connect-ortto-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Pipedrive](https://wpfusion.com/documentation/installation-guides/how-to-connect-pipedrive-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Platform.ly](https://wpfusion.com/documentation/installation-guides/how-to-connect-platform-ly-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [PulseTechnologyCRM](https://wpfusion.com/documentation/installation-guides/how-to-connect-pulsetechnologycrm-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Quentn](https://wpfusion.com/documentation/installation-guides/how-to-connect-quentn-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Salesflare](https://wpfusion.com/documentation/installation-guides/how-to-connect-salesflare-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Salesforce](https://wpfusion.com/documentation/installation-guides/how-to-connect-salesforce-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [SendFox](https://wpfusion.com/documentation/installation-guides/how-to-connect-sendfox-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Sender.net](https://wpfusion.com/documentation/installation-guides/how-to-connect-sender-net-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [SendinBlue](https://wpfusion.com/documentation/installation-guides/how-to-connect-sendinblue-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Sendlane](https://wpfusion.com/documentation/installation-guides/how-to-connect-sendlane-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Tubular](https://wpfusion.com/documentation/installation-guides/how-to-connect-tubular-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [UserEngage](https://wpfusion.com/documentation/installation-guides/how-to-connect-userengage-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [WP ERP](https://wpfusion.com/documentation/installation-guides/how-to-connect-wp-erp-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)
* [Zoho](https://wpfusion.com/documentation/installation-guides/how-to-connect-zoho-to-wordpress/?utm_campaign=free-plugin&utm_source=wp-org)


For more info on CRM compatibility, [check out the compatibility table](https://wpfusion.com/documentation/faq/crm-compatibility-table/?utm_campaign=free-plugin&utm_source=wp-org).

> WP Fusion is one of my secret weapons for getting WordPress to keep our member's data synced with our CRM. This makes everything work so much better when you don't have to worry about your members having issues logging into the member's area.

> If you have or are considering having a membership website using WordPress this plugin is a must-have. It will save you hours of time and frustration.

> Greg Russell - SuccessTeam Marketing

== Screenshots ==

1. Sync any WordPress user fields with contact records in your CRM
2. View and manage contact tags within WordPress
3. Restrict access to content based on a contact's tags
4. Use the Gutenberg block to show and hide content within a page based on a contact's CRM tags

== Installation ==

Upload and activate the plugin, then go to Settings >> WP Fusion. Select your desired CRM, enter your API credentials and click "Connect" to verify the connection.

For CRM-specific setup information, see our [Installation Guide](https://wpfusion.com/documentation/getting-started/installation-guide/?utm_campaign=free-plugin&utm_source=wp-org).

== Frequently Asked Questions ==

= Who is it for? =

WP Fusion is built for anyone using a [CRM or marketing automation platform](https://wpfusion.com/documentation/faq/crm-compatibility-table/?utm_campaign=free-plugin&utm_source=wp-org), and running their website with WordPress.

CRMs empower businesses to track leads, send email broadcasts, manage contact data, track sales, delegate client relationships between employees, and more.

WordPress handles the public facing side of your business: your sales pages, ecommerce platform, support forums, photos and videos, and anything else you want the world to see.

**But your CRM and WordPress don’t talk to each other.**

**This is where WP Fusion comes in.**

WP Fusion acts as a bridge between your WordPress data and CRM data— it allows you to use data from WordPress to power your marketing campaigns, and data from your CRM to personalize the customer experience in WordPress.

= How is it different from Zapier? =

While WP Fusion and Zapier are both integration tools, they work quite differently.

Zapier is a SaaS (Software as a Service) solution that acts as a middleman between your site and your CRM (as well as many other platforms).

When something is updated in WordPress, it is synced to Zapier’s website, and then Zapier syncs the data on to your desired platform. Depending on your plan there is a delay before the data is synced, and/or limit on how many “tasks” you can run each month.

**WP Fusion connects your site directly to your CRM or marketing automation platform** over the API (nothing goes through our website). Because of this the sync of data is instant, secure, and there are no monthly limits.

In addition to syncing data with your CRM, WP Fusion also includes many options for [protecting your WordPress content based on CRM tags](https://wpfusion.com/documentation/getting-started/access-control/?utm_campaign=free-plugin&utm_source=wp-org), and triggering changes in membership level or course enrollments based on CRM automations. This generally isn’t possible with Zapier because Zapier is configured via zapier.com, not inside your WordPress dashboard.

= Why are your version numbers so funny? =

WP Fusion Lite is a copy of the Pro WP Fusion plugin, with support for third-party plugins removed. Each time we release a Lite update, it brings it up to date with the latest version of the Pro plugin. For the full details [see the changelog on our site](https://wpfusion.com/documentation/faq/changelog/?utm_campaign=free-plugin&utm_source=wp-org).

= Can I disable the upgrade nags? =

WP Fusion Lite has a few banners on the settings pages with additional info about the features available in the Pro version.

If you'd prefer not to see these you can disable them with the filter:

`add_filter( 'wp_fusion_hide_upgrade_nags', '__return_true' );`

= How can I report security bugs? =

You can report security bugs through the Patchstack Vulnerability Disclosure Program. The Patchstack team help validate, triage and handle any security vulnerabilities. [Report a security vulnerability.](https://patchstack.com/database/vdp/wp-fusion-lite)

= Where can I find the source code? =

The source code and build files for WP Fusion Lite are available on [GitHub](https://github.com/verygoodplugins/wp-fusion-lite).

= Do you have more FAQs? = 

Of course, see our [Frequently Asked Questions](https://wpfusion.com/documentation/).

== Changelog ==

= 3.47.13 - 6/17/2026 =
* Improved - Dynamics 365 now detects an expired Azure client secret (AADSTS7000222) and returns an actionable message — update WP Fusion and clear PHP OPcache, then re-authorize — instead of a raw Azure error string
* Improved - MailerLite now honors the "Resubscribe" setting when updating existing contacts, re-subscribing previously unsubscribed contacts on update
* Fixed HubSpot returning an "invalid or unknown list" error when WP Fusion created a new list, caused by the v3 API nesting the new list ID under a list object in the response
* Fixed errors that could occur when refreshing the HubSpot list ID migration
* Fixed text and multi-line text fields not being cleared in the CRM when their value was emptied — null values are now preserved through to the CRM as a clear instead of being silently dropped
* Fixed Mailchimp rejecting contact updates that contained an empty merge fields object
* Fixed WordPress admin page styling on the WP Fusion settings pages under WordPress 7.0
* Fixed a PHP warning from the access control "apply tags on view" feature when the global post was unavailable during script enqueue
* Fixed auto-login links and Customer.io syncing failing for email addresses containing a "+" character
* Fixed Brevo double opt-in failing when the template ID was passed as a string instead of an integer

= 3.47.12 - 5/8/2026 =
* Added new "push" webhook action that lets a CRM trigger WP Fusion to push the user's WP meta to the CRM — the reverse of the existing update webhook. Supports an optional `fields` parameter (comma-separated list of WP or CRM field keys) to limit the sync, an async mode for queued processing, and lockout against concurrent update / update_tags / add webhooks for the same contact
* Improved - HubSpot v1→v3 list ID safety net now uses the standard idmapping flow (sync_tags_v3 + /crm/v3/lists/idmapping) directly, anchors the migration cutoff to 2026-05-01 00:00 UTC so April 30 applies consistently across server timezones, and guards the mapping fetch against malformed JSON and non-200 responses
* Improved - Autonami / FunnelKit load_contacts hardening: handle WP_Error from get_contacts(), normalize the contacts array, and guard before foreach
* Fixed Autonami / FunnelKit Automations sync pagination — offset stayed at 0 between pages, causing sync_tags, sync_lists, and load_contacts to re-fetch page 1 endlessly on sites with 100+ tags
* Fixed FluentCRM (REST) bulk import returning no contacts when tags are stored by numeric ID. load_contacts() now uses GET /tags/{id} for numeric tag IDs and keeps the /tags?search= endpoint for slug-based tag keys

= 3.47.11.1 - 5/8/2026 =
* Fixed fatal error on admin pages for HubSpot sites that had not yet completed the v1 to v3 list ID migration after the 4/30/2026 cutoff, caused by a missing get_v3_list_ids() method on the HubSpot CRM class

= 3.47.11 - 4/22/2026 =
* Added app disconnect functionality for HubSpot
* Improved - HubSpot webhook handling now defaults to async, dramatically improving workflow extension success rates by responding to HubSpot in milliseconds instead of waiting for follow-up API calls. Use ?async=false in the webhook URL or the wpf_hubspot_webhook_async filter to opt back into synchronous processing.
* Improved - HubSpot integration now retries rate-limited (429) and temporarily-unavailable (503) requests once, honoring the Retry-After header, instead of returning an immediate error
* Improved - Consolidated CRM disconnect flow into a new shared WPF_CRM_Disconnect class; HubSpot, Klaviyo, and Pipedrive now share a standardized confirmation and result page when disconnecting from the CRM
* Improved - ActiveCampaign integration now validates its cached ecom customer ID against the order email, preventing orders from being linked to the wrong customer when a buyer's email changes between orders
* Improved - Async loopback requests now use wp_remote_post() instead of wp_safe_remote_post() for compatibility with local development environments (.local TLDs, local IPs, non-standard ports)
* Fixed ActiveCampaign load_ecom_customer() returning a "not found" response for real API errors, which could cause duplicate customers to be created
* Fixed NationBuilder v2 API custom_values payload handling when tag labels were numeric vs string values
* Fixed tag and list string-replacement logic in the settings exporter/importer to match on whole words only, preventing unintended replacement of similarly-named tags or list IDs

= 3.47.9 - 3/24/2026 =
* Fixed HighLevel OAuth authentication by switching back from automatic redirect to manual authorization flow
* Fixed PHP type errors in the admin bar when tag category or label data was not in the expected format
* Fixed Customer.io auto-login and error handling
* Fixed special characters encoding for Customer.io email addresses
* Fixed several bugs in the NationBuilder v2 API integration

= 3.47.8.1 - 2/27/2026 =
* Fixed PHP warning in the admin bar when tag data was not in the expected array format
* Updated Dynamics 365 client secret

= 3.47.8 - 2/25/2026 =
* Improved - HubSpot tag migration now includes a runtime safety net that translates legacy v1 list IDs to v3 on-the-fly for access checks and API calls, even when stored settings haven't been migrated yet
* Improved - Legacy HubSpot tags now display with a "(legacy)" label in the admin UI instead of appearing blank
* Fixed NationBuilder v2 API syncing errors caused by unknown or renamed field attributes (mobile → mobile_number, phone → phone_number, address key suffixes)
* Fixed NationBuilder v2 API rejecting entire sync requests when any unwritable attribute was included — unknown fields are now automatically stripped and the request retried
* Fixed PHP warning in the tag picker dropdown when tag data was not in the expected array format

= 3.47.7 - 2/16/2026 =
* Added one-click migration tool for HubSpot users to update list IDs after the v1→v3 API upgrade in 3.47.6
* Improved - HubSpot list users from pre-3.47.7 now stay on the legacy v1 Lists API until they run the migration tool, then switch to v3 (with automatic v3 enforcement after April 30, 2026)

= 3.47.6 - 2/9/2026 =
* Improved - NationBuilder integration updated to use the v2 API with OAuth authentication, replacing the deprecated v1 API
* Improved - Added support for NationBuilder Paths (displayed in the tag picker) and list/membership syncing
* Improved - HubSpot integration updated to use the v3 Lists API for syncing contact lists
* Improved - Contacts deleted or merged in ActiveCampaign are now automatically recovered by re-looking up the contact by email address
* Improved - When a stored CRM contact ID is no longer valid, WP Fusion now automatically attempts to recover by looking up the contact by email
* Improved - Added better error handling for deleted contacts and opportunities in the HighLevel integration
* Improved - Sensitive tokens are now redacted from HubSpot error log output
* Fixed Drip webhook processing error when the subscriber's tags property is null
* Fixed Infusionsoft/Keap backup SAK transient not being cleared when API keys are updated
* Fixed PHP error when get_query_var() is called before WP_Query is initialized (e.g. during early cron runs)
* Fixed internal retry parameter being passed through to CRM API methods

= 3.47.5 - 1/19/2026 =
* Fixed wpf_clean() stripping percent-encoded characters (like @ in email addresses) when sanitizing webhook data

= 3.47.4.1 - 12/30/2025 =
* Fixed ActiveCampaign integration not returning an error when the API returns an empty response (fixes tags getting lost due to unknown API errors like the 511 errors last week)

= 3.47.4 - 12/23/2025 =
* Fixed Customer.io email address changes not syncing to CRM
* Fixed HubSpot phone numbers not being formatted to E.164 standard
* Fixed Sender.net groups sync not handling pagination for accounts with many groups
* Fixed Keap API calls returning 404 errors due to trailing slashes in URLs
* Fixed admin row actions showing on unsupported post types

= 3.47.3 - 11/27/2025 =
* Improved - Transient network errors (cURL timeouts, SSL errors, etc.) are now automatically retried
* Improved - Updated Pipedrive integration to use the new public app keys
* Fixed GetResponse integration returning false when no tags are found for a contact, instead of an empty array, causing errors with some integrations

= 3.47.2 - 11/5/2025 =
* Added support for segmenting using [Labels with Pipedrive](https://wpfusion.com/documentation/crm-specific-docs/pipedrive-labels/)
* Added support for syncing Omnisend email subscription status (subscribed/unsubscribed/nonSubscribed) in both directions
* Added beta support for the new Kit v4 API (faster, requires manual upgrade)
* Improved - Omnisend webhooks now support URLs without contact_id parameter (extracts email from request body and looks up contact automatically)
* Fixed fatal error showing post protection status badge in the admin if the post was protected by "Not" tags but not "Required Tags"
* Fixed Pipedrive webhooks not working
* Fixed fatal error if MailPoet integration was called before MailPoet plugin was initialized

= 3.47.1 - 10/20/2025 =
* Fixed Pipedrive webhook registration failing with "Scope and URL mismatch" error by enforcing HTTPS in webhook URLs

= 3.47.0 - 10/14/2025 =
* Improved - Skipping non-scalar values when syncing to Klaviyo
* Improved - Brevo phone number formatting now uses wpf_phone_number_to_e164() and respects country field for proper international phone number formatting
* Improved Brevo error handling when the API key does not have sufficient permissions for the request
* Improved - Added 18 additional European and international country codes to wpf_phone_number_to_e164() including Spain (ES)
* Fixed - Brevo incorrectly adding "1" prefix to international phone numbers that didn't start with "1" or "+"
* Fixed - Groundhogg (REST API) date fields only syncing Month and Year values (missing Day)
* Fixed - Return After Login not working when post type or taxonomy restrictions were enabled, due to access check running during wp_login action before user authentication was fully complete

= 3.46.15 - 10/7/2025 =
* Fixed the Retry API Call button in the activity logs not using the correct content type headers when refreshing an access token
* Fixed error `Too few arguments to function WPF_API::delete_transient()` when processing HubSpot webhooks with multiple contact IDs

= 3.46.14 - 10/1/2025 =
* Improved - Standardized checkbox value handling across CRMs to ensure consistent behavior

= 3.46.13 - 9/22/2025 =
* Fixed "Test Connection" button failing with Drip since 3.46.12
* Fixed Drip integration not removing tags with periods in the tag name

= 3.46.12 - 9/16/2025 =
* Fixed GetResponse integration not loading more than 100 available tags

= 3.46.11 - 9/9/2025 =
* Improved error handling for Dynamics 365 API errors
* Improved - When updating an Ontraport contact with referrer data (affiliate ID in the `aff_` cookie), sync will bypass the API queue so the referrer is updated before any ecommerce data is synced
* Improved - Automatic cleanup of orphaned background batch operations to prevent database bloat
* Improved - Added `started` and `updated` timestamps to batch operations for better tracking and cleanup
* Fixed - Activity log timestamps now display in the site's local timezone instead of UTC
* Fixed Groundhogg - User metadata now syncs correctly back to Groundhogg when creating a WordPress user from an existing Groundhogg contact via the Groundhogg funnel action
* Fixed fatal error when loading custom fields from Dynamics 365 if the user did not have the `prvReadEntity`, `prvReadAttribute`, or `prvReadEntityDefinition` permissions
* Fixed - Reverted to private Pipedrive credentials since the public app is still in review
* Fixed conflict with User Menus plugin: user role checkboxes were not clickable when WP Fusion was active
* Fixed missing headers in license activation and deactivation requests causing 415 status errors

= 3.46.10 - 8/25/2025 =
* Fixed filters not working in the Activity Logs page

= 3.46.9 - 8/18/2025 =
* Fixed `phone` field not syncing to Maropost
* Fixed conflict with User Menus plugin: user role checkboxes were not clickable when WP Fusion was active
* Fixed - Constant Contact contact updates now preserve existing field values by loading the complete contact record before updating

= 3.46.8 - 8/11/2025 =
* Added support for the Subscribe to List field in the Maropost integration
* Improved UI on the setup tab for OAuth connections (hidden API tokens, made action buttons more prominent)
* Improved - Added a "Disconnect" button to the OAuth connection status section
* Improved - When installing WP Fusion from the Klaviyo Marketplace, if WP Fusion is already active, the OAuth flow will start automatically
* Improved - When installing WP Fusion from the Klaviyo, if WP Fusion is already active, the OAuth flow will start automatically
* Developers: Improved support for disabling / enabling settings in the WP Fusion options page based on the value of other settings
* Developers: Added `$update_data` parameter to the `wpf_format_field_value` filter to allow modifying the value of a field before it is synced to the CRM

= 3.46.7 - 8/4/2025 =
* Added individual and bulk log entry deletion functionality in the Activity Logs page
* Added time the batch operation was last run to the batch operations list
* Added translations for Russian, Japanese, Chinese, and Korean
* Updated Pipedrive integration to use new public app keys
* Improved - Updated Klaviyo integration to the 2025-07-15 API
* Improved Klaviyo error handling
* Improved - Added plugin conflict detection for HighLevel OAuth authorization to warn users about interfering plugins
* Fixed error "Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array, string given" when tracking events with FluentCRM

= 3.46.6.1 - 7/30/2025 =
* Fixed incorrect version number in plugin updater (always showed as an update was available)

= 3.46.6 - 7/28/2025 =
* Added translations for Spanish, French, German, Italian and Portuguese

= 3.46.5 - 7/21/2025 =
* Updated Klaviyo scopes to use `subscriptions:write`
* Fixed HubSpot lists showing with "(list)" suffix in the tags select dropdown since 3.46.4
* Developers: Added `$entry_id` parameter to the `wpf_forms_pre_submission` and `wpf_forms_pre_submission_contact_id` filters

= 3.46.4 - 7/14/2025 =
* Added support for MailPoet Tags in addition to Lists
* Improved - Disabled the API queue and user tag cache when connected to MailPoet on the same site
* Added Klaviyo segments support for content restriction (read-only access control)
* Fixed error creating new leads in Zoho when a custom layout was configured for contacts
* Fixed PHP warning `Undefined array key "connection_configured"` when loading the WP Fusion settings page during initial setup
* Fixed error testing the initial connection with HighLevel

= 3.46.3.1 - 7/5/2025 =
* Fixed Klaviyo deactivate URL not working in Lite plugin

= 3.46.3 - 7/5/2025 =
* Added dynamic tagging support to Zoho (type new tags into WP Fusion, generate tags based on product names and order statuses)
* Fixed applying and removing tags with Zoho failing with error "Invalid Data error: body" since 3.46.1

= 3.46.2 - 7/1/2025 =
* Added support for importing all contacts from Zoho using the import tool (not just by tag)
* Added support for validating the site for initiating the API connection directly from the Klaviyo and Pipedrive marketplaces
* Added support for revoking Klaviyo OAuth tokens (requirement for the Klaviyo marketplace)
* Fixed initial connection test with Zoho failing since 3.46.1
* Fixed Zoho access token refreshes failing since 3.46.1
* Fixed duplicate tags being applied to Salesforce contacts when applying tags via a multiselect field to guests
* Developers: the `DOING_WPF_WEBHOOK` constant was renamed to `WPF_DOING_WEBHOOK` to meet WordPress.org standards regarding plugin prefixes

= 3.46.1 - 6/24/2025 =
* Improved - The Zoho integration has been updated to use the latest API version (v8) to support the new custom field types
* Improved - When adding a new tag to a HubSpot multiselect field, the tag will now only be added if it doesn't already exist
* Fixed the Return After Login feature not respecting the "Redirect to" setting if the user does not have access to the requested page after logging in
* Fixed fatal error when creating a new WordPress user via a Groundhogg flow (same site)

= 3.46.0 - 6/16/2025 =
* Added support for Klaviyo OAuth 2.0 authorization
* Improved logging for missing or invalid email addresses during user registration
* Developers: Added `wpf_hubspot_add_engagement` filter to allow modifying the HubSpot engagement body before it is sent
* Developers: Updated the HubSpot engagements API to use the new v3 API
* Developers: `wp_fusion()->access->template_redirect()` now accepts an optional `$post_id` parameter to allow redirecting based on a specific post ID
* Developers: Added `wpf_return_after_login_url` filter to allow modifying the URL a user is redirected to after logging in, using the Return After Login feature

= 3.45.12 - 6/3/2025 =
* Improved - Added support for creating new custom fields in the CRM field select dropdowns even if there's an existing field with a partially matching name

= 3.45.11 - 5/28/2025 =
* Added logging when unknown tag names or IDs are passed to `wp_fusion()->user->apply_tags()`
* Fixed WP Fusion syncing empty user meta back to Groundhogg when a new user was created via a Groundhogg flow (same site)
* Fixed PHP warning `Calling key() on an object is deprecated` when creating a new tag with Groundhogg (REST API)

= 3.45.10 - 5/19/2025 =
* Fixed numeric strings being converted to integers when saving the WP Fusion settings, which removed leading zeros from numeric values
* Fixed Salesforce integration the default Record Type ID when creating objects (like Leads) that don't have a Record Type
* Developers: switched to using `wp_remote_request()` for Salesforce API calls, rather than `wp_safe_remote_request()`, to make debugging malformed URLs easier

= 3.45.9.1 - 5/8/2025 =
* Fixed "A valid URL was not provided" error with Zoho when using auto login links

= 3.45.9 - 5/7/2025 =
* Added a [Sender.net CRM integration](https://wpfusion.com/crm/sender/)
* Added `$gclid` field for sync with Zoho
* Improved - The Maropost integration can now load tags from contacts on any list in the account

= 3.45.8 - 4/29/2025 =
* Added ability to export and import the WP Fusion settings as a .csv file
* Added view in CRM links to the Maropost integration
* Fixed HTTP API logging not working with all Maropost API calls
* Fixed notices "Function _load_textdomain_just_in_time was called incorrectly" when loading the WP Fusion settings page in the admin since WordPress 6.8
* Fixed JavaScript error "that is not defined" when adding a new tag in the WP Fusion settings page
* Fixed users' first names being synced as 1 if no name was provided at registration and there was a boolean field in the POSTed data that contained "first"
* Developers: Calling `wp_fusion()->crm->add_tag()` will now add the tag and update the local cache of available tags
* Developers: Added function `wpf_update_option()` for updating options in the WP Fusion settings page

= 3.45.7 - 4/14/2025 =
* Improved - The initial HighLevel authorization flow has been updated to use the gray-labelled LeadConnectorHQ Marketplace
* Improved - If a contact is deleted or merged in HighLevel, WP Fusion will attempt to look up the contact by email address and retry the API call if a match is found
* Improved - If a contact is created or updated in HighLevel, and a "Duplicate Email Address" error is encountered, the existing contact will be updated
* Fixed `get_contact_id()` method with ActiveCampaign returning 403 / unauthorized if called before the `init` hook
* Fixed "Invalid URL provided" error when handling webhooks with Maropost
* Developers: Added `wpf_get_user_id_by_email()` function for getting a WordPress user ID from an email address

= 3.45.6 - 4/8/2025 =
* Added support for typing new segment names into the "Select List(s)" dropdown when [using a multiselect field for segmentation with HubSpot](https://wpfusion.com/documentation/crm-specific-docs/how-lists-work-with-hubspot/#using-a-multiselect-for-segmentation)
* Fixed email address not being synced from the REST API when updating a user
* Fixed custom fields not being synced from the REST API when updating a user

= 3.45.5 - 3/31/2025 =
* Added support for importing contacts with GetResponse
* Added support for syncing multiselect fields to GetResponse
* Fixed `wordpress_logged_in_wpfusioncachebuster` cookie not being cleared on auto-login logout
* Fixed GetResponse integration not validating the API key during setup
* Fixed loading contacts and pull user meta operations not working with GetResponse

= 3.45.4 - 3/24/2025 =
* Fixed Maropost integration not loading more than 200 available tags or custom fields
* Fixed error querying contact IDs or tags with Ortto, "incorrect size 0 of fields, minimum 1 and maximum 100 is required"
* Updated the `WPFSelect` React component to version 1.1.6

= 3.45.2 - 3/10/2025 =
* Improved - All custom fields sections in the Contact Fields list now link to their respective documentation pages
* Improved - Long tag names in the single-option tags select dropdown in the block editor will now break onto multiple lines for readability
* Fixed bugs in the FluentCRM (REST API) integration
* Fixed REST API updates to user profiles not being synced to the CRM

= 3.45.1 - 3/3/2025 =
* Added support for a [backup Service Account Key for Infusionsoft/Keap](https://wpfusion.com/documentation/installation-guides/how-to-connect-infusionsoft-to-wordpress/#backup-service-account-key). If the primary key is throttled, WP Fusion will automatically switch to the backup key until 12am UTC
* Added option to update existing user's tags and metadata when importing users via the [import tool](https://wpfusion.com/documentation/tutorials/import-users/)
* Improved - Salesforce will now retry the API call if a contact is not found, to allow for updates to deleted or merged contacts
* Fixed import tool errors with Groundhogg
* Fixed Keap / Infusionsoft custom fields and field mapping
* Fixed users imported via the import tool without a tag filter showing as "Unknown Tag" in the Import Groups log

= 3.45.0.1 - 2/26/2025 =
* Fixed timestamp conversion bugs and fatal errors in the Hubspot integration

= 3.45.0 - 2/24/2025 =
* Fixed - Removed `@abstract` docblock comment from `WPF_Background_Process` class, since it is not an abstract class, and this was causing validation errors on some servers
* Developers: Added `instructions.md` and `./.cursor/rules` files to aid in development with Cursor IDE
* Developers: Added `addOrderNote()` method to the Infusionsoft integration for adding order notes to orders

= 3.44.27 - 2/17/2025 =
* Improved error handling with Klaviyo - if an invalid field is passed, it will be removed from the request body and the request will be retried once
* Fixed errors with auto-login
* Fixed Secure Block for Gutenberg not working inside of a column block
* Fixed php errors when syncing custom fields to Klaviyo
* Developers: Added `wpf_infusionsoft_query_args` filter to allow overriding the default query arguments for the Infusionsoft contact ID lookup

= 3.44.26 - 2/11/2025 =
* Added (beta) support for authorizing HighLevel at the agency level, and switching between sub-locations within WP Fusion
* Improved - Added WP Fusion status column to the Event Tickets attendees list
* Improved - The KlickTipp integration now uses the WordPress HTTP API instead of the KlickTipp SDK, for improved logging and error handling
* Improved - The KlickTipp integration will now return an error message during setup if the account or account user does not have access to the API
* Improved performance of the WP Fusion tags select component in the block editor
* Improved - If the Klaviyo API returns a `duplicate_profile` error during a contact update for a WordPress user, the correct contact ID will now be saved to the user's record in WordPress
* Improved - If the Klaviyo API returns a `not_found` error during a contact update for a WordPress user, WP Fusion will attempt to look up the contact ID again by email address and retry the request if a match is found
* Fixed restricted posts without redirects appearing as password protected if they had comments
* Fixed: Moved the CRM initialization to `init` priority 1, so it runs before other init actions.
* Developers: Updated the Klaviyo API version to the latest v2025-01-15
* Developers: Added function `wpf_get_name_from_full_name()` to split a full name into first and last name components

= 3.44.25 - 2/3/2025 =
* Added support for [retrying failed API calls in the logs](https://wpfusion.com/documentation/getting-started/activity-logs/#retrying-api-calls)
* Added support for syncing dates and dates with times to Klaviyo
* Improved - The "A valid URL was not provided." HTTP response was not properly logging the request URI since it was being escaped by `esc_url_raw()`. The request URI is now being sanitized with `sanitize_text_field()`
* Improved - WP Fusion will no longer update a user's cached tags if they visit an auto-login link.
* Improved - With FluentCRM, if a 404 error is encountered while updating a contact or applying tags, WP Fusion will attempt to look up the contact ID again by email address and retry the request if a match is found
* Fixed fatal errors in the Klick Tipp integration
* Developers: Added `./cursor/rules` file for Cursor IDE
* Developers: The [Secure Block for Gutenberg](https://wpfusion.com/documentation/page-builders/gutenberg/) has been updated to `apiVersion 3.0`
* Developers: The REST API integrations for FluentCRM, Groundhogg, and FunnelKit will now only use `wp_safe_remote_get()` for the initial connection, rather than all API calls. This helps avoid some legitimate requests occasionally failing `wp_http_validate_url()`

= 3.44.24 - 1/27/2025 =
* Fixed bugs with the CRM field select dropdown
* Fixed fatal error in the Groundhogg integration in PHP 8.2 when syncing array formatted data
* Updated EngageBay integration to new API endpoint at https://api.engagebay.com/
* Developers: Removed the deprecation notice for the `wp_fusion\secure_blocks_for_gutenberg\API` class until we've had time to update all our addons to the new API endpoint
* Developers: Tested for WordPress 6.8

= 3.44.23 - 1/20/2025 =
* Improved - If an HTTP API error is encountered while logging an error-level message to the log, the HTTP API error will be logged as well
* Improved - The `wc_total_spent` and `wc_order_count` fields can now be exported to the CRM for existing users
* Improved - With CRMs that support creating custom properties or attributes via the API, the placeholder text in the CRM field select dropdowns will now show "type to add new" when the field is opened
* Improved - With Customer.io, when looking up a contact ID by email address, any custom properties will be saved into the WP Fusion CRM fields settings
* Improved performance when using the React based tags select component, the tags will be passed to the component rather than loaded over the REST API
* Fixed PHP warning in the logs when filtering by an invalid user ID
* Fixed infinite loop handling HighLevel 401 errors related to missing scopes
* Developers: cleaned up and standardized build processes for React integrations via webpack.config.js

= 3.44.22 - 1/13/2025 =
* Improved - Status icons in entries and orders lists now link to the contact record in the CRM
* Improved error handling for HighLevel authorization
* Fixed HighLevel integration not saving the location ID during initial setup when using the older [API-key based setup method](https://wpfusion.com/documentation/crm-specific-docs/highlevel-white-labelled-accounts/)
* Developers: Added `wpf_status_icon()` function for outputting a status icon in the admin

= 3.44.21 - 1/6/2025 =
* Added support for [creating and updating Accounts along with contacts in ActiveCampaign](https://wpfusion.com/documentation/crm-specific-docs/activecampaign-accounts/)
* Added "Unsubscribed" as a default status option for new FluentCRM contacts (same site and REST API)
* Added option to set new contacts to either Subscribed or Pending in FluentCRM (same site and REST API) when they check the opt-in checkbox on the WooCommerce checkout (default is Subscribed)
* Fixed JavaScript error when clicking the Test Connection button during the initial setup with Mailchimp

= 3.44.20 - 12/31/2024 =
* Fixed "Type to add new" message being appended each time you clicked on the Select Tag(s) dropdown in the WP Fusion settings

= 3.44.19 - 12/17/2024 =
* Improved - When exporting the activity logs to .csv, any current filters will now be applied to the export
* Improved - Settings from non-active CRMs will no longer be saved to the database to reduce the size in the options table
* Improved - When linking to a single entry in the logs, the page will now scroll to the correct entry
* Improved - Infusionsoft will log a more descriptive error message when a 500 error is returned
* Fixed fatal errors in the MailerLite integration

= 3.44.18 - 12/10/2024 =
* Improved - If an invalid attribute is passed to Klaviyo, the request will now be retried without the invalid attribute
* Fixed: PHP classes and objects stored to usermeta will be excluded from sync to fix errors with sanitization via `stripslashes_deep()`

= 3.44.17 - 12/2/2024 =
* Added option to apply tags when a user accepts a retention offer, and sync the offer title to the CRM, with the [WooCommerce Cancellation Surveys plugin](https://wpfusion.com/documentation/ecommerce/cancellation-survey-for-woocommerce-subscriptions/)
* Added support for connecting to Agency HighLevel accounts and switching between locations
* Improved - Updated language in the taxonomy term settings to better indicate that users must be logged in to access content when the "Restrict access" checkboxes are checked

= 3.44.16 - 11/26/2024 =
* Added additional validation on phone numbers for Klaviyo to prevent invalid numbers from blocking the API request
* Fixed HighLevel integration reading tags out of webhooks as a single comma-separated string

= 3.44.15 - 11/18/2024 =
* Improved - Added a warning when changing the FluentCRM tag format, since it requires resyncing tags for every user
* Developers: Added `wpf_phone_number_to_e164` filter to allow overriding the default country code added to phone numbers when converting to E.164 format
* Developers: The apply_tags(), remove_tags(), push_user_meta(), and user_register() PHP methods now return a WP_Error object if there was an error, instead of false, to aid in logging
* Developers: The get_contact_id() method now returns false if there was an API error, to allow integrations to try to create a new contact as a fallback
* Developers: Added `wpf_disable_api_queue()` function to allow bypassing the API queue for a single request
* Developers: Added a basic framework for unit testing, with more tests to follow. See readme.md for more information.
