Skip to content

Troubleshooting

Start with debug. Add it to init and reload the page:

qm("init", { key: "pk_live_…", debug: true });

The script then writes what it did, and what it ignored and why, to the browser console (console.debug, shown under “Verbose” in Chrome). Remove it when you are done.

  • Is the host allowed? The page’s host must be in Allowed domains in Analytics settings. www.example.com and example.com are different hosts; *.example.com covers subdomains.
  • Is tracking on? Tracking on in Analytics settings.
  • Is the request blocked? Open the browser’s Network tab and look for requests to ingest-prod.quomerce.com. Ad blockers and privacy extensions can block them. Test in a clean browser profile.
  • Is there a Content Security Policy? Add https://ingest-prod.quomerce.com to script-src and connect-src. See Content Security Policy.
  • Is the key right? It starts with pk_live_ and must match the website.
  • Is it a test browser? Playwright, Puppeteer, Selenium, Cypress and headless browsers are recognised as bots: by default their events are not stored at all, and they are never recorded. Test with an ordinary browser window.
  • Is Record replays on?
  • With consent Required, the visitor must allow both analytics and replay. See Consent.
  • Sessions under 3 seconds upload nothing.
  • You call qm.commerce but nothing arrives? You are in auto mode, which ignores these calls. Pass commerce: "manual" to init. See Commerce: auto or manual.
  • In manual mode, some calls are dropped? The arguments do not describe a product or cart. A product needs id, name, price and currency. Money is in major units. debug: true logs each dropped call.
  • In auto mode, a step is empty? Check Install & setup, which lists events per source. Payment redirects need a rule. Add rules for anything else in Analytics settings → Commerce events. See Auto mode.
  • Calls made before the script loads are lost? Use the call form qm("commerce.cartAdded", …), not qm.commerce.cartAdded(…). Only the call form is queued.

With consent Required, ids live in memory for one page load until qm("consent", { analytics: true }) is called. Make sure your banner calls it on every page load, not only when the visitor clicks.

Set cookieDomain: ".example.com" in init, and add every subdomain to Allowed domains.

A reload of the confirmation page sends purchase again. Guard the call per order id. See Manual mode.