Skip to main content
Start with the verification checklist. If you need lifecycle details, turn on debug: true temporarily.
Confirm that init() ran in client-mounted browser code. Compare the full scriptUrl with Bily > Settings > Apps > More settings > Install tracking.Check the browser Network panel for a blocked or failed script request. Then review your content security policy, privacy tools, browser extensions, and network restrictions.The default timeout is 15 seconds. You can set loadTimeoutMs from 1,000 to 60,000 milliseconds. A longer timeout will not fix a blocked request.
Pass the exact URL to init({ scriptUrl }). Do not extract its origin, append /b.js, decode it, or rebuild it with a URL helper.
If your Bily URL contains a query string, move away from the compatibility domain form.
Remove any track("PageView") call from the initial mount. The browser script records the first event automatically.Confirm that the exact tracking script appears only once in the document. Let init() create it unless your framework guide reserves one element for the SDK to reuse.
The automatic page view covers only the initial document. Connect track("PageView", ...) to the router’s committed-navigation callback.Send the current window.location.href and final document.title. Skip the initial callback. Ignore repeated notifications for the same URL.
The SDK ignores a different URL after Bily starts loading or becomes ready. Give the page one configuration owner and one exact tracking URL.If environments use different URLs, select the environment value before the first init() call. Never initialize a placeholder and replace it later.
Make sure the application eventually calls init(). track() can queue before initialization, but delivery cannot begin until Bily loads.Check maxQueueSize. When the bounded queue is full, the SDK discards the oldest call. Avoid high-volume render or input events during startup.
Expect null during server rendering. Call the method in browser code and handle its nullable type.If browser storage is blocked, the SDK can keep an in-memory identifier stable for the current page session.
This behavior is expected. Public SDK calls remain safe without browser globals.Server resolution does not mean a browser script loaded. Initialize Bily from client-mounted code.
Provide order.total when it is authoritative. Otherwise, the SDK calculates the value from each price and quantity in order.products.Put products inside order.products for order events. Top-level products do not replace products missing from order.
Confirm that the name contains a non-whitespace character and remains consistent across calls. Verify that the successful path reached track().Calls do not throw when browser delivery fails. Turn on debug: true temporarily, then use ready() to diagnose loading separately.

Send support the right details

Share the tracking URL exactly as Bily provides it. It is public installation data. Include the SDK version, failing event name, browser error, and steps to reproduce. Keep private credentials out of every other attachment. Contact Bily support without attaching customer payloads or secrets.

Validation and debugging

Isolate loader, event, payload, API, and MCP boundaries.

Customer FAQ

Review direct answers to common implementation questions.