{"id":346631,"date":"2026-08-03T16:34:47","date_gmt":"2026-08-03T16:34:47","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/conversion-relay\/"},"modified":"2026-08-04T12:40:58","modified_gmt":"2026-08-04T12:40:58","slug":"conversion-relay","status":"publish","type":"plugin","link":"https:\/\/en-ca.wordpress.org\/plugins\/conversion-relay\/","author":7640281,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.3.0","stable_tag":"0.3.0","tested":"7.0.2","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Conversion Relay","header_author":"Jean Galea","header_description":"No-code bridge from WordPress plugin events to analytics and ad platforms. Open alternative to tag-manager conversion tracking.","assets_banners_color":"168f84","last_updated":"2026-08-04 12:40:58","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/jgalea\/conversion-relay","header_author_uri":"https:\/\/github.com\/jgalea","rating":0,"author_block_rating":0,"active_installs":0,"downloads":64,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.2.0":{"tag":"0.2.0","author":"jeangalea","date":"2026-08-04 10:13:30"},"0.3.0":{"tag":"0.3.0","author":"jeangalea","date":"2026-08-04 12:40:58"}},"upgrade_notice":{"0.3.0":"<p>Adds a warning when nothing is configured, media play tracking, and an optional\nFathom label prefix.<\/p>","0.2.0":"<p>All destinations unlocked and external services documented.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3633284,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3633284,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3633284,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3633284,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.2.0","0.3.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3634225,"resolution":"1","location":"assets","locale":"","width":1456,"height":830},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3634225,"resolution":"2","location":"assets","locale":"","width":1456,"height":830},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3634225,"resolution":"3","location":"assets","locale":"","width":1456,"height":830},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3634225,"resolution":"4","location":"assets","locale":"","width":1456,"height":830}},"screenshots":{"1":"Destinations \u2014 connect analytics and ad platforms with no code.","2":"Sources \u2014 toggle which plugins to track and choose server, client, or both.","3":"Status \u2014 a live log of every delivery attempt, with retries and failures.","4":"Consent \u2014 analytics and advertising consent defaults, with Do Not Track."}},"plugin_section":[],"plugin_tags":[232,986,1005,207498,286],"plugin_category":[36,45],"plugin_contributors":[78515],"plugin_business_model":[],"class_list":["post-346631","plugin","type-plugin","status-publish","hentry","plugin_tags-analytics","plugin_tags-conversion-tracking","plugin_tags-google-analytics","plugin_tags-meta-pixel","plugin_tags-woocommerce","plugin_category-analytics","plugin_category-ecommerce","plugin_contributors-jeangalea","plugin_committers-jeangalea"],"banners":{"banner":"https:\/\/ps.w.org\/conversion-relay\/assets\/banner-772x250.png?rev=3633284","banner_2x":"https:\/\/ps.w.org\/conversion-relay\/assets\/banner-1544x500.png?rev=3633284","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/conversion-relay\/assets\/icon-128x128.png?rev=3633284","icon_2x":"https:\/\/ps.w.org\/conversion-relay\/assets\/icon-256x256.png?rev=3633284","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/conversion-relay\/assets\/screenshot-1.png?rev=3634225","caption":"Destinations \u2014 connect analytics and ad platforms with no code."},{"src":"https:\/\/ps.w.org\/conversion-relay\/assets\/screenshot-2.png?rev=3634225","caption":"Sources \u2014 toggle which plugins to track and choose server, client, or both."},{"src":"https:\/\/ps.w.org\/conversion-relay\/assets\/screenshot-3.png?rev=3634225","caption":"Status \u2014 a live log of every delivery attempt, with retries and failures."},{"src":"https:\/\/ps.w.org\/conversion-relay\/assets\/screenshot-4.png?rev=3634225","caption":"Consent \u2014 analytics and advertising consent defaults, with Do Not Track."}],"raw_content":"<!--section=description-->\n<p>Conversion Relay connects the plugins you already run to the analytics and\nadvertising platforms you report on, without a tag manager and without pasting\nsnippets into your theme.<\/p>\n\n<p>Every tracked action becomes one normalized event that is routed to each platform\nyou enable. Server-side delivery is durable and retried in the background, so a\nslow request never blocks checkout. Client-side pixels are fired reliably even\nwhen a conversion finishes on a later page, such as a payment-gateway return.<\/p>\n\n<p>Nothing is sent anywhere until you enable a destination and enter its credentials.<\/p>\n\n<p><strong>Sources<\/strong> (auto-detected when the plugin is active):<\/p>\n\n<ul>\n<li>Ecommerce: WooCommerce, Easy Digital Downloads, WP Simple Pay, Download Monitor<\/li>\n<li>Forms: Gravity Forms, WPForms, Fluent Forms, Ninja Forms, Contact Form 7, Formidable, Forminator, Elementor Forms, JetFormBuilder, Kadence, SureForms, Everest Forms, HappyForms, WeForms, WS Form, Kali Forms<\/li>\n<li>Memberships and courses: MemberPress, Paid Memberships Pro, Restrict Content Pro, Ultimate Member, Simple Membership, LearnDash, LifterLMS, Tutor LMS<\/li>\n<li>Email and CRM: FluentCRM, Groundhogg, MailPoet, Mailster, Mailchimp for WordPress, The Newsletter Plugin, FunnelKit Automations<\/li>\n<li>Donations and affiliates: GiveWP, Charitable, AffiliateWP, SliceWP, Solid Affiliate, FluentAffiliate<\/li>\n<li>Builders and booking: Elementor, Divi, Bricks, Breakdance, Oxygen, Beaver Builder, LatePoint, FluentBooking<\/li>\n<li>WordPress core: site search, login, registration<\/li>\n<\/ul>\n\n<p><strong>Destinations:<\/strong><\/p>\n\n<ul>\n<li>Analytics: Google Analytics 4 (client and Measurement Protocol), Plausible, Fathom, Umami, PostHog, Matomo, Simple Analytics, Pirsch, Swetrix, Rybbit, Beam, TinyAnalytics, GoSquared, Usermaven, UserBird, Wide Angle, Koko Analytics, Vireo Analytics<\/li>\n<li>Behaviour: Microsoft Clarity, Hotjar<\/li>\n<li>Advertising: Meta (Pixel and Conversions API), Google Ads, Microsoft Ads, TikTok Ads, Pinterest Ads, Reddit Ads, LinkedIn Ads, X (Twitter) Ads<\/li>\n<li>Google Tag Manager, and any endpoint via a generic Webhook<\/li>\n<\/ul>\n\n<p>New sources and destinations register through simple filters, so the list grows\nwithout touching the core.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>Advertising destinations default to denied until consent is granted. The plugin\nhonors Do Not Track and exposes a <code>wpch_consent<\/code> filter so a consent-management\nplatform can decide per event and category. Enhanced conversions (hashing and\nsending first-party customer data) are opt-in and off by default.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin sends conversion data to third-party analytics and advertising\nplatforms. A platform is contacted only after you enable that destination and\nenter its credentials on Settings \u2192 Conversion Relay. No destination is enabled\nby default, and disabling one stops all traffic to it.<\/p>\n\n<p>For every enabled destination, each tracked conversion sends: the event name\n(for example purchase, form submission, registration), the order or entity ID\nused for deduplication, order value and currency, cart or line items where the\nplatform supports them, the page URL and referrer, a timestamp, the visitor's IP\naddress and user agent, and any first-party click or analytics identifiers\npresent in cookies or the URL (<code>_ga<\/code>, <code>_fbp<\/code>, <code>_fbc<\/code>, <code>gclid<\/code>, <code>wbraid<\/code>,\n    gbraid).<\/p>\n\n<p>If you switch on enhanced conversions (off by default), customer email, phone and\nname are SHA-256 hashed before sending. Plain-text customer details are never\ntransmitted.<\/p>\n\n<p><strong>Google (Google Analytics 4, Google Ads, Google Tag Manager)<\/strong>\nEvents are sent to the GA4 Measurement Protocol at google-analytics.com from your\nserver, and the <code>gtag.js<\/code> or <code>gtm.js<\/code> script is loaded from googletagmanager.com\nin the visitor's browser to fire client-side conversions. Terms of service:\nhttps:\/\/policies.google.com\/terms Privacy policy: https:\/\/policies.google.com\/privacy<\/p>\n\n<p><strong>Meta (Facebook and Instagram Ads)<\/strong>\nConversions are sent to the Meta Conversions API at graph.facebook.com from your\nserver, and the Meta Pixel is loaded from connect.facebook.net in the visitor's\nbrowser. Terms of service: https:\/\/www.facebook.com\/legal\/terms Privacy policy:\nhttps:\/\/www.facebook.com\/privacy\/policy\/<\/p>\n\n<p><strong>Microsoft (Microsoft Advertising and Clarity)<\/strong>\nConversions are sent through the UET tag loaded from bat.bing.com, and Clarity\nevents through the tag loaded from clarity.ms, both in the visitor's browser.\nMicrosoft Advertising agreement:\nhttps:\/\/about.ads.microsoft.com\/en-us\/resources\/policies\/microsoft-advertising-agreement\nClarity terms: https:\/\/clarity.microsoft.com\/terms Privacy statement:\nhttps:\/\/www.microsoft.com\/en-us\/privacy\/privacystatement<\/p>\n\n<p><strong>TikTok Ads<\/strong>\nConversions are sent to the TikTok Events API at business-api.tiktok.com from\nyour server. Business products terms:\nhttps:\/\/ads.tiktok.com\/i18n\/official\/policy\/business-products-terms Privacy\npolicy: https:\/\/www.tiktok.com\/legal\/page\/global\/privacy-policy\/en<\/p>\n\n<p><strong>Pinterest Ads<\/strong>\nConversions are sent to the Pinterest Conversions API at api.pinterest.com from\nyour server. Terms of service: https:\/\/business.pinterest.com\/business-terms-of-service\/\nPrivacy policy: https:\/\/policy.pinterest.com\/en\/privacy-policy<\/p>\n\n<p><strong>Reddit Ads<\/strong>\nConversions are sent to the Reddit Conversions API at ads-api.reddit.com from\nyour server. Advertising services agreement:\nhttps:\/\/business.reddithelp.com\/s\/article\/Reddit-Advertising-Services-Agreement\nPrivacy policy: https:\/\/www.reddit.com\/policies\/privacy-policy<\/p>\n\n<p><strong>LinkedIn Ads<\/strong>\nConversions are sent to the LinkedIn Conversions API at api.linkedin.com from\nyour server. Ads agreement: https:\/\/www.linkedin.com\/legal\/sas-terms Privacy\npolicy: https:\/\/www.linkedin.com\/legal\/privacy-policy<\/p>\n\n<p><strong>X (Twitter) Ads<\/strong>\nConversions are fired through the X website tag loaded from\nstatic.ads-twitter.com in the visitor's browser. Ads terms:\nhttps:\/\/legal.x.com\/ads-terms.html Privacy policy: https:\/\/x.com\/en\/privacy<\/p>\n\n<p><strong>Hotjar<\/strong>\nEvents are sent through the Hotjar script loaded from static.hotjar.com in the\nvisitor's browser. Terms of service:\nhttps:\/\/www.hotjar.com\/legal\/policies\/terms-of-service\/ Privacy policy:\nhttps:\/\/www.hotjar.com\/legal\/policies\/privacy\/<\/p>\n\n<p><strong>Plausible Analytics<\/strong>\nEvents are sent from your server to plausible.io, or to the self-hosted address\nyou enter. Terms: https:\/\/plausible.io\/terms Privacy policy:\nhttps:\/\/plausible.io\/privacy<\/p>\n\n<p><strong>PostHog<\/strong>\nEvents are sent from your server to the PostHog host you enter, us.i.posthog.com\nby default. Terms: https:\/\/posthog.com\/terms Privacy policy:\nhttps:\/\/posthog.com\/privacy<\/p>\n\n<p><strong>Umami<\/strong>\nEvents are sent from your server to the Umami host you enter, cloud.umami.is by\ndefault. Terms: https:\/\/umami.is\/terms Privacy policy: https:\/\/umami.is\/privacy<\/p>\n\n<p><strong>Matomo<\/strong>\nEvents are sent from your server to the Matomo address you enter, which is your\nown instance or Matomo Cloud. Cloud terms:\nhttps:\/\/matomo.org\/matomo-cloud-terms-of-service\/ Privacy policy:\nhttps:\/\/matomo.org\/privacy-policy\/<\/p>\n\n<p><strong>Webhook<\/strong>\nIf you enable the Webhook destination, the full normalized event is POSTed as\nJSON to the URL you enter. You control that endpoint and the terms that apply to\nit.<\/p>\n\n<p>Fathom, Simple Analytics, Pirsch, Swetrix, Rybbit, Beam, TinyAnalytics,\nGoSquared, Usermaven, UserBird, Wide Angle and Koko Analytics are fired through\nthe tracking script those services already install on your site. Conversion Relay\ncalls the script that is present in the page and opens no connection of its own.\nVireo Analytics is written to locally, with no external request.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin to <code>\/wp-content\/plugins\/<\/code> or install it from the Plugins\nscreen in WordPress.<\/li>\n<li>Activate it.<\/li>\n<li>Go to Settings \u2192 Conversion Relay, connect the destinations you use, and toggle\nwhich sources to track.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20need%20a%20tag%20manager%3F\"><h3>Does this need a tag manager?<\/h3><\/dt>\n<dd><p>No. Events are wired directly from your plugins to each platform.<\/p><\/dd>\n<dt id=\"will%20server-side%20tracking%20slow%20down%20my%20checkout%3F\"><h3>Will server-side tracking slow down my checkout?<\/h3><\/dt>\n<dd><p>No. Server-side delivery runs in the background with retries, so the request that\ncompletes a sale is never held up waiting on an analytics or ad platform.<\/p><\/dd>\n<dt id=\"where%20do%20delivery%20errors%20show%20up%3F\"><h3>Where do delivery errors show up?<\/h3><\/dt>\n<dd><p>Settings \u2192 Conversion Relay \u2192 Status lists recent delivery attempts, including\nfailures and retries. <code>wp conversion-hub status<\/code> shows the same from WP-CLI.<\/p><\/dd>\n<dt id=\"can%20i%20add%20a%20platform%20that%20isn%27t%20listed%3F\"><h3>Can I add a platform that isn't listed?<\/h3><\/dt>\n<dd><p>Yes. Register your own source or destination with <code>wpch_register_source<\/code> \/\n    wpch_register_destination \u2014 no core changes needed.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Warn in the admin when the plugin is active but has no destination or no\nsources enabled, instead of silently sending nothing.<\/li>\n<li>New Media source: tracks the first play of each video and audio element.<\/li>\n<li>Fathom destination takes an optional event label prefix, so its events stay on\ntheir own rows when another tool reports to the same site.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Every destination is now available to every user, with no license checks.<\/li>\n<li>Documented all external services in the readme.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release: event hub with durable async delivery, ten sources, and twelve\ndestinations across analytics and advertising.<\/li>\n<\/ul>","raw_excerpt":"Send WordPress conversions to the analytics and ad platforms you report on. No tag manager, no code.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/346631","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=346631"}],"author":[{"embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/jeangalea"}],"wp:attachment":[{"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=346631"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=346631"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=346631"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=346631"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=346631"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=346631"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}