A browser extension for CRO teams that validate A/B tests on client sites. It detects which A/B testing tool is running — Convert, VWO or Optimizely — and gives you a panel to inspect tests, force a variant and watch tracking events come in.
No configuration and no URL list: it works on any site running one of the three tools.
The extension is distributed as a zip and loaded with Chrome's Load unpacked, not through the Chrome Web Store. One-time setup, about three minutes.
Load unpacked requires Developer mode. Chrome keeps a reference to the folder path, so pick a permanent location before you install — moving or renaming the folder later breaks the extension.
-
Download and unzip
Grab
qa-widget-v1.4.13.zipfrom the download card and unzip it. You'll get a folder namedQA-widget-extensioncontainingmanifest.json. That name stays the same in every release — see updating for why that matters. -
Move it somewhere permanent
For example
~/Documents/QA-widget-extension/. Not your Downloads folder — that tends to get cleaned out, and Chrome needs the folder to stay put. -
Open the extensions page
Go to
chrome://extensions/in a new tab — oredge://extensions,brave://extensions,arc://extensionsin the other Chromium browsers. -
Turn on Developer mode
Use the toggle in the top-right corner of that page.
-
Click “Load unpacked”
The button appears on the left once Developer mode is on. In a Dutch Chrome it reads “Uitgepakt laden”.
-
Select the unzipped folder
Pick the folder that has
manifest.jsondirectly inside it — not its parent and not a subfolder. -
Allow it in incognito
On the extension's card, click Details and turn on Allow in Incognito. Chrome keeps extensions out of incognito windows unless you say otherwise, so without this step the widget simply won't appear there — and incognito is where you should be doing your QA.
-
Pin the icon
Click the puzzle-piece icon to the right of the address bar and pin Online Dialogue QA Widget. You'll need it to toggle the widget on and off.
Verify it works
Open any client site running Convert, VWO or Optimizely. A green round QA button should appear in the bottom-right corner within about two seconds.
Click the green QA button to open the panel. Drag the button or the panel header to move it — the position is remembered across pages and sessions, and the panel flips to below the button when there is more room there.
The panel works without a mouse. Tab to the tabs and move between them with the arrow keys, Enter or Space on an event row to expand it, and Escape to close the panel — focus returns to the QA button. Choosing a variant with the arrow keys keeps your place in the list.
Always QA in an incognito tab (⌘/Ctrl + Shift + N). That forces clean visitor cookies, so you see the same bucketing a real first-time visitor would get, and your QA traffic disappears when you close the window.
This only works if you turned on Allow in Incognito: that is step 7 of the installation.
Variants tab
Lists the tests targeting the current page, with their variants. On VWO that means running A/B tests only — Split URL and multivariate tests are not listed. The variant you're currently bucketed into is highlighted; click another one and it turns yellow as pending. Hit Apply & reload to force it, or Reset to drop all overrides and go back to natural bucketing.
Apply forces every test in the list, not only the one you changed — for the others it forces the variant you are already in. That is deliberate: it pins the whole page, so a reload cannot re-bucket you halfway through a check. Worth knowing on VWO, where each of those becomes a cookie that lasts 30 days. Use Reset when you are done rather than leaving them behind.
Reset goes further than the URL. Both Convert and Optimizely store a forced variant in their own visitor state, so removing the parameter alone would leave you stuck in that variant. Reset therefore also clears the tool's bucketing, which makes you a new visitor to it. You are re-bucketed at random, so on a 50/50 test you will land in the same variant about half the time — the panel says so after a reset, because otherwise that looks like a broken button. One limit on Convert: the widget can only clear that bucketing if it can still see its own force, and on Convert that force lives in the URL. Is the parameter gone — after an ordinary navigation, or because the site stripped it — then Reset only reloads. Force the variant again and Reset from there.
The QA cookie toggle in the header sets or removes the debug cookie (e.g. OD=test) that variant code checks for, and reloads the page for you.
On Convert, a yellow note occasionally appears above the list saying some targeting rules could not be evaluated. Usually that is the client site’s Content Security Policy blocking the widget from running a test’s targeting condition, but any error in that condition has the same result. The test is then listed anyway rather than hidden, so read the list as possibly showing more tests than are really active on that page.
Events tab
A live feed of the tracking events the A/B test code pushes. Filter by type using the chips (All, Init, Click, Viewport, Interaction, Other) or search by test ID, variant or text. Click any row to expand the raw payload, which is the fastest way to confirm an event fires with the values you expect.
It recognises the OD ab-test convention, GA4’s experiment_viewed and experiment_action, and the ab_tests shape — read from window.dataLayer, window._waq and window.inputDEQ.events. On Optimizely the events do not come from a dataLayer at all but from Optimizely’s own listener API. Other shapes are ignored, so an empty Events tab can also mean the client uses a different naming convention.
Clear empties the feed — and so do Apply & reload, Reset and switching the widget off. Each of those starts you with a clean list, which is usually what you want when you force a variant, but it does mean what came before is gone.
Turning the widget off
Click the pinned extension icon and flip Widget active. While it's off, the icon carries a red OFF badge so you never wonder why the button is missing.
Turning it off releases the force the widget itself had set — a URL parameter, a cookie or a stored override, depending on the tool — and reloads the page if there was actually something to release. It also stops capturing events and stops looking for tests, so nothing of the widget keeps running while it is off. Turning it back on starts that search again: the panel appears as soon as the testing tool has been found, which is usually within a moment.
It stops there on purpose. Convert and Optimizely also record a forced variant in their own visitor state, and the toggle applies to every tab you have open — clearing that everywhere would make you a new visitor in tests on pages where you never forced anything. So turning the widget off does not guarantee the page is back to normal. If a variant still sticks, use Reset on that page before switching off; Reset does clear the tool’s own bucketing. VWO is the exception to that model: there the force cookie is the cookie VWO keeps its bucketing in, so switching off does re-bucket you for the tests you had forced — without the note the panel shows after a Reset.
At a glance
- Auto-detect Finds Convert, VWO or Optimizely on its own — no configuration per client.
- Force a variant Select a variant and reload to see exactly what that audience sees.
- Live events Watch tracking events arrive, filter by type, inspect the raw payload.
- QA cookie toggle Set or clear the debug cookie without touching devtools.
- Draggable Panel and button move freely on desktop and mobile; position is remembered.
- Survives modals Stays interactive inside React Aria / Radix modals and native fullscreen.
Troubleshooting
The QA button doesn't appear
First check the extension icon for a red OFF badge — if it's there, the widget is disabled. Click the icon and turn Widget active back on.
If it's on, the page may not have a supported tool running. After about two seconds the panel header shows Searching… and the body reads “No A/B testing tool detected on this page”.
A header reading No active tests means something different: a tool was found, but the site carries more than one testing tool and none of them has a test running here — so the widget doesn't guess which one is in charge. On a site with only one tool it always names that tool, whether tests are running or not.
That state is not final, but it matters which one you have. While the header still reads Searching… the widget keeps looking indefinitely, so on a site where the A/B tool loads behind a consent banner, accept the banner and the variants appear — no refresh needed. Once it reads No active tests a tool was found, and there the widget slows down and stops looking after a minute; it picks up again when the URL changes or when you come back to the tab. So if a colleague starts a test while you sit on that page, switch tabs and back, or reload.
There are also places where it stays away on purpose: inside iframes, and on the testing tools' own dashboards such as app.convert.com, app.vwo.com and app.optimizely.com.
Chrome shows a "Disable developer mode extensions" banner
Expected with Load unpacked. Chrome can disable Developer mode extensions after a restart and warns you about it. Dismiss the banner; if the widget stopped working, open chrome://extensions/ and re-enable the extension. It stays enabled until the next time Chrome decides to ask.
I see two QA buttons on the page
You have the extension installed twice. This happens when an update is loaded with Load unpacked from a new folder instead of replacing the old folder's contents — Chrome derives an extension's identity from its folder path, so the two copies are separate extensions to it.
Open chrome://extensions/, remove the entry pointing at the folder you no longer want, and keep one. See updating for the flow that avoids this.
I updated but the version number didn't change
Chrome is still loading the old folder. Check the path on the extension's card in chrome://extensions/ and make sure that's the folder you replaced the contents of — if you unzipped somewhere else, the reload button just reloads the old files.
The panel is empty but I know tests are running
The Variants tab only lists experiments that target the current URL. Tests active in the project but scoped to other pages won't show up — the empty state tells you how many those are.
Also check that you cleared any earlier force overrides with Reset; a forced variant can make a test look stuck.
I dragged the panel off-screen
The button is clamped to the viewport, so it can never fully disappear, and resizing your window re-clamps it. The panel hangs to the left of the button, so parking the button against the left edge can still push the panel out of view — drag it back to the right. The new position is saved right away.
Chrome remembers the path of the folder you loaded, and derives the extension's identity from it. So an update means replacing the folder's contents in place — never loading a second copy from a new location.
Updating to a new version
-
Download and unzip the new version
You get a
QA-widget-extensionfolder again — same name, new contents. -
Replace your existing folder
Overwrite the folder at the path you installed from, e.g.
~/Documents/QA-widget-extension/. Don't move it and don't rename it. -
Click reload in Chrome
Open
chrome://extensions/— oredge://extensions,brave://extensions,arc://extensionsin the other Chromium browsers — and click the reload icon (↻) on the extension's card. The version number on the card should now match the one you downloaded — that's your confirmation it worked.
Don't use Load unpacked a second time for an update. Chrome would treat the new folder as a separate extension: you'd end up with two entries in chrome://extensions/ and two QA buttons on every page.
What changed
The aside lists the two most recent releases, and the full changelog covers all 31. Worth a look before you update: a release occasionally changes behaviour you rely on, not just fixes.
Found something the widget gets wrong, or something that would make it more useful? Fill this in and it lands straight in our list — nothing you have to send yourself.
In the panel header, next to the ?, there is a ⧉ button. One click copies a report to your clipboard: the widget version, the page URL, which tool was detected, the tests as the panel sees them, and the widget’s own recent log lines. Paste it into the field below. If your browser blocks the clipboard, the report is written to the browser console instead.
Fields marked with * are required. Without those three, a report usually needs a round of questions before anything can be looked at.
Thanks — your report has arrived
It is in our list now. If you left an email address, that is where we will reply.