=== Ad Click Tracking for Gravity Forms ===
Contributors: pluginbrewery
Tags: gravity forms, google ads, gclid, conversion tracking, click tracking
Requires at least: 6.5
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 1.0.0
License: GPLv3 or later
License URI: https://www.gnu.org/licenses/gpl-3.0.txt

Capture Google, Microsoft and Meta ad click IDs (gclid, msclkid, fbclid) on every Gravity Forms entry for reliable lead attribution.

== Description ==

Ad Click Tracking for Gravity Forms records which ad click brought each lead to your site, so you can connect Gravity Forms entries back to your paid campaigns. When a visitor arrives from a paid ad, the plugin captures the click identifier and stores it for 30 days in a first-party cookie. The next time that visitor submits one of your forms, the captured values are saved with the entry.

It detects the major ad networks automatically:

* **Google Ads** — `gclid`, `gbraid`, `wbraid`, plus the `gad_source` and `gad_campaignid` markers Google adds to every ad click (and Google Ads landing-page referrers)
* **Microsoft Advertising** — `msclkid`
* **Meta (Facebook/Instagram) Ads** — `fbclid`, once the visit is also marked as paid

Campaigns tagged by hand are recognised too: a paid `utm_medium` such as `cpc`, `ppc` or `paid`, alongside a `utm_source` naming Google, Bing/Microsoft or Facebook/Instagram. That matters because `gclid` and `msclkid` only exist when auto-tagging is switched on.

A visit that cannot be shown to come from a paid ad is recorded as `Unknown` rather than credited to a network. Facebook adds `fbclid` to organic links as well as ads, so it never counts as paid on its own.

Three values are stored on every entry:

* **Ad Source** — a friendly label such as `Google Ads`, `Microsoft Ads`, `Meta Ads`, or `Unknown`.
* **Ad Network** — a machine-friendly slug (`google`, `microsoft`, `meta`).
* **Ad Click ID** — the captured click identifier.

= Built for Gravity Forms =

Hidden tracking fields are added to your forms automatically and saved with every entry — no form editing required. Turn tracking on for all forms at once under Settings → Ad Click Tracking, or per form under Form Settings. The captured values appear on each entry like any other field, so they flow into entry exports and notifications automatically.

= Lightweight by design =

* No external requests — everything happens in a small front-end script and first-party cookies.
* No custom database tables.
* Choose first-click or last-click attribution, so multi-page visits resolve correctly.

= Upgrade to full attribution =

Ad Click Tracking captures paid ad clicks. When you need to know where *every* lead came from, upgrade to **Referral Source Tracking for Gravity Forms**:

* Every traffic source — organic search, referral links, social, email and direct, not just paid ads.
* AI and LLM traffic — ChatGPT, Perplexity, Copilot, Claude, Grok and DeepSeek, with Gemini attributed under Google.
* Complete UTM capture: source, medium, campaign, term and content.
* First-touch and last-touch together, with an adjustable attribution window.
* Built-in reporting across the entries you already collect.

[See Referral Source Tracking for Gravity Forms](https://pluginbrewery.com/wordpress-plugins/gravity-forms-referral-tracking/?utm_source=ad-click-tracking-for-gravity-forms&utm_medium=readme&utm_campaign=free-to-pro&utm_content=description)

== Installation ==

Ad Click Tracking extends Gravity Forms, so install and activate Gravity Forms first — the plugin does nothing on its own.

= From your WordPress dashboard =

1. Visit `Plugins > Add New`
2. Search for `Ad Click Tracking for Gravity Forms`
3. Install it once it appears
4. Activate the plugin from your Plugins page
5. Go to "After activation" below

= Manually =

1. Upload the `ad-click-tracking-for-gravity-forms` folder to the `/wp-content/plugins/` directory
2. Activate the plugin through the 'Plugins' menu in WordPress
3. Go to "After activation" below

= After activation =

Tracking is switched off until you turn it on — this step isn't optional.

1. Go to `Settings > Ad Click Tracking`
2. Tick **Add hidden tracking fields to every Gravity Form automatically** to cover every form at once, or leave it unticked and enable tracking per form under `Form Settings > Form Options`
3. Pick your attribution model — **First click** records the ad that introduced the lead, **Last click** records the one that brought them back
4. Save Changes
5. You're done. The next submission from an ad click will carry Ad Source, Ad Network and Ad Click ID on the entry

= Getting started =

1. [Plugin documentation](https://pluginbrewery.com/wordpress-plugins/gravity-forms-google-ads-tracking/?utm_source=ad-click-tracking-for-gravity-forms&utm_medium=readme&utm_campaign=docs): what each captured field means, and how to use the values in notifications, exports and CRM mappings.
2. [Frequently Asked Questions](https://wordpress.org/plugins/ad-click-tracking-for-gravity-forms/#faq-header): including why a second test ad in the same browser doesn't replace the first — the most common "it isn't working" question.
3. [Support](https://wordpress.org/support/plugin/ad-click-tracking-for-gravity-forms/): ask a question on the plugin's support forum.
4. [Referral Source Tracking for Gravity Forms](https://pluginbrewery.com/wordpress-plugins/gravity-forms-referral-tracking/?utm_source=ad-click-tracking-for-gravity-forms&utm_medium=readme&utm_campaign=free-to-pro&utm_content=installation): the paid version, for every traffic source rather than just paid ads — organic search, AI assistants, social, email and referrals, with full UTM capture and reporting.

== Frequently Asked Questions ==

= Does this send data to Google, Microsoft, or Meta? =

No. The plugin only stores the captured values with your Gravity Forms entries. It makes no external requests.

= How long is the click ID stored? =

The click identifier is stored in a first-party cookie for 30 days. You can choose whether the first or the most recent ad click within that window is captured, under Settings → Ad Click Tracking.

= I tested two different ads and only the first one was recorded =

That is first-click attribution working as intended. With **First click** selected, the first ad click is kept for the full 30 days, so clicking a different ad later will not replace it. Clear this site's cookies or use a private window between tests, or switch to **Last click** under Settings → Ad Click Tracking.

= Traffic from a Facebook or Instagram link shows as Unknown =

Facebook adds `fbclid` to every outbound link, organic posts included, so on its own it cannot prove the visit came from an ad. It is recorded as Meta Ads once the link is also tagged as paid — for example `utm_medium=paid` — which you can set under URL parameters in Ads Manager. This is deliberate: it keeps organic Facebook and Instagram traffic from being counted as paid.

= Can I use the captured values in notifications and confirmations? =

Yes. The three tracking fields are real Gravity Forms fields, so they work as standard merge tags — for example `{Ad Source:2185230}` — and appear in the merge tag drop-down wherever Gravity Forms offers one.

= Do I need to add anything to my forms? =

No. Hidden tracking fields are added automatically when tracking is enabled, and the values are saved with each entry.

= Where do I see the captured values? =

On each entry, alongside your regular form fields — they also come along in entry exports and can be used in notifications like any other field.

== Screenshots ==

1. Choose first or last click attribution, and turn tracking on for every form at once.
2. Enable or disable ad click tracking on any individual Gravity Form.
3. The captured Ad Source, Ad Network and Ad Click ID saved with the entry.

== Changelog ==

= 1.0.0 Aug 13, 2026 =
* Initial release
