Skip to content

Changelog

Every release of Referral Tracking for Gravity Forms, newest first — new features, enhancements, and fixes.

Current version 1.7.2 Last updated: Oct 15, 2026

1.7.2

Latest
  • SecurityReferral merge tags such as {pb_ref_source} are now escaped in HTML notification emails, so a visitor can no longer insert links, images, or other HTML into your lead emails through a tracked parameter.

1.7.1

  • FixThe GA4 custom event now fires for forms that use a redirect or page confirmation. Gravity Forms 2.9 changed the way it submits forms, and the browser event this plugin watched for to notice a submission is no longer raised, so nothing was sent on those confirmations. Text confirmations were not affected.
  • FixA visitor who corrects a validation error and then submits successfully is no longer missed by the GA4 event.

1.7.0

  • NewAdded a "Don't let direct visits replace last touch" option, so a visitor who returns from a bookmark or typed-in address keeps the ad or source that last brought them in.
  • EnhancementFirst touch now keeps the visit that first brought someone to your site for the whole attribution window, and a later ad click, email click, or other click ID no longer replaces it.
  • EnhancementA returning visitor's ad click ID is now recorded only in Click ID (Last touch), and only while the ad click is their most recent visit, so map that field and enable last-touch attribution if you send click IDs to Google Ads or a CRM.
  • FixThe site no longer crashes when Gravity Forms is deactivated while this plugin is active, and uninstalling with Remove Data on Uninstall turned on no longer fails.
  • i18nTranslated the new settings text, the Custom Source field labels, and the updated Reports and email digest descriptions into all sixteen bundled languages.

1.6.2

  • EnhancementUpdated Brewhouse to 1.5.2.

1.6.1

  • EnhancementImproved license integrity.

1.6.0

  • NewAdded an opt-in GA4 setting that sends the captured source, referrer, click ID, and UTM parameters to Google Analytics as a custom event on form confirmation, covering AJAX, in-page, and redirect confirmations.
  • NewThe GA4 event name is customizable, defaults to pb_referral_submit, and also carries the last-touch parameters when last-touch attribution is enabled.
  • NewAdded the pb_gforms_referral_tracking_source_label filter, which records your own label for a detected source in a separate Custom Source field with its own merge tag, entry column, and mirror field, leaving the detected source untouched; the fields exist only while the filter is registered.
  • NewChatGPT ad clicks are recognized: the oppref click reference OpenAI appends to ChatGPT Ads landing URLs is captured, and the visit is recorded as ChatGPT Ads.
  • NewInstagram and YouTube are recognized sources, including the l.instagram.com link shim, m.youtube.com, and youtu.be.
  • NewAn Instagram click that carries fbclid is recorded as Instagram rather than Facebook, and as Instagram Ads when a UTM parameter arrives with it.
  • EnhancementOnly a paid click ID such as gclid or msclkid now marks a visit as paid, so a gclid arriving alongside a hand-written utm_medium is recorded as Google Ads, and a hand-tagged utm_medium=cpc link with no click ID is no longer marked as paid unless a Custom Source rule gives it a paid label.
  • EnhancementA paidMediums list passed through the pb_gforms_referral_tracking_js_config filter is no longer read, since utm_medium no longer takes part in the paid decision.
  • EnhancementA Facebook visit is recorded as Facebook Ads when fbclid arrives with any UTM parameter, since Meta adds fbclid to organic clicks too; fbclid on its own stays Facebook Organic.
  • EnhancementReports and the email digest now cover whole days only and end at the last complete midnight, so the "vs prior period" comparison no longer weighs a partial day against a full one.
  • EnhancementThe free Ad Click Tracking plugin is now matched by its WordPress.org slug as well as its original folder name, so it is switched back off instead of running alongside this plugin and injecting duplicate tracking fields.
  • EnhancementThe longest report range is now labeled "Last 365 days" to match the window it actually queries.
  • FixThe "Hide unattributed" description no longer claims to hide Direct traffic; the filter hides Not Set and Unknown values only, as it always did.
  • FixA link cited by ChatGPT, which arrives tagged utm_source=chatgpt.com, is now recorded as ChatGPT Organic instead of "Chatgpt.com", and a HubSpot marketing email link, which arrives tagged utm_source=hs_email, as HubSpot instead of "Hs_email".
  • FixSource detection is anchored to whole domain labels, so lookalike referrers such as box.com are no longer attributed to X, Pinterest, or Google.
  • FixAn ad click from a platform the plugin cannot name, such as a Display & Video 360 link carrying dclid alongside a utm_medium tag, is now recorded as "Unknown Ads" instead of "Unknown Ads Ads".
  • FixA custom source label that already ends in "Ads" or "Organic" is left as you wrote it instead of having a second suffix added.
  • FixLast-touch attribution no longer resets to Direct when a visitor clicks between pages of your site; it now changes only on a new arrival, so a lead that lands from Google and submits on your contact page keeps Google as the last touch.
  • FixA stale click ID is cleared when a later visit has none, so a last-touch record no longer pairs a fresh organic source with an earlier paid visit's click ID.
  • FixGranting consent now moves the held attribution into durable storage, so it survives the browser tab on sites using the consent gate.
  • FixA submission that fails validation over AJAX no longer fires a GA4 conversion event on the next page view.
  • FixThe full configuration is recovered when an optimizer runs the tracking script before its inline config, so custom source rules and the attribution window are no longer lost.
  • FixThe Protect Scripts from Optimization setting now excludes the tracking scripts from WP Rocket's minify and combine steps as well as defer and delay, which the setting always described but never applied.
  • FixThe settings page no longer renders blank when an unlicensed site opens the General or Reports tab.
  • FixEntry list values are no longer double-escaped, so referral parameters containing an ampersand display correctly.
  • FixThe entries-over-time chart no longer ends in an empty bucket dated a day ahead, and an entry created exactly on a period boundary is counted once.
  • FixThe email digest reports the period it actually covers, in every site timezone.
  • FixThe email digest re-arms its schedule on load, so deactivating and reactivating the plugin no longer stops it silently.
  • FixReactivating the plugin no longer resets the "Enable by Default" setting.
  • FixUninstall now removes the GA4 event options and per-user Reports preferences that were previously left behind.
  • FixThe mirror field buttons report a failed form lookup as an error instead of a green success notice.
  • SecurityThe one-time migrations now require the manage_options capability and take a short lock, so they no longer run on an unprivileged admin page load or duplicate entry meta across concurrent requests.
  • i18nRegenerated the translation template and refreshed all sixteen bundled translations, so the Reports tab, email digest, mirror fields, attribution window, last-touch, and GA4 settings that previously fell back to English are now translated.

1.5.1

  • FixSource and referrer no longer stay "Unknown" after a visitor grants consent when the optional consent gate is enabled; the detected value now populates once consent is given.
  • FixPlugin include paths are anchored to their own directory, preventing a rare "Cannot redeclare class" fatal when WP-CLI runs in another plugin's context.

1.5.0

  • NewAdded opt-in last-touch attribution that captures the most recent source before submission alongside first-touch, with a First/Last filter in the Reports tab that switches every chart between the two views.
  • NewLast-touch data is available as {pb_reflast*} merge tags, entry-list columns, and CSV export columns when last-touch attribution is enabled.
  • NewMirror fields can now include the last-touch set, so third-party mapping plugins can map last-touch data through their normal field dropdowns.
  • NewAdded an Attribution Window setting that controls how many days a visitor's first-touch source is remembered before a new visit is captured fresh.
  • NewAdded an optional cookieless fallback that persists attribution in the browser's localStorage when cookies are blocked; the previous always-on sessionStorage fallback is now this setting and defaults to off.
  • EnhancementOn upgrade, the plugin now carries over an existing Ad Click Tracking for Forms installation's per-form and global default tracking settings, so referral tracking stays enabled wherever ad-click tracking already was.
  • FixThe "Remove Data on Uninstall" option now removes plugin data as intended; a guard previously stopped the uninstall cleanup from running.

1.4.2

  • EnhancementEntries Over Time chart now plots a single total line, plus a dashed previous-period line when comparing, with the per-source breakdown shown on hover so source lines no longer overlap and cluster.
  • EnhancementTop Referrers groups entries by host across the Reports tab and email digest, dropping the scheme, leading www., and path so duplicate URLs from one domain combine into a single row with each full URL and its count shown on hover.
  • FixEntries Over Time tooltip total no longer adds the previous-period value on top of the current-period entry count.

1.4.1

  • Enhancement"Protect Scripts from Minification" is now "Protect Scripts from Optimization" and also stops caching/optimization plugins from deferring or delaying the tracking scripts.
  • EnhancementTracking scripts now emit data-no-defer and auto-register with WP Rocket and LiteSpeed defer/delay exclusion filters, so referral data is no longer lost when "Load JavaScript deferred" or "Delay JavaScript execution" is enabled.

1.4.0

  • NewAdded a Reports tab under Forms → Settings → Referral Tracking with attribution charts for source breakdown, submissions over time, and top UTM source, medium, campaign, and referrers.
  • NewReports tab filters include per-form scope, date-range presets, compare to previous period, and hide unattributed sources.
  • NewAdded a scheduled weekly or monthly email digest of referral entries with configurable subject, recipients, and a send-test button.
  • NewAdded the pb_gforms_rt_invalidate_debounce filter to adjust the Reports cache invalidation debounce window.
  • EnhancementAdmin pages moved under Forms → Settings using the Gravity Forms Add-On framework; the standalone page is still reachable at admin.php?page=pb-gforms-referral-tracking.
  • EnhancementReports tab now remembers each user's selected date range, compare-period toggle, and hide-unattributed toggle across visits.
  • EnhancementReports daily-bucket labels follow the site's Date Format setting, and 90- or 365-day ranges bucket by month with thinned-out ticks so the axis stays readable.
  • EnhancementReports cache invalidation now debounces behind a 60-second transient lock so high-volume submissions don't thrash the cache.
  • EnhancementMultisite uninstall now cleans every subsite, honoring each site's own "Remove Data on Uninstall" preference and clearing per-site cron events.
  • EnhancementEmail digest "Recipients" can be left blank to resolve to the site's admin email at send time, so changes to admin_email flow through automatically.
  • EnhancementRenamed "submission(s)" to "entry/entries" across admin labels, ARIA descriptions, the readme, and the digest email body to match Gravity Forms terminology.
  • EnhancementRaised minimum WordPress version to 6.5 and stopped emitting the WP 6.7+ early-textdomain notice on plugin load.
  • EnhancementCustom Sources settings table now fits the admin column at narrower viewport widths, with horizontal scroll as a fallback on very small screens.
  • FixTracking values now populate Gravity Forms hidden fields on sites using WP Rocket "Delay JavaScript Execution" (or other lazy-loaders) that ran the tracker script before its inline configuration snippet.

1.3.0

  • NewAdded an "Add mirror fields" button in Form Settings → Form Options that creates editor-visible Hidden fields, copying captured tracking values into the entry so third-party mapping plugins can pick them from their normal field dropdowns.
  • NewAdded an "Add missing mirror fields" button that restores only the manually deleted ones and leaves surviving fields' IDs untouched, so saved third-party mappings keep working.
  • NewAdded a "Remove duplicate mirror fields" button that cleans up accidental editor duplicates in one click.
  • NewAdded a "Remove mirror fields" button with a confirmation dialog warning that downstream field-ID mappings will lose visibility into past values.
  • NewAdded the pb_gforms_referral_tracking_mirror_field_definitions filter for customizing mirror field labels and CSS classes from add-ons.
  • EnhancementSubmission sync now writes to every duplicate mirror field so downstream mappings stay populated until duplicates are cleaned up.
  • EnhancementFront-end CSS hides pb-ref-mirror-* field wrappers so mirror fields do not affect form layout.
  • SecurityMirror field add, remove, and dedupe handlers now require an active license plus capability and nonce checks before mutating form fields.
  • FixMirror field save failures surface as an error notice instead of a misleading success message that under-reports the result.
  • Fix"Learn more in the documentation" link on the Custom Sources settings page now points to the plugin's documentation page instead of a generic landing page.

1.2.8

  • NewAdded an optional consent gate (off by default) that holds first-touch attribution data in sessionStorage until consent is granted via window event, callback, or flag.
  • EnhancementTracking cookies now use SameSite=Lax, Secure on HTTPS, and explicit Path.
  • EnhancementBrewhouse licensing/updater updated to 1.4.1 with clearer messaging when the plugin is locked.
  • EnhancementField injection suspension during migrations and uninstall uses a scoped helper so other plugins' gform_form_post_get_meta callbacks are no longer dropped.
  • SecurityLicensing and settings POST handlers require manage_options; General tab save verifies capability before nonce checks so unauthorized requests cannot probe POST data.
  • FixCustom source labels and match values no longer lose intentional backslashes from double sanitization.
  • FixSession-only admin cleanup removes legacy tracking cookies using the configured cookie path.

1.2.7

  • FixMultisite network mode now performs periodic checks only on the main site and syncs shared network status metadata.
  • FixEntry/export column registration now uses canonical pb_ref_* keys only, preventing duplicate "Referral Tracker" columns after upgrading from legacy versions.
  • FixAdded one-time export migration to convert saved legacy numeric entry-grid columns to canonical pb_ref_* keys and remove duplicates.
  • FixAdded one-time historical backfill for wp_gf_entry_meta so missing/empty pb_ref_* rows are populated from legacy numeric tracking field values.
  • EnhancementLicensing integrity checks now keep runtime behavior aligned with the current license entitlement.
  • EnhancementSites that were activated before a license expired keep working until the next scheduled revalidation rather than going offline immediately.
  • EnhancementAdded throttled, scheduled license revalidation with a grace-window fallback for temporary API failures.
  • EnhancementLicense notices now distinguish blocked states such as revoked keys and activation-limit failures.
  • EnhancementAdded a "Check License Now" action plus diagnostics for last check result, site usage count, and Brewhouse version.
  • Enhancement"Enable referral source tracking on all forms by default" now defaults to OFF on fresh installs and when no prior default is saved.

1.2.6

  • FixHistorical Google Ads GCLID migration now retries safely and no longer marks migration complete when the SQL copy fails.
  • FixSubmission fallback now guarantees Source and Referrer default values even when tracking hidden inputs are missing from POST.
  • FixEntry edit restore safety-net now logs failures when a tracking field cannot be restored.
  • EnhancementFront-end tracking now falls back to sessionStorage when cookies are unavailable or blocked.
  • EnhancementAdmin users with manage_options now use session-only tracking persistence for easier QA testing.
  • EnhancementOne-time admin cleanup now clears legacy pb-ref-tracking-* storage immediately after upgrade in session-only mode.

1.2.5

  • NewAdded a "Protect Scripts from Minification" option under Advanced settings that tags tracking scripts with attributes recognized by WP Rocket, LiteSpeed Cache, SG Optimizer, Autoptimize, and Cloudflare Rocket Loader.
  • NewSettings page now lists the tracking JS file paths for manual exclusion in caching plugins.
  • Enhancement"Enable by Default" setting is now a checkbox with clearer guidance on all-forms behavior and per-form overrides.

1.2.4

  • NewAdded a "Remove Data on Uninstall" option under Data & Privacy settings, unchecked by default so plugin data is preserved unless the user explicitly opts in before deleting.
  • FixUninstall now suspends gform_form_post_get_meta before reading forms, preventing tracking fields from being permanently saved into form metadata during cleanup.
  • FixAdded a one-time migration that removes orphaned tracking fields accidentally saved into form metadata by earlier plugin versions.
  • EnhancementConsolidated hook-suspension logic into a single reusable helper for safer form metadata operations.

1.2.3

  • FixEditing an entry in the admin no longer wipes tracking values or other form fields, because tracking fields are now excluded from the entry edit screen.
  • FixAdded a gform_after_update_entry safety net that restores any tracking values cleared during an entry edit.
  • EnhancementTracking fields now use GF_Field_Hidden instead of CSS-hidden text fields, reducing interference with third-party plugins.

1.2.2

  • FixTracking field IDs are now rebuilt with canonical safe IDs on every render, preventing ID collisions with real form fields (email, phone, zip, etc.).
  • FixFront-end field population restricted to plugin-owned inputs in the 218523x namespace to prevent values from being injected into unrelated fields.
  • FixGoogle Ads Tracker migration now suspends gform_form_post_get_meta so dynamically-injected fields are never saved into permanent form records.
  • FixEntry list tracking columns now reject IDs outside the plugin namespace, preventing tracking data from replacing real field values in the Entries table.
  • FixTracking entry meta is no longer written for forms where tracking is disabled.

1.2.1

  • NewAdded a Click ID tracking field and {pb_ref_clid} merge tag that capture the first detected click ID (gclid, fbclid, msclkid, etc.).
  • FixPaid ad clicks now always force a full attribution update, even when a first-touch cookie already exists.
  • FixUTM fields not present in a new paid visit are now cleared so stale values from a previous session cannot bleed through.

1.2.0

  • NewAdded Custom Sources with label, match field, match type, match value, and priority ordering.
  • NewAdded an Append Organic/Ads Labels setting for custom source labels.
  • NewAdded tracking fields as selectable columns in the Gravity Forms entry list.
  • NewAdded the pb_gforms_referral_tracking_loaded action for add-on bootstrapping.
  • NewAdded the pb_gforms_referral_tracking_custom_sources filter for programmatic custom source rules.
  • FixConstant Contact, Salesforce, and HubSpot click IDs are now correctly identified.
  • FixFacebook fbclid alone is no longer classified as paid traffic.
  • FixTracking JS no longer initializes twice on multi-page forms.
  • FixClick ID cookie now stores only the first detected ID.
  • FixDuckDuckGo and Yandex organic traffic is now correctly labeled.
  • FixAll plugin options are properly removed on uninstall.
  • FixTracking assets are no longer enqueued when Gravity Forms is not active.

1.1.5

  • i18nRefreshed all translations and added Filipino, Bengali (Bangladesh), and Urdu (Pakistan) locales.

1.1.4

  • NewAdded merge tags for every tracking field (source, referrer, UTM parameters, click ID), available in notifications, confirmations, and feeds.
  • EnhancementMerge tags only appear in the tag picker when tracking is enabled for the form.
  • EnhancementActivating this plugin alongside the standalone Google Ads-only Gravity Forms tracker now deactivates the older plugin, migrates relevant settings, and shows an admin notice.

1.1.3

  • FixLegacy pb_gf_* markup IDs and Brewhouse hook prefixes no longer conflict with other plugins that share similar names.
  • EnhancementBrewhouse licensing/updater updated to 1.3.2.
  • EnhancementMultisite activation now activates subsites in chunks with progress feedback rather than blocking on a single long request.

1.1.2

  • FixLicense key and status are cleared locally when remote deactivation fails, so a new key can be entered immediately.
  • EnhancementBrewhouse updated to 1.2.0 with per-plugin namespacing to avoid cross-plugin collisions.

1.1.1

  • i18nRefreshed all bundled translation files against the latest source strings.

1.1.0

  • NewAdded Network-mode deactivation with AJAX progress feedback and automatic subsite license cleanup.
  • NewAdded leave-page warnings during multisite license operations to prevent half-finished deactivations.
  • EnhancementSearch traffic detection now recognizes DuckDuckGo and Yandex.

1.0.6

  • EnhancementBrewhouse updater/licensing updated to 1.1.1.
  • EnhancementLicensing notices use plugin-specific markup so they stay visible when default admin notices are hidden.
  • EnhancementNetwork Mode turns off automatically when the license is not Unlimited, avoiding multisite conflicts.

1.0.5

  • NewAdded Network Mode for unlimited licenses, with chunked subsite activation and progress feedback.
  • EnhancementTracking is enabled immediately after activation without requiring a settings save.
  • FixBrewhouse licensing/updater loads safely during activation, preventing conflicts with other plugins.

1.0.4

  • NewAdded a GPL v3 license file.
  • EnhancementTracking and submission features remain active without an active license; only the settings UI is gated.
  • EnhancementNetwork activation now enables tracking across all subsites automatically.
  • EnhancementSingle-site activation auto-enables the "Enable by Default" setting.

1.0.3

  • FixTracking fields no longer appear in the form builder or Site Editor preview.

1.0.2

  • FixHidden tracking fields no longer add extra height to forms on the frontend.

1.0.1

  • NewAdded AI assistant sources to traffic detection: ChatGPT, Perplexity, Copilot, Claude, Grok, and DeepSeek.
  • EnhancementGemini traffic is now attributed to Google rather than Unknown.

1.0.0

  • NewInitial release.

← Back to Referral Tracking for Gravity Forms