FreeCLID is a free, open-source WordPress plugin for offline conversion tracking. It captures ad click IDs on landing pages, ties them to Elementor Pro form submissions, stores everything in the site's own database, and serves a Google Ads ready CSV feed over HTTPS with HTTP Basic Auth.
No SaaS, no license server, no phone-home, no Composer dependencies, and no build step.
Author: WGST
- PHP 8.1+
- WordPress 6.4+
- Elementor Pro for v1 form capture
- HTTPS for the scheduled Google Ads feed
- Captures
gclid,gbraid,wbraid,fbclid, andmsclkidfrom URL parameters. - Stores click IDs in first-party cookies with a configurable lookback window.
- Reads click ID cookies server-side during Elementor Pro form submissions.
- Stores captured leads in
{$wpdb->prefix}freeclid_leads. - Exposes
/freeclid-feed.csvfor Google Ads Data Manager scheduled uploads. - Protects the feed with HTTP Basic Auth.
- Provides a Settings > FreeCLID admin page with feed credentials, conversion settings, click-ID toggles, feed URL display, uninstall behavior, and the last 10 captured leads.
- Copy the
freeclidfolder intowp-content/plugins/. - Activate FreeCLID in WordPress.
- Go to Settings > FreeCLID.
- Set a feed username and password.
- Set the conversion name, value, currency, and lookback window.
- Copy the feed URL.
GitHub Actions builds a ready-to-install freeclid.zip on every push to main, on manual workflow runs, and on version tags.
To publish a downloadable GitHub Release, push a tag like:
git tag v1.0.0
git push origin v1.0.0The workflow creates or updates the matching GitHub Release and attaches freeclid.zip.
-
In Google Ads, enable auto-tagging first under Settings > Account settings.
-
Go to Tools > Data Manager.
-
Create a conversion action: Import > Other data sources > Conversions from clicks.
-
Name it exactly the same as the FreeCLID conversion name setting.
-
Add a scheduled HTTPS upload source pointing at:
https://example.com/freeclid-feed.csv -
Use the Basic Auth username and password from Settings > FreeCLID.
-
Schedule the upload, usually daily.
-
Test with a real ad click before scaling spend.
The feed emits Google-compatible click conversion rows:
Google Click ID,Conversion Name,Conversion Time,Conversion Value,Conversion Currency
TEST123,Lead,2026-06-07 12:30:00+0000,0,EURRows are emitted in UTC with a +0000 offset. Email and phone are never included in the CSV.
FreeCLID stores one primary click ID per form submission using this priority:
gclid > gbraid > wbraid > fbclid > msclkid
Additional valid click IDs present at submission time are stored in row meta for future integrations. The Google CSV feed emits only gclid, gbraid, and wbraid rows.
If the feed returns 401 Unauthorized under Apache with PHP-FPM even when credentials are correct, add this to .htaccess so the Authorization header reaches PHP:
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [E=HTTP_AUTHORIZATION:%1]If pretty permalinks are disabled, use:
https://example.com/wp-json/freeclid/v1/feed.csv
Future form integrations should call the same Freeclid_DB::insert() path from their form-submit hook.
Future ad destinations can reuse the existing stored rows:
- Meta:
fbclidrequires Conversions API, not a pulled CSV. - Microsoft Ads:
msclkidcan use a CSV feed similar to Google's format.
GPLv2 or later.