Testing & troubleshooting

Test your destinations

On Websites → your site, under the destinations, Test all destinations sends one synthetic test purchase to every configured destination and shows what each platform answered: a verdict per platform, side by side. Save your changes first; you can run it again after a few seconds.

VerdictMeaning
✅the platform accepted the event (for GA4: the payload is valid, see below)
⏭️skipped, with the reason; often expected (no click ID on a PageView, no consent)
❌rejected: the platform's own error message is shown

The test never shows up in your SetRoasFlow numbers: not on the Delivery page, not in your usage, not in your customer profiles. What happens on the platform's side depends on the platform, and not every platform has a test mode:

DestinationWhat the test does there
Google Adsvalidate-only: checked, never recorded
Redditsent in test mode: not counted
GA4sent to Google's validation endpoint: checks the event's structure, not your Measurement ID or API secret
Meta, TikTok, Snapchat, Pinterestwith a Test event code saved on the destination, it lands in the platform's test events view. Without one, it is a real event and counts in your reporting.
Klaviyono test mode: creates a test profile and event
HubSpotno test mode: creates or updates a real contact
Mixpanelno test mode: the event is recorded

LinkedIn, X, Mailchimp and ActiveCampaign receive audiences, not events, so they are not part of this test.

Before testing Meta, TikTok, Snapchat or Pinterest, add a Test event code (you find it in the platform's test events tool), then remove it when you are done: while it is set, your real events go to the test view too. After testing Klaviyo or HubSpot, you can delete the contact [email protected].

A ✅ on GA4 means the event is well formed, not that it reached your property. To confirm GA4 end to end, open your site and check the visit in GA4's Realtime report.

Testing on a real page

Add ?srf_test=1 to any URL on your site to switch the snippet to test mode on that page. Events go through the same per-platform behaviour as the table above, and stay out of your Delivery page, usage and profiles. The dashboard doesn't show test-mode events yet: check them in each platform's test events view.

To see an event on the Delivery page, send a real one. Trigger a genuine, non-test event from your site: a normal page view or purchase. Test events never appear there, so an empty Delivery page right after testing is expected, not a fault.

Reading the Delivery page

One row per event. Each row stacks the per-platform outcome for every destination together, so a single purchase sent to four platforms is one row showing four results, each either delivered, or failed with the exact error the platform returned.

When a delivery fails, the row shows an Explain button. It takes the platform's raw error (often a bare code or a cryptic string) and turns it into plain language: what actually went wrong, and what to change to fix it. See AI helpers.

Last 24 hours shows the delivery rate per destination. A destination sitting below 100% is worth opening.

Match quality (0–10) measures how well your events can be matched to real people. Email is the strongest signal by far, then phone, then a stable customer ID. A score of 2–3 means you're sending conversions the platform mostly can't attribute; the fix is to pass user_data (see Install the tracking), not to send more events.

Common problems

Nothing on the Delivery page

  1. Is the snippet live? Open your site (or the demo store) and check a PageView appears in Overview within a few seconds. The Installation page has the snippet and a copy button.
  2. Is at least one destination connected and active?
  3. Are you looking at test events? Events sent with ?srf_test=1 or Test all destinations never appear on the Delivery page.
  4. Has the site reached its monthly event limit? Check Plan & usage: past the limit, events are still counted but no longer forwarded.
  5. Smart tracking toggles (on your site's page, under Websites): is the event family switched off for this site?

Events arrive, the platform shows nothing

Almost always a Test event code left in place (Meta, TikTok, Snapchat, Pinterest). With one set, events go to the platform's test view and never reach reporting. Clear it on the destination.

Purchases counted twice

The event is fired both automatically and manually, without an order_id. Add order_id to your manual call. It's the deduplication key.

A platform returns 401 or 403

Token expired, revoked, or missing a scope. Regenerate it on the platform and re-save. Meta tokens generated for the Conversions API don't always carry ads_management, which audiences need.

A destination is Active but audiences say "Missing …"

Expected. Events and audiences use different APIs at the same provider, and audiences need one extra field. The message names it. See Segments & audience activation.

Fewer conversions than my platform's own pixel

Compare like with like: events from visitors who haven't given consent are not sent at all, while the platform's own pixel may still count some of them.

If you also run the platform's own pixel on the site, the two only count once when both send the same event_id. SetRoasFlow doesn't link them for you: pass your own event_id to both calls, or read the one SetRoasFlow used from window._srf_last_event_ids (for example window._srf_last_event_ids.Purchase).

Let us watch it for you

You should not have to remember to check. Alerts compares each hour with the same hour on the previous days, and tells you when something is genuinely off: events collapsing, or a platform suddenly rejecting deliveries. A quiet night doesn't trigger anything, because a quiet night is normal for your store.

Add a Slack webhook under Alerts and it reaches you where you actually look.

Getting help

Include your Project ID, the platform, and roughly when it happened: with those we can find the exact delivery. [email protected]