{"id":326296,"date":"2026-06-27T18:34:47","date_gmt":"2026-06-27T18:34:47","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/conversion-tracking-kit\/"},"modified":"2026-07-07T20:52:54","modified_gmt":"2026-07-07T20:52:54","slug":"ustun-conversion-tracking","status":"publish","type":"plugin","link":"https:\/\/fy.wordpress.org\/plugins\/ustun-conversion-tracking\/","author":23516460,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.6.9","stable_tag":"1.6.9","tested":"7.0","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Ustun Conversion Tracking for WooCommerce","header_author":"Abdullah \u00dcst\u00fcn","header_description":"Set up GA4, Meta Pixel and Google Ads conversion tracking for WooCommerce in minutes \u2014 then verify the events actually fire.","assets_banners_color":"faf7f1","last_updated":"2026-07-07 20:52:54","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/conversiontrackingkit.com","header_author_uri":"https:\/\/abdullahustun.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":115,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","faq","changelog"],"tags":{"1.5.1":{"tag":"1.5.1","author":"abdullahustun","date":"2026-06-27 18:34:28"},"1.6.6":{"tag":"1.6.6","author":"abdullahustun","date":"2026-07-07 17:22:11"},"1.6.7":{"tag":"1.6.7","author":"abdullahustun","date":"2026-07-07 18:10:23"},"1.6.8":{"tag":"1.6.8","author":"abdullahustun","date":"2026-07-07 20:38:19"},"1.6.9":{"tag":"1.6.9","author":"abdullahustun","date":"2026-07-07 20:52:54"}},"upgrade_notice":{"1.6.9":"<p>Purchases blocked by ad blockers or lost to closed tabs are no longer gone forever \u2014 the plugin now retries on the customer&#039;s next visit, with platform-side deduplication preventing double counting.<\/p>","1.6.8":"<p>Turkish translations now load correctly, begin_checkout fires once per session, and a new setting lets you exclude shipping\/tax from the reported conversion value.<\/p>","1.6.7":"<p>Adds a Consent Mode default override for custom \/ unrecognized cookie banners and detects three more consent plugins.<\/p>","1.6.6":"<p>Adds the interactive Verify Setup tool \u2014 watch your conversion tracking fire live on any page, even when it is managed by GTM or another plugin.<\/p>","1.0.2":"<p>Fixes false negatives in the setup test on heavy pages and for Meta Pixel POST requests. Recommended for everyone.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3588277,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3588277,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3588277,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3588277,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.5.1","1.6.6","1.6.7","1.6.8","1.6.9"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3588277,"resolution":"1","location":"assets","locale":"","width":1280,"height":2163},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3588277,"resolution":"2","location":"assets","locale":"","width":1280,"height":800},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3588277,"resolution":"3","location":"assets","locale":"","width":1280,"height":833},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3588277,"resolution":"4","location":"assets","locale":"","width":1280,"height":834}},"screenshots":{"1":"Status dashboard with platform cards and the orders vs. purchase events comparison.","2":"Setup wizard step 1 \u2014 scan of existing tracking plugins and on-page scripts.","3":"Conflict mode choice \u2014 take over tracking or audit-only.","4":"Setup test with per-platform results and deep links to GA4 DebugView and Meta Test Events."}},"plugin_section":[],"plugin_tags":[986,193472,985,207498,286],"plugin_category":[45],"plugin_contributors":[269135],"plugin_business_model":[],"class_list":["post-326296","plugin","type-plugin","status-publish","hentry","plugin_tags-conversion-tracking","plugin_tags-ga4","plugin_tags-google-ads","plugin_tags-meta-pixel","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-abdullahustun","plugin_committers-abdullahustun"],"banners":{"banner":"https:\/\/ps.w.org\/ustun-conversion-tracking\/assets\/banner-772x250.png?rev=3588277","banner_2x":"https:\/\/ps.w.org\/ustun-conversion-tracking\/assets\/banner-1544x500.png?rev=3588277","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/ustun-conversion-tracking\/assets\/icon-128x128.png?rev=3588277","icon_2x":"https:\/\/ps.w.org\/ustun-conversion-tracking\/assets\/icon-256x256.png?rev=3588277","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/ustun-conversion-tracking\/assets\/screenshot-1.png?rev=3588277","caption":"Status dashboard with platform cards and the orders vs. purchase events comparison."},{"src":"https:\/\/ps.w.org\/ustun-conversion-tracking\/assets\/screenshot-2.png?rev=3588277","caption":"Setup wizard step 1 \u2014 scan of existing tracking plugins and on-page scripts."},{"src":"https:\/\/ps.w.org\/ustun-conversion-tracking\/assets\/screenshot-3.png?rev=3588277","caption":"Conflict mode choice \u2014 take over tracking or audit-only."},{"src":"https:\/\/ps.w.org\/ustun-conversion-tracking\/assets\/screenshot-4.png?rev=3588277","caption":"Setup test with per-platform results and deep links to GA4 DebugView and Meta Test Events."}],"raw_content":"<!--section=description-->\n<p>Most tracking plugins set up your pixels. Conversion Tracking Kit also proves they work.<\/p>\n\n<p>\"Meta reports 14 conversions, WooCommerce has 19 orders, Google Ads says 3 \u2014 which one is right?\" Conversion Tracking Kit exists to answer that question.<\/p>\n\n<ul>\n<li><strong>Guided setup wizard<\/strong> \u2014 paste your GA4 Measurement ID, Meta Pixel ID and Google Ads Conversion ID; done in about 3 minutes.<\/li>\n<li><strong>Conflict protection<\/strong> \u2014 scans your plugins and homepage first. If another plugin or your theme already sends events, Conversion Tracking Kit refuses to double-fire and asks you to choose: take over, or audit-only.<\/li>\n<li><strong>Setup test<\/strong> \u2014 one click verifies the scripts load and tracking requests actually leave the browser, with deep links to GA4 DebugView and Meta Test Events.<\/li>\n<li><strong>Orders vs. events<\/strong> \u2014 a dashboard card compares your recent orders against the purchase events that actually fired.<\/li>\n<li><strong>Safe by default<\/strong> \u2014 purchase deduplication (no double counting on page reloads), Google Consent Mode v2, admin traffic excluded, staging sites never fire events.<\/li>\n<\/ul>\n\n<p>The free version tracks view_item, add_to_cart, begin_checkout and purchase for GA4, Meta Pixel and Google Ads.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin is a conversion-tracking tool, so by design it can load the official tracking libraries of the advertising platforms you choose to connect. Nothing is loaded until you enter the corresponding ID in the setup wizard, and tracking is additionally gated by Google Consent Mode v2, admin exclusion and staging detection.<\/p>\n\n<p><strong>Google (Google Analytics 4 and Google Ads \u2014 gtag.js)<\/strong>\nWhen you enter a GA4 Measurement ID (G-\u2026) and\/or a Google Ads Conversion ID (AW-\u2026), the plugin loads Google's gtag.js library from <code>https:\/\/www.googletagmanager.com<\/code> and sends data to Google. What is sent and when: on each page view, and on shop events (view_item, add_to_cart, begin_checkout, purchase), it sends the configured ID(s) together with the event name and its parameters \u2014 for example page URL, referrer, product identifiers, transaction ID, order value and currency \u2014 subject to the visitor's consent state. This is used to measure analytics and ad conversions.\nGoogle terms of service: https:\/\/policies.google.com\/terms \u2014 Google privacy policy: https:\/\/policies.google.com\/privacy<\/p>\n\n<p><strong>Meta Pixel (Facebook \u2014 fbevents.js)<\/strong>\nWhen you enter a Meta Pixel ID, the plugin loads the Meta Pixel library <code>fbevents.js<\/code> from <code>https:\/\/connect.facebook.net<\/code> and sends data to Meta. What is sent and when: on each page view (PageView) and on shop events (ViewContent, AddToCart, InitiateCheckout, Purchase), it sends the Pixel ID together with the event name and its parameters \u2014 for example content identifiers, value and currency \u2014 plus standard browser data Meta collects (such as IP address and user agent). When JavaScript is disabled, a fallback tracking image is requested from <code>https:\/\/www.facebook.com\/tr<\/code>. This is used to measure ad conversions.\nMeta terms of service: https:\/\/www.facebook.com\/legal\/terms \u2014 Meta privacy policy: https:\/\/www.facebook.com\/privacy\/policy \u2014 Meta Business Tools terms: https:\/\/www.facebook.com\/legal\/terms\/businesstools<\/p>\n\n<p>Showing a cookie banner and collecting the legally required consent for these services remains the responsibility of the site owner; this plugin is not a consent-management plugin.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"will%20conversion%20tracking%20kit%20duplicate%20my%20existing%20tracking%3F\"><h3>Will Conversion Tracking Kit duplicate my existing tracking?<\/h3><\/dt>\n<dd><p>No \u2014 that is the #1 mistake it is built to prevent. Before printing anything, Conversion Tracking Kit scans your active plugins and your homepage for existing GA4, Meta Pixel, Google Ads and GTM code. If it finds any, it will not output a single script until you either remove the conflicting source or switch to audit-only mode.<\/p><\/dd>\n<dt id=\"do%20i%20need%20api%20keys%20or%20access%20tokens%3F\"><h3>Do I need API keys or access tokens?<\/h3><\/dt>\n<dd><p>No. The free version only needs the public IDs you already have: a GA4 Measurement ID (G-\u2026), a Meta Pixel ID (a number) and\/or a Google Ads Conversion ID (AW-\u2026).<\/p><\/dd>\n<dt id=\"what%20exactly%20does%20the%20setup%20test%20verify%3F\"><h3>What exactly does the setup test verify?<\/h3><\/dt>\n<dd><p>It verifies that the tracking scripts load on your page and that the browser actually fires network requests to Google and Meta. It does not (and cannot, without API credentials) confirm platform-side receipt \u2014 for that, the test screen links you straight to GA4 DebugView and Meta Test Events so you can watch the events arrive yourself.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20consent%20%2F%20cookie%20plugins%3F\"><h3>Does it work with consent \/ cookie plugins?<\/h3><\/dt>\n<dd><p>Yes. Conversion Tracking Kit prints a Google Consent Mode v2 default block before any Google tag. When a known consent plugin (CookieYes, Complianz, Cookiebot, Borlabs, Moove, Real Cookie Banner, iubenda, Termly) is active, consent defaults to denied and your consent plugin stays in charge.<\/p><\/dd>\n<dt id=\"my%20cookie%20banner%20is%20custom%20%2F%20not%20on%20the%20known%20list%20%E2%80%94%20what%20happens%3F\"><h3>My cookie banner is custom \/ not on the known list \u2014 what happens?<\/h3><\/dt>\n<dd><p>Unrecognized banners cannot be auto-detected, so the automatic default falls back to granted. The dashboard has a \"Consent Mode default\" setting to override this: choose \"always start denied\" if your banner sends Google Consent Mode updates itself. Showing a banner and collecting legally valid consent (GDPR\/KVKK) remains the site owner's responsibility \u2014 this is not a consent-management plugin.<\/p><\/dd>\n<dt id=\"why%20are%20no%20events%20tracked%20on%20my%20staging%20site%3F\"><h3>Why are no events tracked on my staging site?<\/h3><\/dt>\n<dd><p>By design. When the site URL looks like a staging or local environment (localhost, .test, .local, \"staging\"), Conversion Tracking Kit fires nothing so test traffic never pollutes your real store data.<\/p><\/dd>\n<dt id=\"why%20did%20the%20purchase%20event%20not%20fire%20for%20some%20orders%3F\"><h3>Why did the purchase event not fire for some orders?<\/h3><\/dt>\n<dd><p>The purchase event fires on the order received (thank-you) page. If the customer never reaches that page (closed the tab, payment app redirect failed) or an ad blocker intervened, the event is missed for that visit \u2014 the dashboard card shows you exactly how many orders this affected. Since 1.6.9 the plugin retries automatically on the customer's next visit to the thank-you page within 7 days (deduplicated platform-side, so nothing is ever counted twice). If the customer never returns at all, that order stays unrecoverable from the browser \u2014 recovering it requires sending the conversion from the server via the platforms' APIs, which needs API credentials and is outside the scope of the free plugin.<\/p><\/dd>\n<dt id=\"why%20does%20google%20ads%20only%20receive%20the%20purchase%20event%3F\"><h3>Why does Google Ads only receive the purchase event?<\/h3><\/dt>\n<dd><p>By design. Google Ads optimizes bidding on conversions, and for a store the conversion is the purchase \u2014 feeding it every add_to_cart as a \"conversion\" would pollute your conversion column and mislead smart bidding. The full funnel (view_item, add_to_cart, begin_checkout, purchase) still goes to GA4 and Meta, and you can build Ads audiences from the linked GA4 property.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.6.9<\/h4>\n\n<ul>\n<li>Purchase recovery: an order is now only marked \"tracked\" after the browser CONFIRMS the tracking libraries actually loaded and the purchase event went out. If an ad blocker killed the scripts or the tab closed mid-load, the thank-you page silently retries on the customer's next visit (within 7 days) instead of losing the conversion forever. Platform-side deduplication (transaction_id for GA4\/Google Ads, eventID for Meta) guarantees no double counting.<\/li>\n<li>The \"orders vs. purchase events\" dashboard card is now backed by browser-confirmed events only, so the number you see is the number that really reached the platforms' endpoints from the browser.<\/li>\n<\/ul>\n\n<h4>1.6.8<\/h4>\n\n<ul>\n<li>Fix: bundled translations (Turkish) now actually load on customer sites \u2014 the explicit textdomain loading was removed in an earlier compliance pass, which silently left the whole admin UI in English.<\/li>\n<li>Fix: begin_checkout no longer re-fires on every checkout page reload \u2014 it fires once per browser session (again only if the cart total changed).<\/li>\n<li>New: \"Include shipping and tax in the purchase conversion value\" setting \u2014 untick it to report net product revenue to the ad platforms (common ROAS preference).<\/li>\n<li>New: the scanner now warns when the homepage contains a cookie banner it does not recognize (hosted CMPs like OneTrust\/Usercentrics, hand-built banners) and points to the Consent Mode default setting; sites using the WP Consent API standard get the same hint.<\/li>\n<\/ul>\n\n<h4>1.6.7<\/h4>\n\n<ul>\n<li>New: \"Consent Mode default\" setting on the dashboard \u2014 sites whose cookie banner is custom or not on the known-plugin list can now force the Google Consent Mode v2 default to denied (or granted) instead of relying on auto-detection.<\/li>\n<li>Consent plugin auto-detection now also recognizes Real Cookie Banner, iubenda and Termly.<\/li>\n<li>FAQ: documented the browser-side tracking limits honestly (missed thank-you pages, why Google Ads only receives purchase).<\/li>\n<\/ul>\n\n<h4>1.6.6<\/h4>\n\n<ul>\n<li>New: interactive \"Verify Setup\" tool \u2014 open any page of your site and watch conversion tracking fire live, even when tracking is managed by Google Tag Manager or another plugin. Click a phone \/ WhatsApp \/ email link or submit a form and get a per-action \u2713\/\u2717 summary plus a live timeline of Google Ads, GA4 and Meta hits.<\/li>\n<li>Verify tells real Google Ads conversions (label-carrying hits) apart from the base\/remarketing tag, merges the multiple endpoints of a single conversion into one row, and warns when more than one GA4 property fires on the same page (likely double counting).<\/li>\n<li>Verify follows you across pages for 30 minutes (admin-only, never set for visitors), so real journeys like homepage \u2192 contact page \u2192 form submit can be tested end to end. A floating pill shows it is live, with a one-click Stop.<\/li>\n<\/ul>\n\n<h4>1.5.1<\/h4>\n\n<ul>\n<li>The event log is now a fixed, performance-only rolling buffer: removed the retention filter so no limit is ever raised by payment, and every free feature works fully within it.<\/li>\n<li>Reworded the dashboard upgrade hints so they only mention capabilities that genuinely require external resources (platform API comparison, server-side CAPI recovery, continuous monitoring and email alerts) \u2014 no locally available reporting is held back.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>The plugin now focuses solely on online-sales (WooCommerce) conversion tracking, fully free and fully functional. Lead tracking (calls, WhatsApp, form submissions) has moved entirely to the separate Conversion Tracking Kit Pro plugin \u2014 no lead code ships in the free plugin anymore.<\/li>\n<li>Unified all internal handles under a single, distinct prefix to avoid any chance of conflicts with other plugins.<\/li>\n<li>Security: the self-hosted update channel now pins TLS verification and only accepts an update package served from the official domain, so a tampered manifest can never point WordPress at an off-site plugin zip.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>New: \"Conversions by channel\" dashboard card \u2014 see where your tracked conversions came from (organic search, Google Ads, Meta, TikTok, direct, referral\u2026), including organic search which ad platforms never credit. Captured first-party from referrer + click IDs; no external API.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Setup wizard refinements and clearer guidance through the GA4, Meta Pixel and Google Ads steps.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Extension hooks for add-ons (tracker filter, dashboard action, purchase action).<\/li>\n<li>Event log: new \"source\" column (browser\/CAPI) and per-order distinct purchase counting.<\/li>\n<li>Automatic table migration after updates.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>All database queries now use fully prepared statements (%i identifier placeholders); minimum WordPress raised to 6.2.<\/li>\n<li>gtag.js loader is now properly enqueued (async) via wp_enqueue_script instead of a hardcoded script tag.<\/li>\n<li>Plugin Check compliance pass.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Setup test: also detect Meta Pixel requests sent as POST to facebook.com\/tr\/ without a query string (large payloads) \u2014 fixes false \"no request detected\" for Meta.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Setup test: raised the resource timing buffer and added a PerformanceObserver stream so tracking requests are not missed on asset-heavy pages (false \"no request detected\" results).<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: setup wizard, conflict scanner, GA4 + Meta Pixel + Google Ads tracking, setup test, orders-vs-events comparison, event log, Consent Mode v2.<\/li>\n<\/ul>","raw_excerpt":"Set up GA4, Meta Pixel and Google Ads conversion tracking for WooCommerce in minutes \u2014 then verify the events actually fire.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/326296","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=326296"}],"author":[{"embeddable":true,"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/abdullahustun"}],"wp:attachment":[{"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=326296"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=326296"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=326296"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=326296"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=326296"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=326296"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}