{
  "slug": "bw-lead-ai",
  "name": "BW Lead Attribution Intelligence",
  "version": "1.3.0",
  "download_url": "https://plugins.bowden.works/wp-content/uploads/plugin-updates/bw-lead-ai-1.3.0.zip",
  "download_hash": "sha256:6bfc3d7269c9b8855d270d31c2cfdd5c3ad2fd301a3fb4209e0c3e87c430e0dd",
  "download_size": 249121,
  "requires": "6.0",
  "tested": "",
  "requires_php": "7.4",
  "last_updated": "2026-08-04",
  "homepage": "https://plugins.bowden.works/bw-lead-ai/",
  "author": "Bowden Works",
  "description": "Capture traffic source, attribute it to every lead, and understand where your leads are coming from.",
  "changelog": "## [1.3.0] - 2026-08-04\n\n### Added\n- **Google Analytics client ID capture** — a new Settings → Google Analytics section\n  with one checkbox, **off by default**. When enabled, the GA4 client ID (the\n  anonymous per-browser identifier Google stores in the `_ga` cookie) is exposed as\n  the merge tag `{bw:ga_client_id}`, appears as an \"Analytics\" group in the BW Lead\n  Data field dropdown, and is listed in the Test tab.\n\n  Sending the client ID with a lead lets that lead be joined back to its GA4 session\n  in reporting or BigQuery — useful when a visitor converts on a different domain and\n  Google's own cross-domain linker is misconfigured or has dropped the parameter.\n\n### Notes\n- **The value is never stored by this plugin.** It is read from the `_ga` cookie at\n  the moment a merge tag resolves, so it only ever flows where the site owner points\n  it — a form field, or a future handoff payload. Reading live also means a visitor\n  who cleared cookies yields the identifier that will actually match downstream, not\n  a stale one captured on their first visit.\n- **This is not a fallback for Google Analytics being blocked.** If GA is blocked the\n  `_ga` cookie does not exist either, and the tag resolves empty. Its value is the\n  case where GA *is* running but cross-domain linking has failed. The plugin's own\n  first-party attribution is unaffected by GA being blocked, and remains the answer\n  in that scenario.\n- Parsing handles the `GA1.<domainDepth>.<clientId>` format including domain-depth\n  variants, ignores the unrelated `_ga_<MEASUREMENT_ID>` GA4 session cookies, and\n  returns empty rather than erroring on a malformed value. Seven acceptance checks."
}
