> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abtestly.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Signals overview

> 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.

<Note>
  **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](mailto:support@abtestly.com)** so we can fix the page.
</Note>

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.**

## The four steps

<CardGroup cols={2}>
  <Card title="Scan a page" icon="magnifying-glass" href="/signals/scan-a-page">
    A browser extension captures the page from your own live site,
    desktop and mobile. Walk several steps of a funnel in one pass.
  </Card>

  <Card title="Connect Google Analytics" icon="chart-line" href="/signals/connect-google-analytics">
    One click, read only. Adds a behavioral second signal so ideas can
    be confirmed by what visitors actually do.
  </Card>

  <Card title="Read a scan" icon="list-check" href="/signals/read-a-scan">
    The idea board. Ranked by a PXL score, grouped into campaigns,
    triaged New, Approve, or Dismiss.
  </Card>

  <Card title="Build a test from an idea" icon="flask" href="/signals/build-a-test">
    Build this creates a real experiment draft, prefilled from the
    hypothesis. Its result feeds back into the next scan.
  </Card>
</CardGroup>

## Two signals, and honesty about them

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](/signals/connect-google-analytics)
adds a second, independent signal: 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.

An idea is marked **Test ready** only when a second independent signal
confirms what the structure suggests. Until then it stays **Validation
required**: 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.

<Warning>
  A Test ready badge means two signals agree, not that the test will
  win. Nothing predicts a winner except running the experiment. Signals
  finds the strong candidates. The [results
  page](/results/reading-a-result) settles them.
</Warning>

## The closed loop

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.

<div className="abt-signals-pipeline">
  <div className="audit">
    <div className="pipe-cap">
      <span>Evidence in · three parallel streams</span>
      <span className="r">Reasoning · narrowed to a ranked backlog</span>
    </div>

    <div className="pipe-diagram">
      <div className="pipe-inputs">
        <a className="pnode" href="#stage-intake">
          <span className="pn-ic">
            <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round">
              <path d="M12 3v18M3 8h6M3 16h6M15 8h6M15 16h6" />
            </svg>
          </span>

          <div className="pn-col"><span className="pn-n">01 · Intake</span><div className="pn-t">Site & business context</div><div className="pn-tags"><span className="pn-tag">URL plus context</span><span className="pn-tag">connect GA4</span><span className="pn-tag b">sets the tier</span></div></div>
        </a>

        <a className="pnode" href="#stage-capture">
          <span className="pn-ic">
            <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round">
              <rect x="3" y="4" width="18" height="14" rx="2" />

              <path d="M3 8h18M8 21h8" />
            </svg>
          </span>

          <div className="pn-col"><span className="pn-n">02 · Capture</span><div className="pn-t">DOM, renders, funnel walks</div><div className="pn-tags"><span className="pn-tag b">20 plus DOM signals</span><span className="pn-tag">desktop and mobile</span><span className="pn-tag">throttled view</span></div></div>
        </a>

        <a className="pnode" href="#stage-behaviour">
          <span className="pn-ic">
            <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round">
              <path d="M3 3v18h18" />

              <rect x="7" y="11" width="3" height="6" />

              <rect x="13" y="7" width="3" height="10" />
            </svg>
          </span>

          <div className="pn-col"><span className="pn-n">03 · Behaviour</span><div className="pn-t">GA4 funnel and drop off</div><div className="pn-tags"><span className="pn-tag">device CVR and channels</span><span className="pn-tag">funnel drop off</span></div></div>
        </a>
      </div>

      <div className="pipe-merge" aria-hidden="true">
        <svg className="pm-h" viewBox="0 0 50 100" preserveAspectRatio="none">
          <path d="M2 16 C 28 16 24 50 48 50" vectorEffect="non-scaling-stroke" />

          <path d="M2 50 H 48" vectorEffect="non-scaling-stroke" />

          <path d="M2 84 C 28 84 24 50 48 50" vectorEffect="non-scaling-stroke" />
        </svg>

        <svg className="pm-v" viewBox="0 0 120 40" preserveAspectRatio="none">
          <path d="M20 2 C 20 24 60 16 60 38" vectorEffect="non-scaling-stroke" />

          <path d="M60 2 L 60 38" vectorEffect="non-scaling-stroke" />

          <path d="M100 2 C 100 24 60 16 60 38" vectorEffect="non-scaling-stroke" />
        </svg>
      </div>

      <div className="pchain">
        <a className="pnode is-hub" href="#stage-payload">
          <div className="pn-head"><span className="pn-ic"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round"><path d="M4 7h6l6 5" /><path d="M4 17h6l6-5" /><circle cx="18" cy="12" r="2" fill="currentColor" stroke="none" /></svg></span><span className="pn-n">04 · Payload</span></div>
          <div className="pn-t">Multimodal payload assembled</div><div className="pn-d">Three image blocks plus structured evidence, combined into one prompt.</div><div className="pn-tags"><span className="pn-tag">3 images + text</span><span className="pn-tag">vision reconciled</span></div>
        </a>
      </div>

      <div className="pipe-arrow">
        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round">
          <path d="M5 12h14M13 6l6 6-6 6" />
        </svg>
      </div>

      <div className="pchain">
        <a className="pnode" href="#stage-generation">
          <div className="pn-head"><span className="pn-ic"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round"><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" /></svg></span><span className="pn-n">05 · Generation</span></div>
          <div className="pn-t">Grounded hypotheses</div><div className="pn-d">Each tied to a behavioral mechanism and a citation; thin evidence is labeled, not inflated.</div><div className="pn-tags"><span className="pn-tag b">23 fields</span><span className="pn-tag b">PXL 0 to 14</span><span className="pn-tag">5 CRO pillars</span><span className="pn-tag">two signal gate</span></div>
        </a>
      </div>

      <div className="pipe-arrow">
        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round">
          <path d="M5 12h14M13 6l6 6-6 6" />
        </svg>
      </div>

      <div className="pchain">
        <a className="pnode is-fals" href="#stage-falsification">
          <div className="pn-head"><span className="pn-ic"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round"><path d="M12 9v4M12 17h.01" /><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" /></svg></span><span className="pn-n">06 · Falsification</span></div>
          <div className="pn-t">Argued against itself</div><div className="pn-d">Failure mode, confounder, alternative, and the test that settles it.</div><div className="pn-tags"><span className="pn-tag q">adversarial second pass</span></div>
        </a>
      </div>

      <div className="pipe-arrow">
        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round">
          <path d="M5 12h14M13 6l6 6-6 6" />
        </svg>
      </div>

      <div className="pchain">
        <a className="pnode is-out" href="#stage-output">
          <div className="pn-head"><span className="pn-ic"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round"><path d="M5 4h11l3 3v13H5z" /><path d="M9 9h6M9 13h6M9 17h4" /></svg></span><span className="pn-n">07 · Output</span></div>
          <div className="pn-t">23 field hypotheses, ranked</div><div className="pn-d">Ordered by PXL, each with its tier, opportunity size and a tracking spec.</div><div className="pn-tags"><span className="pn-tag b">PXL ranked</span><span className="pn-tag">6 confidence tiers</span><span className="pn-tag">ready to build</span></div>
        </a>
      </div>

      <div className="pipe-return" aria-hidden="true" />
    </div>

    <div className="pipe-loop" aria-label="Feedback loop: experiment outcomes feed back as priors for the next scan">
      <span className="pl-to">into 01 · Intake</span>
      <span className="pl-from">from 07 · Output</span>

      <div className="pl-bracket" />

      <span className="pl-arrow" />

      <span className="pl-dot" />

      <span className="pl-tag"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.9" strokeLinecap="round" strokeLinejoin="round"><path d="M3 12a9 9 0 0 1 15-6.7L21 8" /><path d="M21 3v5h-5" /><path d="M21 12a9 9 0 0 1-15 6.7L3 16" /><path d="M3 21v-5h5" /></svg>Outcomes feed back as priors for the next scan</span>
    </div>

    <div className="pipe-foot"><span><b>A few minutes</b> · end to end</span><span>It produces the backlog · <b>it never runs your test</b></span></div>
  </div>
</div>

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](/signals/build-a-test) for how the
handoff works.

## Inside a scan, step by step

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.

<div id="stage-intake" className="sig-anchor" />

### 01 · Intake

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 it reads real behaviour; skip it and the scan stays structural, working
only from what it can see on the page. It also confirms the page is on your own
site before it runs.

<div id="stage-capture" className="sig-anchor" />

### 02 · Capture

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.

<div id="stage-behaviour" className="sig-anchor" />

### 03 · Behaviour

If you connected GA4, the scan reads where real visitors actually drop off. That
is the behavioural half of every recommendation: 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 behaviour agrees with
what the page showed, the two signal rule.

<div id="stage-payload" className="sig-anchor" />

### 04 · Payload

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.

<div id="stage-generation" className="sig-anchor" />

### 05 · Generation

Now the model proposes ideas that speak to the problem you named, each grounded
in a behavioural mechanism and scored, not guessed. Every idea arrives as a
structured hypothesis with 23 fields behind it, among them a PXL score from 0 to
14, the effort, a research citation and a tracking spec. Each one 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.

<div id="stage-falsification" className="sig-anchor" />

### 06 · Falsification

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, so a weak idea cannot arrive dressed as a strong one.

<div id="stage-output" className="sig-anchor" />

### 07 · Output

What comes back is a ranked backlog, ordered by that PXL score so the best return
for the effort sits at the top. Each item carries its confidence tier, a rough
size for the opportunity, the effort, a suggested run time, and the tracking you
would need to set up. Confidence runs across six tiers, from verified down to
purely structural, so you can see how much weight any one recommendation should
carry. Signals writes the backlog and the plan; it never starts the test for
you, so what ships stays your call.

## What Signals does not do

* **It does not run tests on its own.** Nothing goes live until you
  click Build this, fill in the details, and start the experiment
  yourself.
* **It does not fabricate numbers.** No statistic appears unless the
  connected data supports it.
* **It does not need your passwords.** The scan runs in your own
  browser, on your own logged in session. See [Scan a
  page](/signals/scan-a-page).

## Where to go next

<CardGroup cols={2}>
  <Card title="Run your first scan" icon="play" href="/signals/scan-a-page">
    Install the extension and capture a page in a couple of minutes.
  </Card>

  <Card title="Add the behavioral signal" icon="link" href="/signals/connect-google-analytics">
    Connect GA4, read only, so ideas can reach Test ready.
  </Card>
</CardGroup>
