{"id":385271,"date":"2026-10-17T04:18:22","date_gmt":"2026-10-17T04:18:22","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/ghizo-attribution-tracker\/"},"modified":"2026-10-17T04:18:13","modified_gmt":"2026-10-17T04:18:13","slug":"ghizo-attribution-tracker","status":"publish","type":"plugin","link":"https:\/\/sna.wordpress.org\/plugins\/ghizo-attribution-tracker\/","author":15787402,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.3","requires":"6.4","requires_php":"8.0","requires_plugins":null,"header_name":"Ghizo Attribution Tracker","header_author":"Ghizo Labs","header_description":"Captures, classifies and preserves visitor acquisition data (UTMs, ad click IDs, referrer, landing page) from first visit through conversion, and attaches it to form submissions and WooCommerce orders.","assets_banners_color":"677394","last_updated":"2026-10-17 04:18:13","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/ghizolabs.com\/attribution-tracker\/","header_author_uri":"https:\/\/ghizolabs.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":56,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"dghizoni","date":"2026-10-17 04:18:13","revision":3751400}},"upgrade_notice":{"1.0.0":"<p>First release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3751400,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3751400,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3751400,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3751400,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3751400,"resolution":"1","location":"assets","locale":"","width":1600,"height":1000},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3751400,"resolution":"2","location":"assets","locale":"","width":1600,"height":1000},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3751400,"resolution":"3","location":"assets","locale":"","width":1600,"height":1000},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3751400,"resolution":"4","location":"assets","locale":"","width":1600,"height":1000},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3751400,"resolution":"5","location":"assets","locale":"","width":1600,"height":1000},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3751400,"resolution":"6","location":"assets","locale":"","width":1600,"height":1000},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3751400,"resolution":"7","location":"assets","locale":"","width":1600,"height":1000},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3751400,"resolution":"8","location":"assets","locale":"","width":1600,"height":1000}},"screenshots":{"1":"Every lead arrives with its campaign: a real submission, with the first and last touch filled in.","2":"Works behind any page cache: capture happens in the visitor's browser, after the cached page loads.","3":"The debug panel shows exactly what was captured for a visit, and how it was classified.","4":"Gravity Forms: add the tracking fields to any form in one click. They fill themselves.","5":"Contact Form 7, WPForms, Fluent Forms, Ninja Forms and Elementor Pro: add a token to the email and it is filled in.","6":"WooCommerce: first and last touch saved on every order.","7":"The Status screen: run a test visit and see what this browser has stored.","8":"Settings: retention up to 730 days, the cookie name, and your own parameters."}},"plugin_section":[],"plugin_tags":[9067,601,40003,456,24188],"plugin_category":[42,55],"plugin_contributors":[287182],"plugin_business_model":[],"class_list":["post-385271","plugin","type-plugin","status-publish","hentry","plugin_tags-attribution","plugin_tags-forms","plugin_tags-lead-source","plugin_tags-marketing","plugin_tags-utm","plugin_category-contact-forms","plugin_category-seo-and-marketing","plugin_contributors-dghizoni","plugin_committers-dghizoni"],"banners":{"banner":"https:\/\/ps.w.org\/ghizo-attribution-tracker\/assets\/banner-772x250.png?rev=3751400","banner_2x":"https:\/\/ps.w.org\/ghizo-attribution-tracker\/assets\/banner-1544x500.png?rev=3751400","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/ghizo-attribution-tracker\/assets\/icon-128x128.png?rev=3751400","icon_2x":"https:\/\/ps.w.org\/ghizo-attribution-tracker\/assets\/icon-256x256.png?rev=3751400","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/ghizo-attribution-tracker\/assets\/screenshot-1.png?rev=3751400","caption":"Every lead arrives with its campaign: a real submission, with the first and last touch filled in."},{"src":"https:\/\/ps.w.org\/ghizo-attribution-tracker\/assets\/screenshot-2.png?rev=3751400","caption":"Works behind any page cache: capture happens in the visitor's browser, after the cached page loads."},{"src":"https:\/\/ps.w.org\/ghizo-attribution-tracker\/assets\/screenshot-3.png?rev=3751400","caption":"The debug panel shows exactly what was captured for a visit, and how it was classified."},{"src":"https:\/\/ps.w.org\/ghizo-attribution-tracker\/assets\/screenshot-4.png?rev=3751400","caption":"Gravity Forms: add the tracking fields to any form in one click. They fill themselves."},{"src":"https:\/\/ps.w.org\/ghizo-attribution-tracker\/assets\/screenshot-5.png?rev=3751400","caption":"Contact Form 7, WPForms, Fluent Forms, Ninja Forms and Elementor Pro: add a token to the email and it is filled in."},{"src":"https:\/\/ps.w.org\/ghizo-attribution-tracker\/assets\/screenshot-6.png?rev=3751400","caption":"WooCommerce: first and last touch saved on every order."},{"src":"https:\/\/ps.w.org\/ghizo-attribution-tracker\/assets\/screenshot-7.png?rev=3751400","caption":"The Status screen: run a test visit and see what this browser has stored."},{"src":"https:\/\/ps.w.org\/ghizo-attribution-tracker\/assets\/screenshot-8.png?rev=3751400","caption":"Settings: retention up to 730 days, the cookie name, and your own parameters."}],"raw_content":"<!--section=description-->\n<p>A form submission tells you someone is interested. It does not tell you which\nad, email or search brought them, and by the time they get in touch the referrer\nis long gone.<\/p>\n\n<p><strong>Ghizo Attribution Tracker<\/strong> records how every visitor found your site, keeps it\nacross visits, and attaches it to the form they submit and the order they place.\nEach lead arrives with its campaign on it: where they first found you, and what\nfinally made them get in touch.<\/p>\n\n<h4>Features at a glance<\/h4>\n\n<ul>\n<li><strong>First and last touch<\/strong>, stored separately: the campaign that found the visitor and the one that converted them<\/li>\n<li><strong>UTM parameters<\/strong>, the newer GA4 set, and ad click IDs from Google, Meta and Microsoft<\/li>\n<li><strong>Channel classification<\/strong>: Paid Search, Organic Social, Email, Direct and more, worked out for you<\/li>\n<li><strong>Six form plugins<\/strong>: Gravity Forms, Contact Form 7, WPForms, Fluent Forms, Ninja Forms and Elementor Pro<\/li>\n<li><strong>WooCommerce<\/strong>: attribution saved on every order and shown on the order screen<\/li>\n<li><strong>Works behind any page cache or CDN<\/strong>: nothing visitor specific is ever printed into the page<\/li>\n<li><strong>Full retention on Safari and iPhone<\/strong>, where most trackers lose the visitor after seven days<\/li>\n<li><strong>Your own parameters<\/strong>: track partner IDs, promo codes or anything else in the URL<\/li>\n<li><strong>No external requests and no personal data<\/strong>: everything stays on your site<\/li>\n<li><strong>A debug panel and a test visit<\/strong>, so you can see exactly what was captured and why<\/li>\n<\/ul>\n\n<h4>Every lead arrives with its campaign<\/h4>\n\n<p>Add the tracking to your forms the way each form plugin already works, and the\nvalues fill themselves in.<\/p>\n\n<ul>\n<li><strong>Gravity Forms.<\/strong> Add the tracking fields to any form in one click. A server\nside safety net fills any field that arrives empty, so a lead is never missing\nits source because JavaScript was blocked.<\/li>\n<li><strong>Contact Form 7.<\/strong> Write <code>[wpat_last_source]<\/code> or any other token in the mail\ntemplate. There is also a hidden field tag, <code>[wpat_hidden last_source]<\/code>, for\nthe form itself.<\/li>\n<li><strong>WPForms.<\/strong> Use <code>{wpat_last_source}<\/code> anywhere WPForms accepts a smart tag: a\nnotification, a confirmation, or a stored entry.<\/li>\n<li><strong>Fluent Forms.<\/strong> Use <code>{wpat.last_source}<\/code> in a notification, a confirmation or\nan integration, or name a hidden field after a token and it fills itself.<\/li>\n<li><strong>Ninja Forms.<\/strong> Use <code>{wpat:last_source}<\/code> in a notification, an action, or a\nhidden field's default value.<\/li>\n<li><strong>Elementor Pro.<\/strong> Write <code>[wpat_last_source]<\/code> in the form's email, alongside\nElementor's own field references.<\/li>\n<li><strong>WooCommerce.<\/strong> First and last touch are copied onto each order at checkout,\nthrough the classic checkout or the checkout block, so the record outlives the\ncookie.<\/li>\n<\/ul>\n\n<h4>Works with any page cache or CDN<\/h4>\n\n<p>Most attribution plugins decide on the server, which breaks the moment a page is\ncached: one visitor's campaign ends up served to the next. Ghizo Attribution\nTracker captures everything in the visitor's own browser and keeps it in a first\nparty cookie, so WP Rocket, LiteSpeed, Cloudflare or any other cache can serve\nthe same page to everybody and the attribution still arrives.<\/p>\n\n<h4>Built for how people really buy<\/h4>\n\n<p>People rarely convert on their first visit. They click an ad, leave, and come\nback weeks later through an email or a search. Attribution is kept for 90 days by\ndefault and can be set to anything up to 730, and the window restarts on every new\ncampaign visit.<\/p>\n\n<p>Safari and every browser on iPhone delete a cookie set by JavaScript after seven\ndays. This plugin also sets the cookie from the server, which those browsers do\nnot cut short, so the window you choose is the window you get.<\/p>\n\n<h4>What it captures<\/h4>\n\n<ul>\n<li>UTM parameters: <code>utm_source<\/code>, <code>utm_medium<\/code>, <code>utm_campaign<\/code>, <code>utm_term<\/code>, <code>utm_content<\/code><\/li>\n<li>The GA4 set: <code>utm_id<\/code>, <code>utm_source_platform<\/code>, <code>utm_creative_format<\/code>, <code>utm_marketing_tactic<\/code><\/li>\n<li>Ad click IDs: <code>gclid<\/code>, <code>gbraid<\/code>, <code>wbraid<\/code>, <code>fbclid<\/code>, <code>msclkid<\/code><\/li>\n<li>Your own query parameters, as many as you need<\/li>\n<li>The referrer and the landing page of each visit<\/li>\n<li>A classified channel, for example Paid Search, Organic Social or Direct<\/li>\n<\/ul>\n\n<h4>Privacy<\/h4>\n\n<p>No personal data is collected, no external service is contacted and there is no\ntelemetry of any kind. The only thing stored in the visitor's browser is one\nfirst party cookie holding the campaign values listed above. Deleting the plugin\nremoves its settings.<\/p>\n\n<h4>Documentation and support<\/h4>\n\n<ul>\n<li><a href=\"https:\/\/ghizolabs.com\/attribution-tracker\/docs\/\">Documentation<\/a>: setup for every form plugin, every token, and hooks for developers. The same guide ships inside the plugin.<\/li>\n<li><a href=\"https:\/\/wordpress.org\/support\/plugin\/ghizo-attribution-tracker\/\">Support forum<\/a>: questions and bug reports.<\/li>\n<\/ul>\n\n<h4>In the paid add-on<\/h4>\n\n<p>Attribution Tracker Pro is a separate plugin for teams that want the numbers in\nWordPress:<\/p>\n\n<ul>\n<li>Revenue and orders by source, medium, campaign or channel<\/li>\n<li>First touch against last touch, side by side<\/li>\n<li>Form conversions reported alongside revenue<\/li>\n<li>An attribution column and filters on the WooCommerce orders list<\/li>\n<li>CSV export of any report<\/li>\n<\/ul>\n\n<p>Available from <a href=\"https:\/\/ghizolabs.com\/attribution-tracker\/\">ghizolabs.com<\/a>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin from <strong>Plugins \u2192 Add New<\/strong>.<\/li>\n<li>Open <strong>Attribution \u2192 Status<\/strong> and press <strong>Run a test visit<\/strong> to see capture working.<\/li>\n<li>For Gravity Forms, go to <strong>Attribution \u2192 Gravity Forms<\/strong>, pick your forms and add\nthe tracking fields.<\/li>\n<li>For every other form plugin, add the tokens you want to the email or the\nnotification. The Status screen lists every token, in each plugin's own syntax.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20work%20with%20a%20caching%20plugin%20or%20a%20cdn%3F\"><h3>Does this work with a caching plugin or a CDN?<\/h3><\/dt>\n<dd><p>Yes, and that is the point. Capture and storage happen in the browser, so no\ncached page can ever hold or leak one visitor's attribution.<\/p><\/dd>\n<dt id=\"what%20is%20the%20difference%20between%20first%20and%20last%20touch%3F\"><h3>What is the difference between first and last touch?<\/h3><\/dt>\n<dd><p>First touch is the campaign that introduced the visitor to your site. Last touch\nis the one they arrived through when they finally converted. Both are kept, so\nyou can credit the ad that found them and the email that closed them.<\/p><\/dd>\n<dt id=\"why%20is%20nothing%20recorded%20when%20i%20visit%20directly%3F\"><h3>Why is nothing recorded when I visit directly?<\/h3><\/dt>\n<dd><p>A direct visit is recorded, as a Direct channel touch. If nothing at all appears,\nJavaScript did not run, or the browser had cookies blocked.<\/p><\/dd>\n<dt id=\"how%20long%20does%20the%20attribution%20last%3F\"><h3>How long does the attribution last?<\/h3><\/dt>\n<dd><p>90 days by default, and up to 730 under <strong>Attribution \u2192 Settings<\/strong>. Safari and\nevery browser on iPhone cap a cookie written by JavaScript at seven days, so the\nplugin also has the server set the same cookie, which is not capped. That request\ngoes to a small endpoint that is never part of the cached page, and if it ever\nfails the next page view simply tries again.<\/p><\/dd>\n<dt id=\"how%20do%20i%20get%20attribution%20into%20a%20contact%20form%207%20email%3F\"><h3>How do I get attribution into a Contact Form 7 email?<\/h3><\/dt>\n<dd><p>Write the token in the mail template with a <code>wpat_<\/code> prefix, for example\n    [wpat_last_source], <code>[wpat_first_campaign]<\/code> or <code>[wpat_last_channel]<\/code>. Contact\nForm 7 does not store submissions, so the email is where the value is kept. To\nput it in the form itself instead, add <code>[wpat_hidden last_source]<\/code> to the form\ntemplate.<\/p><\/dd>\n<dt id=\"how%20do%20i%20get%20attribution%20into%20a%20wpforms%20notification%3F\"><h3>How do I get attribution into a WPForms notification?<\/h3><\/dt>\n<dd><p>Write the token as a smart tag, for example <code>{wpat_last_source}<\/code>. It works\nanywhere WPForms accepts text. Smart tags are used rather than a hidden field\nbecause WPForms' Hidden Field is only available in WPForms Pro.<\/p><\/dd>\n<dt id=\"how%20do%20i%20get%20attribution%20into%20a%20ninja%20forms%20notification%3F\"><h3>How do I get attribution into a Ninja Forms notification?<\/h3><\/dt>\n<dd><p>Write the token as a merge tag, for example <code>{wpat:last_source}<\/code>. To store it on\nthe submission, add a Hidden field, set its key to the token, for example\n    last_source, and type the matching merge tag as its default value.<\/p><\/dd>\n<dt id=\"how%20does%20the%20elementor%20pro%20integration%20work%3F\"><h3>How does the Elementor Pro integration work?<\/h3><\/dt>\n<dd><p>The email tokens use Elementor's documented mail filter. Filling a hidden field\nrelies on Elementor's submission record, so the plugin checks it is available\nfirst and otherwise leaves the field empty. A form never breaks because of it.<\/p><\/dd>\n<dt id=\"does%20it%20record%20attribution%20on%20woocommerce%20orders%3F\"><h3>Does it record attribution on WooCommerce orders?<\/h3><\/dt>\n<dd><p>Yes. The first and last touch are copied onto the order at checkout and shown on\nthe order screen. Orders created in the admin are not attributed.<\/p><\/dd>\n<dt id=\"can%20i%20track%20a%20parameter%20that%20is%20not%20a%20utm%3F\"><h3>Can I track a parameter that is not a UTM?<\/h3><\/dt>\n<dd><p>Yes. Add them under <strong>Attribution \u2192 Settings<\/strong>, one per line, and each is\ncaptured and exposed as a form token like everything else.<\/p><\/dd>\n<dt id=\"does%20deleting%20the%20plugin%20remove%20my%20data%3F\"><h3>Does deleting the plugin remove my data?<\/h3><\/dt>\n<dd><p>Deactivating changes nothing. Deleting removes the plugin's own settings. Values\nalready written into form entries and orders belong to those records and are left\nalone.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<p>First release.<\/p>\n\n<ul>\n<li>Capture of UTM parameters, the GA4 set, ad click IDs, referrer and landing\npage, in the browser, so page caching is unaffected.<\/li>\n<li>First and last touch stored separately, with channel classification.<\/li>\n<li>Gravity Forms, Contact Form 7, WPForms, Fluent Forms, Ninja Forms and\nElementor Pro, with a server side fill for fields that arrive empty.<\/li>\n<li>WooCommerce, with first and last touch recorded on each order.<\/li>\n<li>The full retention window on Safari and iOS, through a server set cookie.<\/li>\n<li>A front end debug panel for administrators, and a Status screen with a test\nvisit.<\/li>\n<li>Documentation bundled with the plugin, in the admin or on its own.<\/li>\n<\/ul>","raw_excerpt":"See which campaign brought in every lead and order. First and last touch UTM tracking for your forms and WooCommerce, safe with page caching.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/sna.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/385271","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sna.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/sna.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/sna.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=385271"}],"author":[{"embeddable":true,"href":"https:\/\/sna.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/dghizoni"}],"wp:attachment":[{"href":"https:\/\/sna.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=385271"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/sna.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=385271"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/sna.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=385271"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/sna.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=385271"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/sna.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=385271"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/sna.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=385271"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}