{"id":291281,"date":"2026-03-26T19:12:01","date_gmt":"2026-03-26T19:12:01","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/utm-tracker-for-elementor\/"},"modified":"2026-05-05T21:43:23","modified_gmt":"2026-05-05T21:43:23","slug":"shulman-utm-attribution-for-elementor","status":"publish","type":"plugin","link":"https:\/\/ms.wordpress.org\/plugins\/shulman-utm-attribution-for-elementor\/","author":21137828,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.10.10","stable_tag":"1.10.10","tested":"6.9.4","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Shulman UTM Attribution for Elementor","header_author":"Ranel Shulman","header_description":"Simple and reliable UTM tracking for Elementor Forms and WooCommerce with First Click and Last Click attribution support.","assets_banners_color":"","last_updated":"2026-05-05 21:43:23","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":5,"author_block_rating":0,"active_installs":10,"downloads":394,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","changelog"],"tags":{"1.10.10":{"tag":"1.10.10","author":"ranelshulman","date":"2026-05-05 21:43:23"},"1.10.6":{"tag":"1.10.6","author":"ranelshulman","date":"2026-04-20 19:51:29"},"1.10.7":{"tag":"1.10.7","author":"ranelshulman","date":"2026-04-26 15:31:42"},"1.10.8":{"tag":"1.10.8","author":"ranelshulman","date":"2026-04-30 19:01:58"},"1.10.9":{"tag":"1.10.9","author":"ranelshulman","date":"2026-05-03 08:11:05"},"1.7.12":{"tag":"1.7.12","author":"ranelshulman","date":"2026-03-26 19:21:15"},"1.8.0":{"tag":"1.8.0","author":"ranelshulman","date":"2026-04-14 12:38:36"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3505913,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.10.10","1.10.6","1.10.7","1.10.8","1.10.9","1.7.12","1.8.0"],"block_files":[],"assets_screenshots":[],"screenshots":[],"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[9067,76538,335,24188,286],"plugin_category":[36,45],"plugin_contributors":[258723],"plugin_business_model":[],"class_list":["post-291281","plugin","type-plugin","status-publish","hentry","plugin_tags-attribution","plugin_tags-elementor","plugin_tags-leads","plugin_tags-utm","plugin_tags-woocommerce","plugin_category-analytics","plugin_category-ecommerce","plugin_contributors-ranelshulman","plugin_committers-ranelshulman"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/shulman-utm-attribution-for-elementor\/assets\/icon-256x256.png?rev=3505913","icon_2x":"https:\/\/ps.w.org\/shulman-utm-attribution-for-elementor\/assets\/icon-256x256.png?rev=3505913","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Tracks attribution data from submitted fields, cookie snapshots, first-click cookies, server-side fallback, and WooCommerce attribution in a defined source-of-truth hierarchy.<\/p>\n\n<p>Features:\n* Elementor lead capture with attribution snapshot\n* WooCommerce order attribution support\n* First-touch and last-touch source tracking\n* Leads dashboard with filters and CSV export\n* Stores WooCommerce customer phone numbers alongside attribution data\n* Backward compatibility for legacy cookies, options, and meta keys<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin ZIP in WordPress admin or copy the plugin folder to \/wp-content\/plugins\/.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Configure settings from the plugin admin screen.<\/li>\n<\/ol>\n\n<!--section=changelog-->\n<h4>1.10.10<\/h4>\n\n<ul>\n<li>Fix: prevent direct traffic from being incorrectly classified as untracked.<\/li>\n<li>Fix: ensure last_touch_source stays consistent with resolved utm_source.\nPreviously, when utm_source resolved to \"direct\", last_touch_source was incorrectly\nset to \"untracked\" because is_meaningful_attribution_source() excludes \"direct\".\nlast_touch_source now correctly mirrors \"direct\" when that is the resolved state.<\/li>\n<li>Fix: improve webhook \/ Elementor hidden-field data consistency for unattributed traffic.<\/li>\n<li>Improvement: clearer separation between direct and untracked states across resolver,\nlead snapshot, and WooCommerce order meta.<\/li>\n<\/ul>\n\n<h4>1.10.9<\/h4>\n\n<ul>\n<li>Fixed: confidence is now explicit when both utm_source AND utm_medium are present in the URL,\neven when fbclid is also present. fbclid no longer downgrades confidence from explicit to inferred\nwhen full explicit UTM exists. Partial UTM + fbclid correctly stays inferred.<\/li>\n<li>Added: com.google.android.googlequicksearchbox referrer is now classified as google \/ organic.\nThis covers traffic from Android Google app surfaces (Google Discover, Search widget, Lens, Google app).\nPreviously this could fall through to an untracked or referral classification.<\/li>\n<\/ul>\n\n<h4>1.10.8<\/h4>\n\n<p>Explicit UTM \u2192 Click IDs \u2192 Referrer \u2192 User-Agent \u2192 First Touch \u2192 Direct \u2192 Untracked.\n* Improved: fbclid split logic \u2014 fbclid alone now resolves to facebook\/social (organic intent).\n  Only upgrades to facebook\/paid when utm_campaign, utm_content, utm_term, or dynamic ad variables are present.\n* Fixed: utm_medium=social (and any explicit utm_medium) is never overwritten by click ID inference.\n* Improved: direct vs untracked are now clearly separated. \"direct\" means tracking is functioning\n  but no attributable source was found. \"untracked\" is reserved for complete tracking failure\n  (all signals absent: no UTM, no click ID, no referrer, no UA match, no cookie, no first-touch).\n* Added: attribution confidence field (explicit \/ inferred \/ fallback \/ untracked) stored\n  in DB and order meta.\n* Fixed: server_side_fallback no longer returns \"untracked\" for missing\/internal referrers;\n  the caller now decides direct vs untracked based on full signal inventory.\n* Improved: WooCommerce orders column and meta box now distinguish direct vs untracked visually.\n* Improved: Dashboard UTM source filter now lists direct and untracked as separate options.\n* Updated: DB schema version 1.4.0 \u2014 adds confidence column to wp_ute_leads table.\n* Updated: utm-tracker.js \u2014 fbclid click ID split logic, confidence field in cookie snapshot,\n  internal navigation returns \"direct\" not \"untracked\".<\/p>\n\n<h4>1.10.7<\/h4>\n\n<ul>\n<li>Fixed: fbclid normalization no longer overrides an explicitly set utm_medium=social.\nPreviously, any visit with fbclid and utm_medium=social (e.g. an organic Facebook post\ntagged manually) would have its medium silently replaced with paid_social.\nNow only empty or \"none\" medium values are inferred as paid_social from fbclid presence.<\/li>\n<\/ul>\n\n<h4>1.10.6<\/h4>\n\n<ul>\n<li>Fixed remaining Plugin Check SQL issues (prepared statements compliance)<\/li>\n<li>Improved security of database queries.<\/li>\n<li>Cleaned uninstall logic for safer execution.<\/li>\n<\/ul>\n\n<h4>1.10.5<\/h4>\n\n<ul>\n<li>Removed remaining prebuilt SQL variables and inlined prepare() calls.<\/li>\n<li>Reworked admin queries to avoid interpolated SQL variable patterns flagged by review.<\/li>\n<li>Kept phone capture, dashboard display, and CSV export support intact.<\/li>\n<\/ul>\n\n<h4>1.10.4<\/h4>\n\n<ul>\n<li>Fixed admin SQL queries to use prepared statements consistently.<\/li>\n<li>Escaped interpolated table names in dashboard queries.<\/li>\n<li>Added missing translators comments and refreshed readme metadata.<\/li>\n<\/ul>\n\n<h4>1.10.3<\/h4>\n\n<ul>\n<li>Added plugin readme file for compliance.<\/li>\n<li>Improved static analysis compatibility for admin SQL and translations.<\/li>\n<li>Kept lead phone field support in DB, admin table, and CSV export.<\/li>\n<\/ul>\n\n<h4>1.10.2<\/h4>\n\n<ul>\n<li>Added lead phone field support.<\/li>\n<li>Added phone column to leads screen and CSV export.<\/li>\n<\/ul>","raw_excerpt":"Track UTM attribution for Elementor forms and WooCommerce with lead capture, phone storage, and first-touch \/ last-touch reporting.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ms.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/291281","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ms.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ms.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ms.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=291281"}],"author":[{"embeddable":true,"href":"https:\/\/ms.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ranelshulman"}],"wp:attachment":[{"href":"https:\/\/ms.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=291281"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ms.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=291281"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ms.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=291281"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ms.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=291281"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ms.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=291281"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ms.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=291281"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}