Changelog

Every feature, grouped by what it does.

Beaconry went from first commit to ten server-side channels, three commerce funnels and seven form plugins in a focused build. Below is the whole thing by area, so you can see exactly what you get today. Versions are real release tags. Next stop: v1.0.

Ten server-side channels

Livev0.2 to v0.20

GA4, Meta and the first conversions

Server-side dispatch to GA4 Measurement Protocol and Meta Conversions API with full PII hashing (em, ph, fn, ln, zp, ct, st, country, external_id). The same-origin pipeline that adblockers cannot touch.

TikTok and LinkedIn

TikTok Events API 2.0 with ttclid attribution, LinkedIn Conversions API with five conversion-rule slots and 60-day token renewal handled for you.

Google Ads and Microsoft Ads, broker-mediated

Google Ads CAPI and Microsoft Advertising OfflineConversions through Beaconry's OAuth broker, so your wp-config never holds a developer token. DMA-consent block on every Google upload, eight conversion-goal slots on Microsoft.

Pinterest, Snapchat, Reddit, X Ads

Four more server-side channels with vendor-specific dedup keys (epik, sc_click_id, rdt_cid, twclid), per-type metadata whitelists and admin test-event buttons. Channel count reaches ten.

Hybrid Mode

Livenine of ten channels

Browser pixel back in, deduplicated by event_id

Opt-in per channel for Meta, TikTok, LinkedIn, Microsoft, Pinterest, Snapchat, Reddit and X Ads. A same-origin browser pixel shares the server's stable event_id so the platform counts one conversion, not two, and picks the richer signal.

Mirror for WooCommerce purchase and form leads

Server-side dispatch is mirrored to every loaded browser pixel with a shared event_id. Purchases reuse the stable per-order id, form submissions inject a matching hidden field at submit-time.

Commerce funnels

Live3 platforms

WooCommerce, the full ten-event funnel

view_item, view_item_list, view_cart, add_to_cart, remove_from_cart, search, begin_checkout, add_payment_info, purchase and refund. Classic and block checkout. Every event carries GA4 items[] plus the Meta content_* catalog block for Dynamic Product Ads.

Easy Digital Downloads and SureCart

Both ship the standard funnel (view, cart, begin_checkout, purchase, refund) with line items and customer PII hashing into every channel's user_data. Purchase events use a stable per-order event_id so a thank-you-page refresh never double-counts.

Refund handling done right

A refund fires only where it has real meaning: GA4, which nets it against the purchase and corrects revenue. Ad channels have no native refund event, so Beaconry skips them rather than send a meaningless custom event. One consistent rule, documented against each vendor.

Forms and drop-off analytics

Live7 plugins

Seven form plugins, native

Fluent Forms, Kadence (Blocks and Advanced), Contact Form 7, WPForms, Gravity Forms, Elementor Pro Forms and Ninja Forms. Submissions auto-fire generate_lead with hashed PII. Per-form field mapping with a manual skip-marker for fields you want kept out of matching.

Form-funnel drop-off analytics

See exactly where visitors abandon a form. Beaconry tracks form_start, form_abandon (with the last-touched field name, never a value) and the lead submit, then shows per-form starts, leads, abandons, conversion rate and the top drop-off fields. PII-free by construction.

Live dashboard and observability

Livev0.15

Live conversions, health score, anomaly alerts

A ringbuffer of the last 50 events (channel, source, value, time), a 0-10 health score per channel and a daily cron that mails you on a 50 percent drop or a 4x spike. All from two autoload-off options, no extra database table.

Token health checks and an end-to-end test

A daily probe verifies every configured channel's credentials and mails you before a stale token silently drops conversions. One button fires a synthetic purchase through every channel and reports the status of each.

Privacy, consent and security

Livefrom v0.1

Consent gate and propagation

The bundled nl-data-gate banner blocks every event until the visitor accepts, then propagates the choice into GA Consent Mode v2, Meta and common consent surfaces. Fully accessible, WPML and Polylang ready for banner text and the per-language privacy URL.

GDPR tooling and encrypted credentials

A right-to-be-forgotten tool generates the per-vendor SHA-256 hashes for deletion requests, a privacy-policy snippet generator covers all ten channels, and every stored credential is AES-256-GCM authenticated-encrypted at rest using your WordPress salts.

Performance and reliability

Livev0.15 to v0.24

Cache-plugin compatibility

Beaconry keeps its tracking script out of the JavaScript optimizations that would otherwise stop tracking on page load, automatically, for LiteSpeed, WP Rocket, SiteGround Speed Optimizer and Cloudflare Rocket Loader. Every exclusion verified against the vendor's own docs.

Nonce-refresh for long-open tabs

The security nonce refreshes client-side, so a tab left open for hours or a page served from full-page cache keeps tracking correctly instead of silently dropping events.

Multi-currency and click-tracking

ECB daily rates normalise every transaction into one reporting currency before fan-out, with a durable fallback so dispatch never crashes. Five CSS-class click slots turn any tagged button into a server-side conversion without writing JavaScript.

Foundation

Livev0.1 to v0.4

Same-origin REST, rate-limited and bot-filtered

One endpoint at /wp-json/beaconry/v1/event on your own domain, with a per-IP rate limit and a bot filter. Auto-detected attribution captures session-id, device-id, first-touch UTM and every channel's click-id.

Full localisation and a self-hosted updater

English, German (du and Sie) and Spanish out of the box. A self-hosted updater polls a manifest every twelve hours, so updates land in the standard WordPress Plugins screen with no GitHub login or marketplace.

This is what shipped. v1.0 is the polish.

Ten channels, three commerce funnels, seven form plugins, hybrid mode and a live dashboard, all server-side, all today.