← All docsOperations · Troubleshooting

Troubleshooting

Pixel not firing, missing conversions, OAuth errors, plugin conflicts. The most common things that go wrong, in the order they typically come up.

Reading time: ~6 minLast updated: 2026-05-02

Beaconry events are not arriving in any platform

Start here if nothing works.

  1. Open your site in a fresh browser, accept the consent banner.
  2. Open DevTools → Network tab. Reload the page.
  3. Look for a POST to /wp-json/beaconry/v1/event. Status 202 means "queued for dispatch".
  4. If you don't see the request: consent was rejected, or the consent banner is misconfigured. Check Beaconry → Tracking → Dashboard → "Consent state" pill.
  5. If you see HTTP 4xx: WordPress REST is broken (other plugin filtering /wp-json/). Disable other plugins one by one.
  6. If you see 202 but no platform conversion: open Beaconry → Logs. Each platform's response is logged with full request and response payload.

Meta — events arrive in CAPI but Match Quality is "Poor"

Beaconry sends the right hashed PII fields. Meta needs three trust signals to actually use them:

  • Domain Verification in Business Settings → Brand Safety → Domains.
  • Trusted domains list in Pixel → Settings → Traffic Permissions.
  • Aggregated Event Measurement with priority order set on each domain.

Without these, Meta still records the event but flags it as "Poor" match. Setting all three takes ~10 minutes inside Meta and is independent of Beaconry.

TikTok — "code: 40005, content_id required"

TikTok Events API rejects events without a content_id in the contents[] array. Beaconry sets one automatically for WooCommerce events (the product SKU). For custom JS events, include content_id in contents[], not at the top level (TikTok ignores top-level content_id).

Google Ads — "PERMISSION_DENIED"

The Google account that ran the OAuth handshake doesn't have edit permission on the Customer ID. Two fixes:

  • Open Google Ads → Tools → Access and security. Verify the connecting account has at least "Standard" role on this Customer ID.
  • If you used a manager (MCC) account: connect with the manager account, then specify the sub-account Customer ID in Beaconry. The OAuth scope must cover the manager.

After fixing, click Connect with Google again to re-authenticate.

Google Ads — Conversion uploaded but not visible in Campaign Manager

Google Ads conversion data has up to 3 hours of latency. There is no real-time test view for the API. Wait, then check Campaign Manager → Tools → Conversions → Status column.

If after 6 hours nothing shows up: open Beaconry → Logs, find the upload, check the response. partialFailureError with details means Google rejected the row. Most common reason: Conversion Action is paused (re-enable in Campaign Manager).

LinkedIn — "403 Forbidden"

The LinkedIn account that ran OAuth lacks permission on the Ad Account. Account-Manager, Campaign-Manager or Account-Billing-Admin role required. Viewer-only is rejected by the API.

Re-authenticate with an account that has at least Campaign-Manager role.

LinkedIn — token expired warning

LinkedIn access-tokens expire after 60 days. Beaconry's Logs tab gets a daily heartbeat plus a warning when 7 days are left. Click Connect with LinkedIn to renew. Conversion-Rule-IDs and Ad-Account-ID stay configured — only the OAuth handshake repeats.

GA4 — Events in Realtime but missing in standard reports

GA4 standard reports have a 24 to 48 hour processing delay. Realtime is the source of truth for "did the event arrive". If Realtime shows the event, it will show up in standard reports tomorrow.

Plugin conflicts

  • Caching plugins (W3 Total Cache, WP Rocket): make sure /wp-json/ is excluded from page caching. Most WP-aware caches do this by default. If yours doesn't, the consent banner state and event dispatch can both break.
  • Other tracking plugins (PixelYourSite, Tracking Plus, Sky GA4): do not run two tracking plugins for the same destination. They will double-fire events. Either disable Beaconry's channel for that platform, or disable the other plugin entirely.
  • Cookie consent plugins (CookieYes, Complianz): Beaconry includes its own consent banner (nl-data-gate). If you already have a CMP, set Beaconry's banner to "Hidden" in Beaconry → Banner and integrate via the API. The CMP should set nl_pref = "{analytics: true}" when the user accepts the analytics category.

WooCommerce events not firing

  1. Beaconry hooks into woocommerce_thankyou (Purchase), woocommerce_add_to_cart and woocommerce_before_checkout_form. Verify in Beaconry → Logs that those hooks fire.
  2. If a hook is missing from logs: a theme or plugin is intercepting the WooCommerce flow. Check woocommerce status → Tools → Logs for errors during checkout.
  3. Custom thank-you pages: Beaconry's purchase event fires on the standard WooCommerce thankyou template. If you redirect to a custom page after order, you need to fire nlc.track('purchase', ...) manually on that page.

"My adblocker still blocks Beaconry"

Beaconry's /wp-json/beaconry/v1/event path is structurally adblocker-immune. If you see it being blocked:

  • Verify the URL in DevTools — is it actually /wp-json/beaconry/v1/event on your domain, or does it point to a different domain? If different, hybrid mode is on for some channel and that channel's pixel is loading from a third-party domain (which IS blockable).
  • If hybrid mode is the cause, disable hybrid mode for that channel. Server-side dispatch resumes covering 100% of consenting visitors.

When in doubt, check the Logs

Beaconry → Logs keeps the last 200 events with full request and response payloads. Filter by channel, event-type or status. Most issues are diagnosable from the platform's response in the log entry.

For deeper debugging, set BCNR_DEBUG = true in wp-config.php. The Logs tab then includes WordPress's HTTP transport-layer messages too.

Still stuck?

Email info@beaconry.app with the affected channel name, the relevant Logs entry, and a screenshot of the platform's response. We usually reply within a working day.