{
  "slug": "bw-lead-ai",
  "name": "BW Lead Attribution Intelligence",
  "version": "1.8.6",
  "download_url": "https://plugins.bowden.works/wp-content/uploads/plugin-updates/bw-lead-ai-1.8.6.zip",
  "download_hash": "sha256:ca60652fa842770869d675b59b3c97bee0d68332f8aeb5be2e8213457d32d18d",
  "download_size": 521998,
  "requires": "6.0",
  "tested": "",
  "requires_php": "7.4",
  "last_updated": "2026-08-12",
  "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.8.6] - 2026-08-12\n\n### Fixed\n- **YouTube embeds report again — they had stopped on any page whose theme also\n  drives the player.** The IFrame API binds one player object per embed, and\n  building a second takes the events away from the first. Silently: no error,\n  no warning, the tracking simply goes quiet. Any theme, page builder or popup\n  that builds its own player wins that race, and a click-to-load video hero —\n  a poster and a play button, with the real embed built only when the visitor\n  presses it — is exactly that.\n\n  The plugin no longer builds a player at all. An embed reports its own state\n  to the page, and that is read passively, so it cannot disturb whoever else is\n  driving the video and it works whether that is a theme, another plugin, or\n  nobody. Milestones now come off the clock the player sends rather than from\n  polling, and **YouTube's API script is no longer loaded onto the page** — one\n  less third-party request, and one less thing to slow a page down.\n\n- **A video the visitor presses play on is counted again.** Two ways 1.8.5 got\n  this wrong, both in the same direction — a real view going uncounted:\n\n  The click that starts an embedded video happens *inside* the video, and never\n  reaches the page around it. Requiring a page interaction first therefore threw\n  away genuine plays. An embed is now judged on what can actually be known about\n  it: a video hosted elsewhere cannot start itself without saying so in its\n  address, and that is readable. A `<video>` on the page keeps the stricter test,\n  because there a script can start playback at any moment and the visitor's\n  interaction *is* visible.\n\n  And \"starts by itself\" was read from the address alone, which gets a\n  click-to-load video exactly backwards — it says \"start playing\" *because* the\n  visitor just asked it to. What separates the two is when the video appeared:\n  one is in the page as it loaded, the other did not exist until somebody\n  pressed something.\n\n- **A journey page credits the visit the enquiry was made on.** The reports were\n  corrected in 1.8.5 but the journey page itself was not, so it still said\n  \"came back and enquired through\" whatever the visitor's most recent visit\n  happened to be — naming a source they never enquired through, on the one\n  screen that shows the enquiry in detail. The headline channel, the two\n  \"how they found us\" cards, and the \"first visit to enquiry\" span all now read\n  from the visit they actually enquired on.\n\n  When there are visits after the enquiry the page says so, in place of leaving\n  a reader to wonder why the newest source in the timeline below is not the one\n  being credited above."
}
