Troubleshooting
The usual reasons events do not arrive, and how to check each one
On this page
No events in Live events#
- Check the request. Open the browser’s developer tools, go to Network, and reload the page. Look for a
POSTtohttps://events.sfere.io/api/s/p(page) or/api/s/t(track).- No request at all: the SDK did not load. Check the console for errors and see the next sections.
- A request with an error in the response: read the body. The browser endpoint answers HTTP
200even on failure and puts the reason in the body.
- Check the key. The write key must belong to the source you are looking at in Live events, and must be the complete
keyId:secretvalue. - Check the host.
data-hostorhostmust be exactlyhttps://events.sfere.io, with no path. - Check your tag manager. If you installed through Google Tag Manager, confirm in Preview that the
Sfere SDKtag fired and that the container is published. - Select Refresh. Live events does not update on its own.
Content Security Policy errors#
The console shows Refused to load the script or Refused to connect. Add the Sfere hosts to your policy:
Content-Security-Policy: script-src 'self' cdn.sfere.io; connect-src 'self' https://events.sfere.io;
Requests blocked by an ad blocker#
Some browser extensions block analytics requests. Test in a private window with extensions turned off. Events from visitors who block requests are not received, which is why server-side events matter for purchases.
Events counted twice#
- The SDK is loaded twice: once in the page head and once in Google Tag Manager, or the React provider plus the script tag. Keep one.
- Both the JavaScript SDK and the Laravel
TrackPageViewsmiddleware send page views. Keep one. - The same purchase is sent from the browser and the server without a shared
sfere_dedup_id. Use the same value on both sides.
Server events all show the same IP#
Every server event reports your server’s IP when it is sent with a browser key or without the customer’s context. Use a server key and pass context.ip and context.userAgent from the customer’s request. The Node.js and Laravel SDKs do this for you.
No click IDs on events#
- The landing URL did not contain a click parameter such as
gclidorfbclid. - Ad pixels set their cookies after the first event, so the first event on a landing page can lack cookie-based IDs. Later events carry them.
- The visitor’s browser blocks cookies.
Storage blocked#
The SDK never fails when storage is blocked. It keeps IDs and the session in memory for the current page and keeps sending events. Errors in the console come from Content Security Policy or the network, not from storage.
Still stuck#
Contact us with the source name, the time of a test event in UTC, and a screenshot of the Network request.