Documentation Index
Fetch the complete documentation index at: https://docs.scanova.io/llms.txt
Use this file to discover all available pages before exploring further.
Verification checklist
Use this checklist after installing the snippet to confirm everything is working:1. Check for the network request
- Open your website in Chrome or Firefox
- Open DevTools (F12 or right-click → Inspect)
- Go to the Network tab
- Filter by
/ct - Hard-reload the page (Ctrl+Shift+R / Cmd+Shift+R)
POST request to https://t.scanova.io/ct with status 200.
2. Inspect the request payload
Click the/ct request → Payload tab. Confirm:
site_idmatches your tracking site ID from the dashboardevent_typeispageview(ifautoPageview: true)scan_session_idis present (if you visited with a?scnv=URL parameter)
3. Test QR attribution
Visit your page with a?scnv= parameter (simulate a scan):
scan_session_id should match the value you used.
4. Enable debug mode temporarily
Adddebug: true to your init call and reload. The SDK prints all activity to the browser console:
debug: true before deploying to production.
Common errors and fixes
No /ct request appears
| Cause | Fix |
|---|---|
Snippet not in <head> | Paste snippet before </head>, not in <body> |
| Script blocked by CSP | Add https://cdn.scanova.io and https://t.scanova.io to your Content-Security-Policy |
| Ad blocker or browser extension blocking the request | Test in a private/incognito window with extensions disabled |
autoPageview: false and no manual track call | Either enable autoPageview or add a manual event |
Called init but SDK hasn’t loaded yet | The SDK queues calls made before it loads — this should resolve automatically |
400 — Bad request
The site_id is invalid, empty, or belongs to an inactive site. Double-check that:
- You are using the
site_idfrom the correct tracking site in the dashboard - The site is active (check the status in the dashboard)
403 — Domain not allowed
Your website’s domain is not in the Allowed Domains list for this tracking site.
- Go to Integrations → Conversion Tracking
- Select your site → click Edit
- Add the exact hostname (e.g.
yoursite.com,www.yoursite.com,staging.yoursite.com) - Save
The domain check uses the
Origin or Referer header of the request. Make sure you add exactly the hostname shown in the browser address bar — including or excluding www matters.422 — Validation error
The event payload failed validation. Common causes:
event_typeis missing or empty- A field exceeds the allowed length
metadatacontains a raw email address — useuser_identifierswith a hashed value insteadmetadataexceeds 10 KB
429 — Rate limit exceeded
Your site is sending events faster than the allowed rate (100 events/min per IP for browser events). This is rare during normal usage. If you see this in testing, space out your test events.
Events appear in network but not in dashboard
- Wait up to 60 seconds — there is a short processing delay
- Confirm you are looking at the correct tracking site in the dashboard
- Verify the
site_idin the event payload matches the dashboard site
No /ct request appears for a specific visit
If a visit produces no network request, the user most likely arrived without a QR Code scan — the ?scnv= parameter is absent. The SDK skips sending any event when there is no scan_session_id. This is expected behaviour: the SDK only tracks QR-scan-originated traffic.
Two events firing per page load
You have bothautoPageview: true and a manual scanova('track', 'page_view', ...) call in your code. Remove one. See Auto-Tracked Events for details.