Signals is ABTestly’s AI CRO audit. Scan a page of your own site, get ranked test ideas backed by evidence, triage them on an idea board, and turn the good ones into real experiments. Currently in Beta.
Beta. Signals is in Beta. It works today and the ideas are real,
but the interface and wording on these pages can still change as we
refine it. If something reads differently in your dashboard, trust the
dashboard and email support@abtestly.com so we can fix the page.
Signals is ABTestly’s AI CRO audit. You scan a page of your own site,
and the AI hands back a ranked list of test ideas, each one a
hypothesis with the evidence behind it. You organize those ideas on an
idea board, keep the ones worth running, and turn them into real
ABTestly experiments with one button.It answers the question every optimization program starts with: what
should I test next, and why.
A browser extension captures the page from your own live site:
desktop, mobile, and mobile again on a throttled connection. Walk
several steps of a funnel in one pass.
Connect Google Analytics
One click, read only. Lets a scan read your funnel data and credit
it on the ideas it speaks to.
Read a scan
The idea board. Ranked by a PXL score, grouped into campaigns,
triaged New, Approve, or Dismiss.
Build a test from an idea
Build this creates a real experiment draft, prefilled from the
hypothesis. Its result feeds back into the next scan.
This is the part that matters most, so read it before you read a scan.Every scan reads the page structure. That is the DOM: the
headings, buttons, forms, copy, and layout the browser actually
rendered. Structure is the first signal, and it is always present. It
is enough to spot a buried call to action, a form asking for too much,
a value proposition that never appears above the fold.Connecting Google Analytics 4
lets a scan read a second, independent signal and credit it on the
ideas it speaks to: behavior. What visitors actually do. Where they
fall out of a funnel, how conversion differs by device, where revenue
comes from by channel. Structure tells you what the page
is. Behavior tells you what is happening on it.Customer qualitative voice is the other route to a second signal.
What your customers said in their own words, supplied by you in Brand
context: reviews, support themes, survey verbatims. An idea it is
credited on can reach Test ready with no GA4 at all. The first party
heatmap is a fourth source, but it corroborates funnel data rather than
standing in for it, so it counts only alongside a credited GA4 answer.
The evidence contract sets all four out.An idea is marked Test ready only when a second independent signal
confirms what the structure suggests and its score clears the
threshold for its evidence tier. Until then it reads Needs
evidence, Below threshold or Unverified, as the badge
table sets out: an honest finding for you to
check, not a promise that it will win. Signals never invents a
statistic when the data to support it is not there. When the number
exists, you see it. When it does not, the idea says so plainly.
A Test ready badge means two signals agree and the score cleared its
gate, not that the test will win. Nothing predicts a winner except
running the experiment. Signals finds the strong candidates. The
results page settles them.
Most audit tools stop at the report. They never see whether their idea
worked, so they cannot get smarter about your site. ABTestly owns both
ends, the idea and the experiment, so it can close that loop.
Evidence in · three parallel streamsReasoning · narrowed to a ranked backlog
into 01 · Intakefrom 07 · OutputOutcomes feed back as priors for the next scan
A few minutes · end to endIt produces the backlog · it never runs your test
When an experiment you built from an idea runs to a conclusion, its
outcome, won, lost, or inconclusive, feeds back into future scans of
the same site as ground truth. The next scan already knows what worked
on your pages and what did not, so its ideas get sharper over time. A
standalone tool cannot do this, because it never learns the result.
See Build a test from an idea for how the
handoff works.
Inside a single scan, the audit works through seven stages, from the URL you
hand over to the ranked backlog it hands back. Here is what happens at each one.
You start by giving ABTestly the URL you want audited, plus any context you
have: your niche, average order value, the goal that matters, your device
split. How you connect your data decides how far the scan can go. Connect GA4
and a scan can read real behaviour. With neither GA4 nor customer voice in
Brand context, every idea stays in the Structural tier, working from the page
structure alone. What reaches a scan sets what
it can score, not what any one idea earns: a connected source that returns
nothing reaches the scan with nothing to score, and each idea’s own evidence
tier is settled later, from the evidence that actually bears on it. Intake also
confirms the page is on your own site before it runs.
A browser extension captures the page the way a real visitor sees it, from your
own logged in session, so the scan reads the rendered page and not a bare URL.
It picks up more than twenty structural signals, from page type and heading
order to form fields, calls to action, review counts and trust badges. Three
screenshots follow, on desktop, on mobile, and on a throttled connection, each
reconciled against what it read. It only ever reads: it never submits payment
and never tries to get around a site’s bot protection.
Where GA4 funnel data reaches the scan, it can read where real visitors actually
drop off. That is the behavioural half of the two signal rule: funnel drop off, conversion by
device, revenue by channel, plus new against returning visitors and your busiest
pages. It matters because a finding is only promoted once a second independent
signal agrees with what the page showed, the two signal rule. GA4 funnel data is
one such signal; the customer voice you supply in Brand context is the other.
Everything gathered so far is assembled into a single prompt the model can
reason over, so it works from real evidence rather than a bare URL. That prompt
carries the three screenshots next to a block of structured text: your business
context, the page signals, the live picture from GA4, and any earlier test
results from this same site. It is framed as evidence to weigh, not a list of
claims to accept.
Now the model proposes ideas that speak to the problem you named, each grounded
in a behavioural mechanism and evaluated against the evidence, not guessed.
Every idea arrives as a structured hypothesis with 18 fields behind it, among
them the effort, a research citation, a tracking spec, and its answers to the
eight evidence questions ABTestly scores. The model answers those questions; it
never sets the score, the tier or the rank. Each idea sits under one of five CRO
pillars and is read through a named model such as Fogg or Cialdini. When the
evidence is thin the idea is flagged rather than dropped, with the single
cheapest check that would confirm it, the two signal gate.
Before an idea reaches you, it goes through a pass that argues against it. This
adversarial step names the most likely way the idea could fail, the confounder
most likely to mislead you, another explanation for the same evidence, and the
one test that would tell them apart. You get that counter argument attached to
the recommendation. The pass never blocks a scan: when it cannot complete, the
ideas still reach you, without that counter argument attached.
What comes back is a ranked backlog. ABTestly scores every idea from the
model’s answers and orders the list by that PXL score, so the best return for
the effort sits at the top, and each score is read against the maximum that
scan could reach rather than a fixed scale. Each item carries its evidence
tier, a rough size for the opportunity, the effort, a suggested run time, and
the tracking you would need to set up. There are four evidence tiers, from
verified down to purely structural, and the tier belongs to the idea rather
than to the scan, so two ideas from one scan can carry different tiers and you
can see how much weight each recommendation should carry. Signals writes the
backlog and the plan; it never starts the test for you, so what ships stays
your call.
Install the extension and capture a page in a couple of minutes.
Connect Google Analytics
One click, read only. Lets a scan read your funnel data and credit
it on the ideas it speaks to.
Last modified on September 4, 2026
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"ABTestly","description":"ABTestly documentation: code-first A/B testing for CRO developers, agencies, and technical growth teams. Covers experiment setup, targeting, analytics integrations, and the developer API.","colors":{"primary":"#2563EB","light":"#60A5FA","dark":"#1D4FD8"},"logo":{"light":"https://mintcdn.com/abtestly/00G4YX1JcYDGimmE/logo/light.svg?fit=max\u0026auto=format\u0026n=00G4YX1JcYDGimmE\u0026q=85\u0026s=8e30c68a69d5838fd283382cc9a3041c","dark":"https://mintcdn.com/abtestly/00G4YX1JcYDGimmE/logo/dark.svg?fit=max\u0026auto=format\u0026n=00G4YX1JcYDGimmE\u0026q=85\u0026s=26be4c014a0ada510816b8a49547f52a"},"favicon":"https://mintcdn.com/abtestly/EO3uzUwEIRnQ3Ov9/favicon.svg?fit=max\u0026auto=format\u0026n=EO3uzUwEIRnQ3Ov9\u0026q=85\u0026s=c40e32c2a3477e6ce9dfe2fec2977576","background":{"color":{"light":"#f2ede1","dark":"#262935"}},"navbar":{"links":[{"href":"https://abtestly.com/pricing","label":"Pricing"},{"href":"mailto:support@abtestly.com","label":"Support"}],"primary":{"type":"button","label":"Open dashboard","href":"https://app.abtestly.com"}},"footer":{"socials":{"github":"https://github.com/abtestly"}},"seo":{"metatags":{"og:site_name":"ABTestly Documentation","og:type":"website","og:logo":"https://abtestly.com/assets/favicon.svg","og:image":"https://docs.abtestly.com/images/og-image.png","og:image:width":"1200","og:image:height":"630","og:image:alt":"ABTestly Documentation. Code-first A/B testing, documented.","twitter:card":"summary_large_image","twitter:image":"https://docs.abtestly.com/images/og-image.png","twitter:image:alt":"ABTestly Documentation. Code-first A/B testing, documented.","og:description":"ABTestly documentation: code-first A/B testing for CRO developers, agencies, and technical growth teams. Covers experiment setup, targeting, analytics integrations, and the developer API.","twitter:site":"@abtestly"},"indexing":"all"},"metadata":{"timestamp":true},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"abtestly","hasAudioNarration":false,"actualSubdomain":"abtestly","customDomains":["docs.abtestly.com"],"gitSource":{"type":"github","owner":"maaislam","repo":"abtestly-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ab639727e9a03c18a5151a1","clientVersion":"0.0.4117","searchFilterCounts":[{"language":"default","tag":"Read results","count":13},{"language":"default","tag":"Build a test","count":10},{"language":"default","tag":"Developer reference","count":8},{"language":"default","tag":"Methodology","count":7},{"language":"default","tag":"Site settings","count":7},{"language":"default","tag":"Signals","count":6},{"language":"default","tag":"Target the right visitors","count":6},{"language":"default","tag":"Getting started","count":5},{"language":"default","tag":"Integrations","count":5},{"language":"default","tag":"Measure","count":5}],"searchSettings":{"maxResults":10}},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"signals-pipeline.css","content":".abt-signals-pipeline{--canvas: #f7f3ee;--paper: #fefdfb;--paper-2: #faf8f4;--well: #f3eee8;--line: #e9e2db;--line-2: #f3eee8;--line-strong: #d8d0c5;--ink: #0d253d;--ink-2: #273951;--ink-3: #5e6d85;--ink-4: #8a93a3;--ink-5: #c9c1b4;--brand: #5e6ad2;--brand-600: #4d59c4;--brand-700: #4434d4;--brand-soft: #eceefb;--brand-soft-2: #f4f6fc;--brand-ring: rgba(94, 106, 210, 0.35);--neg: #c2410c;--neg-soft: #f6e4d9;--warn: #9b6829;--warn-ink: #7a4d18;--warn-soft: #f5e9d4;--shadow-xs: 0 1px 2px rgba(13, 37, 61, 0.04);--shadow-md: 0 4px 12px rgba(13, 37, 61, 0.06);--r-xs: 5px;--r-sm: 7px;--r-md: 9px;--r-lg: 11px;--r-xl: 14px;--r-2xl: 18px;--r-pill: 999px;--t-base: 160ms;--ease: cubic-bezier(0.2, 0.7, 0.2, 1);--ease-spring: cubic-bezier(0.34, 1.32, 0.46, 1);--font-sans: system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', sans-serif;--font-mono: ui-monospace, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace;color-scheme:light;width:100%;margin:1.6rem 0}html.dark .abt-signals-pipeline{--canvas: #09101b;--paper: #191d24;--paper-2: #1e232b;--well: #15181f;--line: #272c34;--line-2: #1b1f26;--line-strong: #353c47;--ink: #e8eaee;--ink-2: #c2c7ce;--ink-3: #9298a2;--ink-4: #767d88;--ink-5: #3a4048;--brand: #7480e8;--brand-600: #8b95ef;--brand-700: #b6bdf8;--brand-soft: rgba(116, 128, 232, 0.16);--brand-soft-2: rgba(116, 128, 232, 0.08);--brand-ring: rgba(116, 128, 232, 0.45);--neg: #e79457;--neg-soft: rgba(231, 148, 87, 0.18);--warn: #d9a44c;--warn-ink: #ecc480;--warn-soft: rgba(217, 164, 76, 0.18);--shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.4);--shadow-md: 0 4px 12px rgba(0, 0, 0, 0.5);color-scheme:dark}.abt-signals-pipeline *,.abt-signals-pipeline *::before,.abt-signals-pipeline *::after{box-sizing:border-box}.abt-signals-pipeline .audit{container-type:inline-size;border:1px solid var(--line);border-radius:var(--r-2xl);background:radial-gradient(130% 90% at 0% 0%, var(--brand-soft-2) 0%, transparent 44%),\n var(--paper);box-shadow:var(--shadow-md);padding:30px 30px 32px;overflow:hidden;font-family:var(--font-sans);color:var(--ink);-webkit-font-smoothing:antialiased}.abt-signals-pipeline .pipe-cap{display:flex;justify-content:space-between;gap:16px;margin-bottom:20px;flex-wrap:wrap}.abt-signals-pipeline .pipe-cap span{font-family:var(--font-mono);font-size:11px;letter-spacing:0.05em;text-transform:uppercase;color:var(--brand-700);display:inline-flex;align-items:center;gap:7px;text-wrap:pretty}.abt-signals-pipeline .pipe-cap .r{color:var(--ink-4)}.abt-signals-pipeline .pipe-cap .r::before{content:'';width:5px;height:5px;border-radius:50%;background:var(--ink-5)}.abt-signals-pipeline .pipe-diagram{display:flex;align-items:stretch}.abt-signals-pipeline .pipe-inputs{flex:0 0 232px;display:flex;flex-direction:column;gap:10px}.abt-signals-pipeline .pipe-inputs .pnode{flex:1;flex-direction:row;align-items:flex-start;gap:11px;padding:13px}.abt-signals-pipeline .pipe-inputs .pn-ic{margin-top:1px}.abt-signals-pipeline .pipe-inputs .pn-col{display:flex;flex-direction:column;gap:7px;min-width:0}.abt-signals-pipeline .pipe-inputs .pn-n{margin-top:2px}.abt-signals-pipeline .pipe-merge{flex:0 0 50px;align-self:stretch;color:var(--line-strong)}.abt-signals-pipeline .pipe-merge svg{width:100%;height:100%;display:block}.abt-signals-pipeline .pipe-merge .pm-v{display:none}.abt-signals-pipeline .pipe-merge path{fill:none;stroke:currentColor;stroke-width:1.5}.abt-signals-pipeline .pchain{flex:1 1 0;min-width:0;display:flex;align-items:center}.abt-signals-pipeline .pipe-arrow{display:flex;align-items:center;justify-content:center;color:var(--ink-5);padding:0 7px;flex:0 0 auto}.abt-signals-pipeline .pipe-arrow svg{width:19px;height:19px}.abt-signals-pipeline .pnode{background:var(--paper);border:1px solid var(--line);border-radius:var(--r-lg);padding:14px;box-shadow:var(--shadow-xs);display:flex;flex-direction:column;gap:9px;width:100%}.abt-signals-pipeline .pn-head{display:flex;align-items:center;gap:9px}.abt-signals-pipeline .pn-ic{width:30px;height:30px;flex:none;border-radius:var(--r-sm);background:var(--brand-soft);color:var(--brand);display:grid;place-items:center}.abt-signals-pipeline .pn-ic svg{width:16px;height:16px}.abt-signals-pipeline .pn-n{font-family:var(--font-mono);font-size:10px;letter-spacing:0.06em;text-transform:uppercase;color:var(--ink-4)}.abt-signals-pipeline .pn-t{font-size:13.5px;font-weight:500;color:var(--ink);letter-spacing:-0.01em;line-height:1.25}.abt-signals-pipeline .pn-d{font-size:11.5px;line-height:1.45;color:var(--ink-3)}.abt-signals-pipeline .pnode.is-hub{border-color:var(--brand-ring);background:linear-gradient(180deg, var(--brand-soft-2), var(--paper) 72%)}.abt-signals-pipeline .pnode.is-fals .pn-ic{background:var(--neg-soft);color:var(--neg)}.abt-signals-pipeline .pn-tags{display:flex;flex-wrap:wrap;gap:5px;margin-top:1px;min-width:0}.abt-signals-pipeline .pchain,.abt-signals-pipeline .pnode,.abt-signals-pipeline .pn-col,.abt-signals-pipeline .pn-head{min-width:0}.abt-signals-pipeline .pn-t,.abt-signals-pipeline .pn-d{overflow-wrap:anywhere;text-wrap:pretty}.abt-signals-pipeline .pn-tag{font-family:var(--font-mono);font-size:9.5px;line-height:1.45;letter-spacing:0.01em;color:var(--ink-3);background:var(--well);border:1px solid var(--line-2);border-radius:var(--r-xs);padding:2px 6px;white-space:normal;max-width:100%;overflow-wrap:anywhere}.abt-signals-pipeline .pn-tag.b{color:var(--brand-700);background:var(--brand-soft);border-color:transparent}.abt-signals-pipeline .pn-tag.q{color:var(--warn-ink);background:var(--warn-soft);border-color:transparent}.abt-signals-pipeline .pipe-foot{display:flex;justify-content:space-between;align-items:center;gap:14px 28px;flex-wrap:wrap;margin-top:20px;padding-top:16px;border-top:1px solid var(--line-2);font-family:var(--font-mono);font-size:11px;color:var(--ink-4)}.abt-signals-pipeline .pipe-foot span{display:inline-flex;align-items:center;gap:7px}.abt-signals-pipeline .pipe-foot span::before{content:'';width:5px;height:5px;border-radius:50%;background:var(--brand);flex:none}.abt-signals-pipeline .pipe-foot b{color:var(--ink-3);font-weight:500}.abt-signals-pipeline .pipe-return{display:none}@container (max-width: 980px){.abt-signals-pipeline .pipe-diagram{flex-direction:column;gap:10px;position:relative;padding-left:38px}.abt-signals-pipeline .pipe-inputs{flex:none;flex-direction:row}.abt-signals-pipeline .pipe-inputs .pnode{flex:1 1 0}.abt-signals-pipeline .pipe-merge{flex:none;height:36px;width:100%}.abt-signals-pipeline .pipe-merge .pm-h{display:none}.abt-signals-pipeline .pipe-merge .pm-v{display:block}.abt-signals-pipeline .pchain{flex:none}.abt-signals-pipeline .pipe-arrow{padding:2px 0;transform:rotate(90deg)}.abt-signals-pipeline .pipe-return{display:block;position:absolute;left:2px;top:20px;bottom:20px;width:28px;border:2px dashed var(--brand-ring);border-right:0;border-radius:var(--r-lg) 0 0 var(--r-lg);pointer-events:none}.abt-signals-pipeline .pipe-return::after{content:'';position:absolute;top:-5px;right:-8px;width:0;height:0;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:8px solid var(--brand)}.abt-signals-pipeline .pipe-return::before{content:'';position:absolute;left:-3px;top:0;width:8px;height:8px;border-radius:50%;background:var(--brand);box-shadow:0 0 0 4px var(--brand-soft);opacity:0}}@container (max-width: 620px){.abt-signals-pipeline .pipe-inputs{flex-direction:column}}@media (prefers-reduced-motion: no-preference){.abt-signals-pipeline .audit .pipe-merge path{stroke:var(--brand);stroke-dasharray:5 9;animation:abtPipeMergeFlow 1.4s linear infinite}.abt-signals-pipeline .audit .pnode{position:relative}.abt-signals-pipeline .audit .pnode::after{content:'';position:absolute;inset:-2px;border-radius:13px;box-shadow:0 0 0 1.5px var(--brand-ring), 0 12px 36px -6px var(--brand-ring);opacity:0;pointer-events:none;transform-origin:center;animation:abtPipeBeat 8.5s cubic-bezier(0.37, 0, 0.34, 1) infinite}.abt-signals-pipeline .audit .pnode.is-fals::after{box-shadow:0 0 0 1.5px var(--neg), 0 12px 36px -6px var(--neg-soft)}.abt-signals-pipeline .audit .pipe-inputs .pnode:nth-child(1)::after{animation-delay:0s}.abt-signals-pipeline .audit .pipe-inputs .pnode:nth-child(2)::after{animation-delay:0.13s}.abt-signals-pipeline .audit .pipe-inputs .pnode:nth-child(3)::after{animation-delay:0.26s}.abt-signals-pipeline .audit .pipe-diagram>.pchain:nth-child(3) .pnode::after{animation-delay:1.05s}.abt-signals-pipeline .audit .pipe-diagram>.pchain:nth-child(5) .pnode::after{animation-delay:1.95s}.abt-signals-pipeline .audit .pipe-diagram>.pchain:nth-child(7) .pnode::after{animation-delay:2.85s}.abt-signals-pipeline .audit .pipe-diagram>.pchain:nth-child(9) .pnode::after{animation-delay:3.75s}.abt-signals-pipeline .audit .pipe-arrow svg{animation:abtPipeArrowGlide 8.5s cubic-bezier(0.37, 0, 0.34, 1) infinite;will-change:transform, opacity}.abt-signals-pipeline .audit .pipe-diagram>.pipe-arrow:nth-child(4) svg{animation-delay:1.5s}.abt-signals-pipeline .audit .pipe-diagram>.pipe-arrow:nth-child(6) svg{animation-delay:2.4s}.abt-signals-pipeline .audit .pipe-diagram>.pipe-arrow:nth-child(8) svg{animation-delay:3.3s}}@keyframes abtPipeMergeFlow{to{stroke-dashoffset:-14}}@keyframes abtPipeBeat{0%{opacity:0;transform:scale(0.965)}6%{opacity:0.9;transform:scale(1.004)}11%{opacity:1;transform:scale(1.012)}18%{opacity:0.55;transform:scale(1.022)}26%{opacity:0;transform:scale(1.032)}100%{opacity:0;transform:scale(0.965)}}@keyframes abtPipeArrowGlide{0%{opacity:0.4;transform:translateX(-3px);color:var(--ink-5)}7%{opacity:1;transform:translateX(2px);color:var(--brand)}16%{opacity:0.6;transform:translateX(3px);color:var(--brand)}26%{opacity:0.4;transform:translateX(-3px);color:var(--ink-5)}100%{opacity:0.4;transform:translateX(-3px);color:var(--ink-5)}}.abt-signals-pipeline .pipe-loop{position:relative;height:54px;margin:16px 8px 2px}.abt-signals-pipeline .pl-bracket{position:absolute;left:10px;right:10px;top:13px;bottom:8px;border:2px dashed var(--brand);border-top:0;border-radius:0 0 18px 18px;opacity:0.55}.abt-signals-pipeline .pl-arrow{position:absolute;left:4px;top:1px;width:0;height:0;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:11px solid var(--brand)}.abt-signals-pipeline .pl-dot{position:absolute;bottom:4px;left:calc(100% - 18px);width:9px;height:9px;border-radius:50%;background:var(--brand);box-shadow:0 0 0 4px var(--brand-soft);opacity:0;z-index:2}.abt-signals-pipeline .pl-from,.abt-signals-pipeline .pl-to{position:absolute;top:2px;font-family:var(--font-mono);font-size:10px;letter-spacing:0.04em;text-transform:uppercase;color:var(--ink-4);background:var(--paper);padding:0 6px}.abt-signals-pipeline .pl-from{right:12px}.abt-signals-pipeline .pl-to{left:24px}.abt-signals-pipeline .pl-tag{position:absolute;left:50%;top:46px;transform:translate(-50%, -50%);display:inline-flex;align-items:center;gap:8px;font-family:var(--font-mono);font-size:11.5px;color:var(--brand-700);background:var(--paper);border:1px solid var(--brand-ring);border-radius:var(--r-pill);padding:6px 14px;box-shadow:var(--shadow-xs);white-space:nowrap}.abt-signals-pipeline .pl-tag svg{width:14px;height:14px;color:var(--brand)}@container (max-width: 980px){.abt-signals-pipeline .pipe-loop{height:auto;margin-top:16px;text-align:center}.abt-signals-pipeline .pl-bracket,.abt-signals-pipeline .pl-arrow,.abt-signals-pipeline .pl-dot,.abt-signals-pipeline .pl-from,.abt-signals-pipeline .pl-to{display:none}.abt-signals-pipeline .pl-tag{position:static;transform:none;white-space:normal}}@media (prefers-reduced-motion: no-preference){.abt-signals-pipeline .pl-bracket{animation:abtPlLoopBeat 8.5s ease-in-out infinite}.abt-signals-pipeline .pl-dot{animation:abtPlLoopDot 8.5s cubic-bezier(0.45, 0.05, 0.3, 1) infinite}.abt-signals-pipeline .pipe-return::before{animation:abtReturnFlow 8.5s cubic-bezier(0.45, 0.05, 0.3, 1) infinite}}@keyframes abtReturnFlow{0%,44%{top:calc(100% - 8px);opacity:0}52%{top:calc(100% - 8px);opacity:1}88%{top:0;opacity:1}95%,100%{top:0;opacity:0}}@keyframes abtPlLoopBeat{0%,50%,100%{opacity:0.45}60%{opacity:0.95}82%{opacity:0.95}90%{opacity:0.45}}@keyframes abtPlLoopDot{0%,52%{left:calc(100% - 18px);opacity:0}57%{left:calc(100% - 18px);opacity:1}80%{left:9px;opacity:1}86%,100%{left:9px;opacity:0}}.abt-signals-pipeline a.pnode{text-decoration:none;color:inherit;cursor:pointer}.abt-signals-pipeline .pipe-diagram .pnode:hover,.abt-signals-pipeline .pipe-diagram .pnode:focus-within{border-color:var(--brand-ring);box-shadow:var(--shadow-md)}.abt-signals-pipeline .pipe-diagram .pnode:focus-visible{outline:2px solid var(--brand);outline-offset:2px}@media (prefers-reduced-motion: no-preference){.abt-signals-pipeline .pipe-diagram .pnode{transition:border-color 0.16s var(--ease), box-shadow 0.16s var(--ease)}}.sig-anchor{display:block;height:0;scroll-margin-top:5rem}"}],"page":{"pagePath":"signals/overview","slug":"/signals/overview","pageMetadata":{"title":"Signals overview","description":"Signals is ABTestly's AI CRO audit. Scan a page of your own site, get ranked test ideas backed by evidence, triage them on an idea board, and turn the good ones into real experiments. Currently in Beta.","href":"/signals/overview"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Signals is ABTestly’s AI CRO audit. Scan a page of your own site, get ranked test ideas backed by evidence, triage them on an idea board, and turn the good ones into real experiments. Currently in Beta.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,li:`li`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Card,CardGroup,Heading,Note,Warning}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Beta.`}),` Signals is in Beta. It works today and the ideas are real,\nbut the interface and wording on these pages can still change as we\nrefine it. If something reads differently in your dashboard, trust the\ndashboard and email `,_jsx(_components.strong,{children:_jsx(_components.a,{href:`mailto:support@abtestly.com`,children:`support@abtestly.com`})}),` so we can fix the page.`]})}),`\n`,_jsxs(_components.p,{children:[`Signals is ABTestly’s AI CRO audit. You scan a page of your own site,\nand the AI hands back a ranked list of `,_jsx(_components.strong,{children:`test ideas`}),`, each one a\nhypothesis with the evidence behind it. You organize those ideas on an\nidea board, keep the ones worth running, and turn them into real\nABTestly experiments with one button.`]}),`\n`,_jsxs(_components.p,{children:[`It answers the question every optimization program starts with: `,_jsx(_components.strong,{children:`what\nshould I test next, and why.`})]}),`\n`,_jsx(Heading,{level:`2`,id:`the-four-steps`,children:`The four steps`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Scan a page`,icon:`magnifying-glass`,href:`/signals/scan-a-page`,children:_jsx(_components.p,{children:`A browser extension captures the page from your own live site:\ndesktop, mobile, and mobile again on a throttled connection. Walk\nseveral steps of a funnel in one pass.`})}),_jsx(Card,{title:`Connect Google Analytics`,icon:`chart-line`,href:`/signals/connect-google-analytics`,children:_jsx(_components.p,{children:`One click, read only. Lets a scan read your funnel data and credit\nit on the ideas it speaks to.`})}),_jsx(Card,{title:`Read a scan`,icon:`list-check`,href:`/signals/read-a-scan`,children:_jsx(_components.p,{children:`The idea board. Ranked by a PXL score, grouped into campaigns,\ntriaged New, Approve, or Dismiss.`})}),_jsx(Card,{title:`Build a test from an idea`,icon:`flask`,href:`/signals/build-a-test`,children:_jsx(_components.p,{children:`Build this creates a real experiment draft, prefilled from the\nhypothesis. Its result feeds back into the next scan.`})})]}),`\n`,_jsx(Heading,{level:`2`,id:`the-evidence-and-honesty-about-it`,children:`The evidence, and honesty about it`}),`\n`,_jsx(_components.p,{children:`This is the part that matters most, so read it before you read a scan.`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Every scan reads the page structure.`}),` That is the DOM: the\nheadings, buttons, forms, copy, and layout the browser actually\nrendered. Structure is the first signal, and it is always present. It\nis enough to spot a buried call to action, a form asking for too much,\na value proposition that never appears above the fold.`]}),`\n`,_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[`Connecting `,_jsx(_components.a,{href:`/signals/connect-google-analytics`,children:`Google Analytics 4`}),`\nlets a scan read a second, independent signal and credit it on the\nideas it speaks to: behavior.`]}),` What visitors actually do. Where they\nfall out of a funnel, how conversion differs by device, where revenue\ncomes from by channel. Structure tells you what the page\nis. Behavior tells you what is happening on it.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Customer qualitative voice is the other route to a second signal.`}),`\nWhat your customers said in their own words, supplied by you in `,_jsx(_components.strong,{children:`Brand\ncontext`}),`: reviews, support themes, survey verbatims. An idea it is\ncredited on can reach Test ready with no GA4 at all. The first party\nheatmap is a fourth source, but it corroborates funnel data rather than\nstanding in for it, so it counts only alongside a credited GA4 answer.\nThe `,_jsx(_components.a,{href:`/signals/evidence-contract`,children:`evidence contract`}),` sets all four out.`]}),`\n`,_jsxs(_components.p,{children:[`An idea is marked `,_jsx(_components.strong,{children:`Test ready`}),` only when a second independent signal\nconfirms what the structure suggests `,_jsx(_components.strong,{children:`and`}),` its score clears the\nthreshold for its evidence tier. Until then it reads `,_jsx(_components.strong,{children:`Needs\nevidence`}),`, `,_jsx(_components.strong,{children:`Below threshold`}),` or `,_jsx(_components.strong,{children:`Unverified`}),`, as the `,_jsx(_components.a,{href:`/signals/read-a-scan`,children:`badge\ntable`}),` sets out: an honest finding for you to\ncheck, not a promise that it will win. Signals never invents a\nstatistic when the data to support it is not there. When the number\nexists, you see it. When it does not, the idea says so plainly.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`A Test ready badge means two signals agree and the score cleared its\ngate, not that the test will win. Nothing predicts a winner except\nrunning the experiment. Signals finds the strong candidates. The\n`,_jsx(_components.a,{href:`/results/reading-a-result`,children:`results page`}),` settles them.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`the-closed-loop`,children:`The closed loop`}),`\n`,_jsx(_components.p,{children:`Most audit tools stop at the report. They never see whether their idea\nworked, so they cannot get smarter about your site. ABTestly owns both\nends, the idea and the experiment, so it can close that loop.`}),`\n`,_jsx(`div`,{className:`abt-signals-pipeline`,children:_jsxs(`div`,{className:`audit`,children:[_jsxs(`div`,{className:`pipe-cap`,children:[_jsx(`span`,{children:`Evidence in · three parallel streams`}),_jsx(`span`,{className:`r`,children:`Reasoning · narrowed to a ranked backlog`})]}),_jsxs(`div`,{className:`pipe-diagram`,children:[_jsxs(`div`,{className:`pipe-inputs`,children:[_jsxs(`a`,{className:`pnode`,href:`#stage-intake`,children:[_jsx(`span`,{className:`pn-ic`,children:_jsx(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,strokeLinejoin:`round`,children:_jsx(`path`,{d:`M12 3v18M3 8h6M3 16h6M15 8h6M15 16h6`})})}),_jsxs(`div`,{className:`pn-col`,children:[_jsx(`span`,{className:`pn-n`,children:`01 · Intake`}),_jsx(`div`,{className:`pn-t`,children:`Site \u0026 business context`}),_jsxs(`div`,{className:`pn-tags`,children:[_jsx(`span`,{className:`pn-tag`,children:`URL plus context`}),_jsx(`span`,{className:`pn-tag`,children:`connect GA4`}),_jsx(`span`,{className:`pn-tag mint-b`,children:`sets what a scan can read`})]})]})]}),_jsxs(`a`,{className:`pnode`,href:`#stage-capture`,children:[_jsx(`span`,{className:`pn-ic`,children:_jsxs(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[_jsx(`rect`,{x:`3`,y:`4`,width:`18`,height:`14`,rx:`2`}),_jsx(`path`,{d:`M3 8h18M8 21h8`})]})}),_jsxs(`div`,{className:`pn-col`,children:[_jsx(`span`,{className:`pn-n`,children:`02 · Capture`}),_jsx(`div`,{className:`pn-t`,children:`DOM, renders, funnel walks`}),_jsxs(`div`,{className:`pn-tags`,children:[_jsx(`span`,{className:`pn-tag mint-b`,children:`20 plus DOM signals`}),_jsx(`span`,{className:`pn-tag`,children:`desktop and mobile`}),_jsx(`span`,{className:`pn-tag`,children:`throttled view`})]})]})]}),_jsxs(`a`,{className:`pnode`,href:`#stage-behaviour`,children:[_jsx(`span`,{className:`pn-ic`,children:_jsxs(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[_jsx(`path`,{d:`M3 3v18h18`}),_jsx(`rect`,{x:`7`,y:`11`,width:`3`,height:`6`}),_jsx(`rect`,{x:`13`,y:`7`,width:`3`,height:`10`})]})}),_jsxs(`div`,{className:`pn-col`,children:[_jsx(`span`,{className:`pn-n`,children:`03 · Behaviour`}),_jsx(`div`,{className:`pn-t`,children:`GA4 funnel and drop off`}),_jsxs(`div`,{className:`pn-tags`,children:[_jsx(`span`,{className:`pn-tag`,children:`device CVR and channels`}),_jsx(`span`,{className:`pn-tag`,children:`funnel drop off`})]})]})]})]}),_jsxs(`div`,{className:`pipe-merge`,\"aria-hidden\":`true`,children:[_jsxs(`svg`,{className:`pm-h`,viewBox:`0 0 50 100`,preserveAspectRatio:`none`,children:[_jsx(`path`,{d:`M2 16 C 28 16 24 50 48 50`,vectorEffect:`non-scaling-stroke`}),_jsx(`path`,{d:`M2 50 H 48`,vectorEffect:`non-scaling-stroke`}),_jsx(`path`,{d:`M2 84 C 28 84 24 50 48 50`,vectorEffect:`non-scaling-stroke`})]}),_jsxs(`svg`,{className:`pm-v`,viewBox:`0 0 120 40`,preserveAspectRatio:`none`,children:[_jsx(`path`,{d:`M20 2 C 20 24 60 16 60 38`,vectorEffect:`non-scaling-stroke`}),_jsx(`path`,{d:`M60 2 L 60 38`,vectorEffect:`non-scaling-stroke`}),_jsx(`path`,{d:`M100 2 C 100 24 60 16 60 38`,vectorEffect:`non-scaling-stroke`})]})]}),_jsx(`div`,{className:`pchain`,children:_jsxs(`a`,{className:`pnode is-hub`,href:`#stage-payload`,children:[_jsxs(`div`,{className:`pn-head`,children:[_jsx(`span`,{className:`pn-ic`,children:_jsxs(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[_jsx(`path`,{d:`M4 7h6l6 5`}),_jsx(`path`,{d:`M4 17h6l6-5`}),_jsx(`circle`,{cx:`18`,cy:`12`,r:`2`,fill:`currentColor`,stroke:`none`})]})}),_jsx(`span`,{className:`pn-n`,children:`04 · Payload`})]}),_jsx(`div`,{className:`pn-t`,children:`Multimodal payload assembled`}),_jsx(`div`,{className:`pn-d`,children:`Three image blocks plus structured evidence, combined into one prompt.`}),_jsxs(`div`,{className:`pn-tags`,children:[_jsx(`span`,{className:`pn-tag`,children:`3 images + text`}),_jsx(`span`,{className:`pn-tag`,children:`vision reconciled`})]})]})}),_jsx(`div`,{className:`pipe-arrow`,children:_jsx(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,strokeLinejoin:`round`,children:_jsx(`path`,{d:`M5 12h14M13 6l6 6-6 6`})})}),_jsx(`div`,{className:`pchain`,children:_jsxs(`a`,{className:`pnode`,href:`#stage-generation`,children:[_jsxs(`div`,{className:`pn-head`,children:[_jsx(`span`,{className:`pn-ic`,children:_jsx(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,strokeLinejoin:`round`,children:_jsx(`path`,{d:`M12 3l2.4 4.9 5.4.8-3.9 3.8.9 5.4L12 15.6l-4.8 2.5.9-5.4L4.2 8.7l5.4-.8z`})})}),_jsx(`span`,{className:`pn-n`,children:`05 · Generation`})]}),_jsx(`div`,{className:`pn-t`,children:`Grounded hypotheses`}),_jsx(`div`,{className:`pn-d`,children:`Each tied to a behavioral mechanism and a citation; thin evidence is labeled, not inflated.`}),_jsxs(`div`,{className:`pn-tags`,children:[_jsx(`span`,{className:`pn-tag mint-b`,children:`18 model fields`}),_jsx(`span`,{className:`pn-tag mint-b`,children:`8 evidence answers`}),_jsx(`span`,{className:`pn-tag`,children:`5 CRO pillars`}),_jsx(`span`,{className:`pn-tag`,children:`two signal gate`})]})]})}),_jsx(`div`,{className:`pipe-arrow`,children:_jsx(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,strokeLinejoin:`round`,children:_jsx(`path`,{d:`M5 12h14M13 6l6 6-6 6`})})}),_jsx(`div`,{className:`pchain`,children:_jsxs(`a`,{className:`pnode is-fals`,href:`#stage-falsification`,children:[_jsxs(`div`,{className:`pn-head`,children:[_jsx(`span`,{className:`pn-ic`,children:_jsxs(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[_jsx(`path`,{d:`M12 9v4M12 17h.01`}),_jsx(`path`,{d:`M10.3 3.9 2 18a2 2 0 0 0 1.7 3h16.6a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0z`})]})}),_jsx(`span`,{className:`pn-n`,children:`06 · Falsification`})]}),_jsx(`div`,{className:`pn-t`,children:`Argued against itself`}),_jsx(`div`,{className:`pn-d`,children:`Failure mode, confounder, alternative, and the test that settles it.`}),_jsx(`div`,{className:`pn-tags`,children:_jsx(`span`,{className:`pn-tag q`,children:`adversarial second pass`})})]})}),_jsx(`div`,{className:`pipe-arrow`,children:_jsx(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,strokeLinejoin:`round`,children:_jsx(`path`,{d:`M5 12h14M13 6l6 6-6 6`})})}),_jsx(`div`,{className:`pchain`,children:_jsxs(`a`,{className:`pnode is-out`,href:`#stage-output`,children:[_jsxs(`div`,{className:`pn-head`,children:[_jsx(`span`,{className:`pn-ic`,children:_jsxs(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[_jsx(`path`,{d:`M5 4h11l3 3v13H5z`}),_jsx(`path`,{d:`M9 9h6M9 13h6M9 17h4`})]})}),_jsx(`span`,{className:`pn-n`,children:`07 · Output`})]}),_jsx(`div`,{className:`pn-t`,children:`28 field hypotheses, ranked`}),_jsx(`div`,{className:`pn-d`,children:`Scored and ordered by ABTestly, each with its evidence tier, opportunity size and a tracking spec.`}),_jsxs(`div`,{className:`pn-tags`,children:[_jsx(`span`,{className:`pn-tag mint-b`,children:`PXL ranked`}),_jsx(`span`,{className:`pn-tag`,children:`4 evidence tiers`}),_jsx(`span`,{className:`pn-tag`,children:`ready to build`})]})]})}),_jsx(`div`,{className:`pipe-return`,\"aria-hidden\":`true`})]}),_jsxs(`div`,{className:`pipe-loop`,\"aria-label\":`Feedback loop: experiment outcomes feed back as priors for the next scan`,children:[_jsx(`span`,{className:`pl-to`,children:`into 01 · Intake`}),_jsx(`span`,{className:`pl-from`,children:`from 07 · Output`}),_jsx(`div`,{className:`pl-bracket`}),_jsx(`span`,{className:`pl-arrow`}),_jsx(`span`,{className:`pl-dot`}),_jsxs(`span`,{className:`pl-tag`,children:[_jsxs(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.9`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[_jsx(`path`,{d:`M3 12a9 9 0 0 1 15-6.7L21 8`}),_jsx(`path`,{d:`M21 3v5h-5`}),_jsx(`path`,{d:`M21 12a9 9 0 0 1-15 6.7L3 16`}),_jsx(`path`,{d:`M3 21v-5h5`})]}),`Outcomes feed back as priors for the next scan`]})]}),_jsxs(`div`,{className:`pipe-foot`,children:[_jsxs(`span`,{children:[_jsx(`b`,{children:`A few minutes`}),` · end to end`]}),_jsxs(`span`,{children:[`It produces the backlog · `,_jsx(`b`,{children:`it never runs your test`})]})]})]})}),`\n`,_jsxs(_components.p,{children:[`When an experiment you built from an idea runs to a conclusion, its\noutcome, won, lost, or inconclusive, feeds back into future scans of\nthe same site as ground truth. The next scan already knows what worked\non your pages and what did not, so its ideas get sharper over time. A\nstandalone tool cannot do this, because it never learns the result.\nSee `,_jsx(_components.a,{href:`/signals/build-a-test`,children:`Build a test from an idea`}),` for how the\nhandoff works.`]}),`\n`,_jsx(Heading,{level:`2`,id:`inside-a-scan-step-by-step`,children:`Inside a scan, step by step`}),`\n`,_jsx(_components.p,{children:`Inside a single scan, the audit works through seven stages, from the URL you\nhand over to the ranked backlog it hands back. Here is what happens at each one.`}),`\n`,_jsx(`div`,{id:`stage-intake`,className:`sig-anchor`}),`\n`,_jsx(Heading,{level:`3`,id:`01-·-intake`,children:`01 · Intake`}),`\n`,_jsx(_components.p,{children:`You start by giving ABTestly the URL you want audited, plus any context you\nhave: your niche, average order value, the goal that matters, your device\nsplit. How you connect your data decides how far the scan can go. Connect GA4\nand a scan can read real behaviour. With neither GA4 nor customer voice in\nBrand context, every idea stays in the Structural tier, working from the page\nstructure alone. What reaches a scan sets what\nit can score, not what any one idea earns: a connected source that returns\nnothing reaches the scan with nothing to score, and each idea’s own evidence\ntier is settled later, from the evidence that actually bears on it. Intake also\nconfirms the page is on your own site before it runs.`}),`\n`,_jsx(`div`,{id:`stage-capture`,className:`sig-anchor`}),`\n`,_jsx(Heading,{level:`3`,id:`02-·-capture`,children:`02 · Capture`}),`\n`,_jsx(_components.p,{children:`A browser extension captures the page the way a real visitor sees it, from your\nown logged in session, so the scan reads the rendered page and not a bare URL.\nIt picks up more than twenty structural signals, from page type and heading\norder to form fields, calls to action, review counts and trust badges. Three\nscreenshots follow, on desktop, on mobile, and on a throttled connection, each\nreconciled against what it read. It only ever reads: it never submits payment\nand never tries to get around a site’s bot protection.`}),`\n`,_jsx(`div`,{id:`stage-behaviour`,className:`sig-anchor`}),`\n`,_jsx(Heading,{level:`3`,id:`03-·-behaviour`,children:`03 · Behaviour`}),`\n`,_jsx(_components.p,{children:`Where GA4 funnel data reaches the scan, it can read where real visitors actually\ndrop off. That is the behavioural half of the two signal rule: funnel drop off, conversion by\ndevice, revenue by channel, plus new against returning visitors and your busiest\npages. It matters because a finding is only promoted once a second independent\nsignal agrees with what the page showed, the two signal rule. GA4 funnel data is\none such signal; the customer voice you supply in Brand context is the other.`}),`\n`,_jsx(`div`,{id:`stage-payload`,className:`sig-anchor`}),`\n`,_jsx(Heading,{level:`3`,id:`04-·-payload`,children:`04 · Payload`}),`\n`,_jsx(_components.p,{children:`Everything gathered so far is assembled into a single prompt the model can\nreason over, so it works from real evidence rather than a bare URL. That prompt\ncarries the three screenshots next to a block of structured text: your business\ncontext, the page signals, the live picture from GA4, and any earlier test\nresults from this same site. It is framed as evidence to weigh, not a list of\nclaims to accept.`}),`\n`,_jsx(`div`,{id:`stage-generation`,className:`sig-anchor`}),`\n`,_jsx(Heading,{level:`3`,id:`05-·-generation`,children:`05 · Generation`}),`\n`,_jsx(_components.p,{children:`Now the model proposes ideas that speak to the problem you named, each grounded\nin a behavioural mechanism and evaluated against the evidence, not guessed.\nEvery idea arrives as a structured hypothesis with 18 fields behind it, among\nthem the effort, a research citation, a tracking spec, and its answers to the\neight evidence questions ABTestly scores. The model answers those questions; it\nnever sets the score, the tier or the rank. Each idea sits under one of five CRO\npillars and is read through a named model such as Fogg or Cialdini. When the\nevidence is thin the idea is flagged rather than dropped, with the single\ncheapest check that would confirm it, the two signal gate.`}),`\n`,_jsx(`div`,{id:`stage-falsification`,className:`sig-anchor`}),`\n`,_jsx(Heading,{level:`3`,id:`06-·-falsification`,children:`06 · Falsification`}),`\n`,_jsx(_components.p,{children:`Before an idea reaches you, it goes through a pass that argues against it. This\nadversarial step names the most likely way the idea could fail, the confounder\nmost likely to mislead you, another explanation for the same evidence, and the\none test that would tell them apart. You get that counter argument attached to\nthe recommendation. The pass never blocks a scan: when it cannot complete, the\nideas still reach you, without that counter argument attached.`}),`\n`,_jsx(`div`,{id:`stage-output`,className:`sig-anchor`}),`\n`,_jsx(Heading,{level:`3`,id:`07-·-output`,children:`07 · Output`}),`\n`,_jsx(_components.p,{children:`What comes back is a ranked backlog. ABTestly scores every idea from the\nmodel’s answers and orders the list by that PXL score, so the best return for\nthe effort sits at the top, and each score is read against the maximum that\nscan could reach rather than a fixed scale. Each item carries its evidence\ntier, a rough size for the opportunity, the effort, a suggested run time, and\nthe tracking you would need to set up. There are four evidence tiers, from\nverified down to purely structural, and the tier belongs to the idea rather\nthan to the scan, so two ideas from one scan can carry different tiers and you\ncan see how much weight each recommendation should carry. Signals writes the\nbacklog and the plan; it never starts the test for you, so what ships stays\nyour call.`}),`\n`,_jsx(Heading,{level:`2`,id:`what-signals-does-not-do`,children:`What Signals does not do`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`It does not run tests on its own.`}),` Nothing goes live until you\nclick Build this, fill in the details, and start the experiment\nyourself.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`It does not fabricate numbers.`}),` No statistic appears unless the\nconnected data supports it.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`It does not need your passwords.`}),` The scan runs in your own\nbrowser, on your own logged in session. See `,_jsx(_components.a,{href:`/signals/scan-a-page`,children:`Scan a\npage`}),`.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`where-to-go-next`,children:`Where to go next`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Run your first scan`,icon:`play`,href:`/signals/scan-a-page`,children:_jsx(_components.p,{children:`Install the extension and capture a page in a couple of minutes.`})}),_jsx(Card,{title:`Connect Google Analytics`,icon:`link`,href:`/signals/connect-google-analytics`,children:_jsx(_components.p,{children:`One click, read only. Lets a scan read your funnel data and credit\nit on the ideas it speaks to.`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Signals overview","description":"Signals is ABTestly's AI CRO audit. Scan a page of your own site, get ranked test ideas backed by evidence, triage them on an idea board, and turn the good ones into real experiments. Currently in Beta.","href":"/signals/overview"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"The four steps","slug":"the-four-steps","depth":2,"children":[]},{"title":"The evidence, and honesty about it","slug":"the-evidence-and-honesty-about-it","depth":2,"children":[]},{"title":"The closed loop","slug":"the-closed-loop","depth":2,"children":[]},{"title":"Inside a scan, step by step","slug":"inside-a-scan-step-by-step","depth":2,"children":[{"title":"01 · Intake","slug":"01-·-intake","depth":3,"children":[]},{"title":"02 · Capture","slug":"02-·-capture","depth":3,"children":[]},{"title":"03 · Behaviour","slug":"03-·-behaviour","depth":3,"children":[]},{"title":"04 · Payload","slug":"04-·-payload","depth":3,"children":[]},{"title":"05 · Generation","slug":"05-·-generation","depth":3,"children":[]},{"title":"06 · Falsification","slug":"06-·-falsification","depth":3,"children":[]},{"title":"07 · Output","slug":"07-·-output","depth":3,"children":[]}]},{"title":"What Signals does not do","slug":"what-signals-does-not-do","depth":2,"children":[]},{"title":"Where to go next","slug":"where-to-go-next","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/abtestly/2b7ba09c10a131d7/chat-widget.js","/_mintlify/custom/abtestly/99bdab09a5894d14/consent.js","/_mintlify/custom/abtestly/247c45f8fadb8f9c/docs-code-copy.js","/_mintlify/custom/abtestly/8b522d54658179ab/ga4-init.js"],"subdomain":"abtestly","siteName":"ABTestly","title":"Signals overview - ABTestly","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-04T13:19:26.440Z","gitLastModified":"2026-09-04T08:13:30.000Z","originalFileLocation":"signals/overview.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Signals is ABTestly\u0026#x27;s AI CRO audit. Scan a page of your own site, get ranked test ideas backed by evidence, triage them on an idea board, and turn the good ones into real experiments. Currently in Beta.\">\u003cmeta data-mint-head name=\"application-name\" content=\"ABTestly\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/abtestly/8M9DcmNH08KxZUPp/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/abtestly/8M9DcmNH08KxZUPp/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/abtestly/8M9DcmNH08KxZUPp/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/abtestly/8M9DcmNH08KxZUPp/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/abtestly/8M9DcmNH08KxZUPp/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/abtestly/8M9DcmNH08KxZUPp/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/abtestly/8M9DcmNH08KxZUPp/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/abtestly/8M9DcmNH08KxZUPp/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/abtestly/8M9DcmNH08KxZUPp/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Signals overview - ABTestly\">\u003cmeta data-mint-head property=\"og:description\" content=\"ABTestly documentation: code-first A/B testing for CRO developers, agencies, and technical growth teams. Covers experiment setup, targeting, analytics integrations, and the developer API.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"ABTestly Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.abtestly.com/signals/overview\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://docs.abtestly.com/images/og-image.png\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Signals overview - ABTestly\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"ABTestly documentation: code-first A/B testing for CRO developers, agencies, and technical growth teams. Covers experiment setup, targeting, analytics integrations, and the developer API.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://docs.abtestly.com/images/og-image.png\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/abtestly/8M9DcmNH08KxZUPp/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"ABTestly\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2563EB\">\u003cmeta data-mint-head name=\"og:logo\" content=\"https://abtestly.com/assets/favicon.svg\">\u003cmeta data-mint-head name=\"og:image:alt\" content=\"ABTestly Documentation. Code-first A/B testing, documented.\">\u003cmeta data-mint-head name=\"twitter:image:alt\" content=\"ABTestly Documentation. Code-first A/B testing, documented.\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.abtestly.com/signals/overview\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/signals/overview.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.abtestly.com/#organization\",\"name\":\"ABTestly\",\"url\":\"https://docs.abtestly.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/abtestly/00G4YX1JcYDGimmE/logo/light.svg?fit=max\u0026auto=format\u0026n=00G4YX1JcYDGimmE\u0026q=85\u0026s=8e30c68a69d5838fd283382cc9a3041c\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.abtestly.com#website\",\"name\":\"ABTestly\",\"url\":\"https://docs.abtestly.com\",\"publisher\":{\"@id\":\"https://docs.abtestly.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.abtestly.com/signals/overview#webpage\",\"url\":\"https://docs.abtestly.com/signals/overview\",\"name\":\"Signals overview\",\"description\":\"Signals is ABTestly's AI CRO audit. Scan a page of your own site, get ranked test ideas backed by evidence, triage them on an idea board, and turn the good ones into real experiments. Currently in Beta.\",\"dateModified\":\"2026-09-04T08:13:30.000Z\",\"isPartOf\":{\"@id\":\"https://docs.abtestly.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.abtestly.com/signals/overview#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.abtestly.com/signals/overview#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"ABTestly\",\"item\":\"https://docs.abtestly.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Signals overview\",\"item\":\"https://docs.abtestly.com/signals/overview\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.abtestly.com/signals/overview#article\",\"headline\":\"Signals overview\",\"name\":\"Signals overview\",\"description\":\"Signals is ABTestly's AI CRO audit. Scan a page of your own site, get ranked test ideas backed by evidence, triage them on an idea board, and turn the good ones into real experiments. Currently in Beta.\",\"url\":\"https://docs.abtestly.com/signals/overview\",\"mainEntityOfPage\":{\"@id\":\"https://docs.abtestly.com/signals/overview#webpage\"},\"image\":\"https://docs.abtestly.com/images/og-image.png\",\"dateModified\":\"2026-09-04T08:13:30.000Z\",\"publisher\":{\"@id\":\"https://docs.abtestly.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.abtestly.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"ABTestly\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"ABTestly\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/signals/overview.md","siteName":"ABTestly","nav":{"global":null,"groups":[{"group":"Getting started","pages":[{"title":"ABTestly Documentation: Code-first A/B Testing","sidebarTitle":"Introduction","href":"/introduction"},{"title":"Run your first A/B test in about fifteen minutes","sidebarTitle":"Quickstart","href":"/quickstart"},{"title":"How ABTestly works","href":"/concepts/how-it-works"},{"title":"Documentation index","href":"/index"},{"title":"Documentation changelog","href":"/changelog"}]},{"group":"Install","pages":[{"title":"Install the snippet","href":"/install/snippet"},{"title":"Verify the snippet is working","href":"/install/verify"},{"title":"Single-page apps","href":"/install/spa"},{"title":"Consent \u0026 deferred mode","href":"/install/consent"},{"title":"Visitor opt-out","href":"/install/opt-out"}]},{"group":"Build a test","pages":[{"title":"Create an experiment","href":"/build/create"},{"title":"JavaScript and CSS variations","sidebarTitle":"Variations","href":"/build/variations"},{"title":"Review changes before you save","sidebarTitle":"Review changes","href":"/build/review-changes"},{"title":"Code history","href":"/build/code-history"},{"title":"Code check","href":"/build/code-check"},{"title":"Dev libraries","href":"/build/dev-libraries"},{"title":"Split URL redirect tests","sidebarTitle":"Redirect tests","href":"/build/redirect-tests"},{"title":"Clone an experiment","href":"/build/clone"},{"title":"Schedule an experiment","href":"/build/schedule"},{"title":"Autosave and drafts","href":"/build/autosave"}]},{"group":"Target the right visitors","pages":[{"title":"Targeting overview","href":"/targeting/overview"},{"title":"URL rules","href":"/targeting/url-rules"},{"title":"Audiences","href":"/targeting/audiences"},{"title":"Geo targeting","href":"/targeting/geo"},{"title":"Saved Locations \u0026 Audiences","href":"/targeting/saved-lists"},{"title":"Activation triggers","href":"/targeting/activation-triggers"}]},{"group":"Mutual exclusion groups","pages":[{"title":"Exclusion groups overview","href":"/exclusion-groups/overview"},{"title":"How allocation works","href":"/exclusion-groups/how-it-works"},{"title":"Long-term holdouts","href":"/exclusion-groups/holdouts"},{"title":"Managing membership","href":"/exclusion-groups/managing"}]},{"group":"Measure","pages":[{"title":"A/B test goals in ABTestly","sidebarTitle":"Goals overview","href":"/goals/overview"},{"title":"A/B test conversion goals: clicks, forms, revenue and custom events","sidebarTitle":"Goal types","href":"/goals/types"},{"title":"System default goals","sidebarTitle":"System defaults","href":"/goals/system-defaults"},{"title":"A/B test guardrail metrics and primary goals","sidebarTitle":"Primary vs guardrail","href":"/goals/primary-vs-guardrail"},{"title":"A/B test goal tracking health","sidebarTitle":"Goal firing health","href":"/goals/health"}]},{"group":"Read results","pages":[{"title":"Reading a result","href":"/results/reading-a-result"},{"title":"The three statistics engines","href":"/results/engines"},{"title":"Revenue metrics","href":"/results/revenue-metrics"},{"title":"Segments","href":"/results/segments"},{"title":"Change the baseline","href":"/results/baseline"},{"title":"Time to decision","href":"/results/time-to-decision"},{"title":"Business impact projection","href":"/results/business-impact"},{"title":"Compare LCP between A/B test variants","sidebarTitle":"Speed guardrail","href":"/results/speed-guardrail"},{"title":"The Exact Experiment Ledger","href":"/results/exact-ledger"},{"title":"Detect sample ratio mismatch and broken experiment allocation","sidebarTitle":"Sample ratio mismatch","href":"/results/srm"},{"title":"Editing a running A/B test without invalidating the results","sidebarTitle":"Editing a running test","href":"/results/editing-a-running-test"},{"title":"What the affected page loads count on your results means","sidebarTitle":"Variation errors","href":"/results/variation-errors"},{"title":"Exports","href":"/results/exports"}]},{"group":"Methodology","pages":[{"title":"Methodology","sidebarTitle":"Overview","href":"/methodology/overview"},{"title":"Underneath the statistics","sidebarTitle":"Underneath the statistics","href":"/methodology/underneath-the-statistics"},{"title":"Minimum detectable effect","sidebarTitle":"Minimum detectable effect","href":"/methodology/minimum-detectable-effect"},{"title":"Test duration","sidebarTitle":"Test duration","href":"/methodology/test-duration"},{"title":"The peeking problem","sidebarTitle":"Peeking","href":"/methodology/peeking"},{"title":"Confidence intervals","sidebarTitle":"Confidence intervals","href":"/methodology/confidence-intervals"},{"title":"Sample ratio mismatch","sidebarTitle":"Sample ratio mismatch","description":"The chi-square goodness-of-fit test we run on the observed traffic split, the incomplete-gamma machinery behind its p-value, why the bar is 0.001 rather than 0.05, and exactly which of its outputs reach a screen.","href":"/methodology/sample-ratio-mismatch"}]},{"group":"Signals","pages":[{"title":"Signals overview","href":"/signals/overview"},{"title":"Scan a page","description":"How a Signals scan works. Install the ABTestly browser extension, open the side panel on your own live site, and capture three renders of the page, desktop, mobile, and mobile on a throttled connection, plus its structure. Walk several funnel steps in one pass.","href":"/signals/scan-a-page"},{"title":"Connect Google Analytics","href":"/signals/connect-google-analytics"},{"title":"Prioritize A/B test ideas: PXL scores and evidence","sidebarTitle":"Read a scan","href":"/signals/read-a-scan"},{"title":"Signals evidence contract","href":"/signals/evidence-contract"},{"title":"Build a test from an idea","href":"/signals/build-a-test"}]},{"group":"Preview \u0026 QA","pages":[{"title":"Preview links","href":"/preview/preview-modal"},{"title":"Forced variation","href":"/preview/forced-variation"},{"title":"QA session links and the QA overlay","sidebarTitle":"QA session links","href":"/preview/qa-overlay"},{"title":"Dev debugger","href":"/preview/dev-debugger"}]},{"group":"Site settings","pages":[{"title":"General settings","href":"/settings/general"},{"title":"Snippet panel","href":"/settings/snippet-panel"},{"title":"Analytics adapters","href":"/settings/analytics-adapters"},{"title":"SPA support panel","href":"/settings/spa-panel"},{"title":"Global JS","href":"/settings/global-js"},{"title":"Blocked IPs","href":"/settings/blocked-ips"},{"title":"Danger zone","href":"/settings/danger-zone"}]},{"group":"Team \u0026 access","pages":[{"title":"Members and roles","href":"/team/members-and-roles"},{"title":"Permissions catalog","href":"/team/permissions-catalog"},{"title":"Activity log","href":"/team/activity-log"}]},{"group":"Assets","pages":[{"title":"Upload an asset","href":"/assets/upload"},{"title":"How assets are served","href":"/assets/serving"},{"title":"Recycle bin","href":"/assets/recycle-bin"}]},{"group":"Integrations","pages":[{"title":"GA4 dataLayer integration","href":"/integrations/ga4-datalayer"},{"title":"GA4 export","href":"/ga4-export"},{"title":"GA4 BigQuery analysis","href":"/ga4-bigquery"},{"title":"Product analytics","href":"/product-analytics"},{"title":"Google Tag Manager","href":"/integrations/gtm"}]},{"group":"Billing","pages":[{"title":"ABTestly plans: limits, upgrades, downgrades and cancellation","sidebarTitle":"Plans \u0026 pricing","href":"/plans"},{"title":"The 14 day free trial","href":"/billing/trial"},{"title":"What is a Monthly Tracked User (MTU)","href":"/billing/mtu"},{"title":"Refunds and cancellation","href":"/billing/refunds"}]},{"group":"Trust \u0026 compliance","pages":[{"title":"Trust and compliance","href":"/trust-and-compliance"}]},{"group":"Developer reference","pages":[{"title":"window.abtestly API","href":"/developer/window-abtestly-api"},{"title":"REST API","href":"/developer/rest-api"},{"title":"Beacon protocol","href":"/developer/beacon-protocol"},{"title":"Bucketing model","href":"/developer/bucketing"},{"title":"Runtime bindings","href":"/developer/runtime-bindings"},{"title":"SPA lifecycle","href":"/developer/spa-lifecycle"},{"title":"Errors and telemetry","href":"/developer/errors-and-telemetry"},{"title":"Rate limits","href":"/developer/rate-limits"}]},{"group":"Troubleshooting","pages":[{"title":"ABTestly Script Not Working: Installation Troubleshooting","sidebarTitle":"Snippet not firing","href":"/troubleshooting/snippet-not-firing"},{"title":"Why A/B Test Results Look Wrong: SRM, Revenue and Attribution","sidebarTitle":"Numbers look wrong","href":"/troubleshooting/numbers-look-off"},{"title":"Troubleshoot CMP Consent and Deferred A/B Testing","sidebarTitle":"Consent not granting","href":"/troubleshooting/consent-stuck"},{"title":"Exclude Internal and QA Traffic from A/B Tests","sidebarTitle":"Own visits blocked","href":"/troubleshooting/blocked-ip"},{"title":"A/B Testing Diagnostic Reference: Error Codes and Debug Report","sidebarTitle":"Diagnostic reference","href":"/troubleshooting/diagnostic-reference"}]}]},"basePath":"","title":"Signals overview - ABTestly","buildId":"dpl_41S5Z2jG9QnfDRwN1KZrLdBwj7DM","deploymentId":"dpl_41S5Z2jG9QnfDRwN1KZrLdBwj7DM","dynamics":[],"chunks":[]}