Geo is looked up at the edge (GET /g) once per session, cached, and
served from Cloudflare’s country/region/city data. Bounded wait of
250 ms, if the lookup times out, the visitor is treated as
“unknown country” and geo-dependent rules do not match. See
Geo for the failure-mode details.
Cookie value, read a cookie by name, match on its value.
JavaScript condition, a boolean expression you write. Evaluated
on the page each time the audience is checked.
JavaScript conditions run in the same context as your other page
scripts, and are evaluated with new Function, so they need
unsafe-eval in your CSP if you have one. So does variation
JavaScript, so avoiding these conditions does not on its own keep
unsafe-eval out of your policy. See
Content Security Policy.
Prefer a cookie or a data attribute where you can anyway, they are
easier to reason about.
If your instinct is “match on URL”, that is a Location rule, not an
Audience rule. See URL rules.If your instinct is “match on the visitor”, it is Audience. Everything
else on this page.
You can define an Audience inline on an experiment, or save one under
Site → Audiences to reuse. See
Saved lists for when to reach for a saved
Audience.
An Audience that never matches, because a rule references a cookie
that does not exist, or a JavaScript condition that always throws.
silently excludes every visitor. The experiment then looks like it
“is not running”. If yours seems to have zero exposures after a
sensible amount of time, walk the audience rules one by one against a
preview link. When an experiment does not match
the page you are on, the preview badge says so directly. Nothing today
breaks an audience down rule by rule, so narrow it by disabling rules
until the experiment starts matching.
Last modified on September 9, 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":""},"chroma":{"liveDeploymentHistoryId":"6ab639727e9a03c18a5151a1","collectionId":"07e21d16-5bbf-465a-a29a-86ea6cdb120f","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ab639727e9a03c18a5151a1"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ab639727e9a03c18a5151a1","clientVersion":"0.0.4021","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":"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":"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":"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":"byok-sep-25","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":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","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}],"googleFontsInlined":false},"customCss":[{"filePath":"signals-pipeline.css","content":"@keyframes abtPipeMergeFlow{to{stroke-dashoffset:-14}}@keyframes abtPipeBeat{0%,to{opacity:0;transform:scale(.965)}6%{opacity:.9;transform:scale(1.004)}11%{opacity:1;transform:scale(1.012)}18%{opacity:.55;transform:scale(1.022)}26%{opacity:0;transform:scale(1.032)}}@keyframes abtPipeArrowGlide{0%,26%,to{opacity:.4;transform:translateX(-3px);color:var(--ink-5)}7%{opacity:1;transform:translateX(2px);color:var(--brand)}16%{opacity:.6;transform:translateX(3px);color:var(--brand)}}@keyframes abtReturnFlow{0%,44%{top:calc(100% - 8px);opacity:0}52%{top:calc(100% - 8px);opacity:1}88%{top:0;opacity:1}95%,to{top:0;opacity:0}}@keyframes abtPlLoopBeat{0%,50%,90%,to{opacity:.45}60%,82%{opacity:.95}}@keyframes abtPlLoopDot{0%,52%{left:calc(100% - 18px);opacity:0}57%{left:calc(100% - 18px);opacity:1}80%{left:9px;opacity:1}86%,to{left:9px;opacity:0}}.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 ::after,.abt-signals-pipeline ::before{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%),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:.05em;text-transform:uppercase;color:var(--brand-700);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;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:.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:-.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 .pn-col,.abt-signals-pipeline .pn-head,.abt-signals-pipeline .pnode{min-width:0}.abt-signals-pipeline .pn-d,.abt-signals-pipeline .pn-t{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:.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-cap span,.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(.37,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:.13s}.abt-signals-pipeline .audit .pipe-inputs .pnode:nth-child(3)::after{animation-delay:.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(.37,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}}.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:.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:.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-arrow,.abt-signals-pipeline .pl-bracket,.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(.45,.05,.3,1) infinite}.abt-signals-pipeline .pipe-return::before{animation:abtReturnFlow 8.5s cubic-bezier(.45,.05,.3,1) infinite}}.abt-signals-pipeline a.pnode{text-decoration:none;color:inherit;cursor:pointer}.abt-signals-pipeline .pipe-diagram .pnode:focus-within,.abt-signals-pipeline .pipe-diagram .pnode:hover{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 .16s var(--ease),box-shadow .16s var(--ease)}}.sig-anchor{display:block;height:0;scroll-margin-top:5rem}"}],"page":{"pagePath":"targeting/audiences","slug":"/targeting/audiences","pageMetadata":{"title":"Audiences","description":"Every visitor rule ABTestly ships. Device, geo, source, history, and a handful of custom escape hatches.","href":"/targeting/audiences"},"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: \"Every visitor rule ABTestly ships. Device, geo, source, history, and a handful of custom escape hatches.\"\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`,code:`code`,li:`li`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Frame,Heading,OptimizedImage,Warning}=_components;if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`An Audience is a set of visitor rules. Rules combine with AND. Leave\nthe Audience blank on an experiment to include everyone.`}),`\n`,_jsx(Frame,{caption:`Saved Audiences under Site → Audiences.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/abtestly/pnpJFDTFa50Ks6SL/images/audiences-list.png?fit=max\u0026auto=format\u0026n=pnpJFDTFa50Ks6SL\u0026q=85\u0026s=6e6ed97b998a9ba149b076e4d50efdb1`,alt:`Audiences list`,\"data-og-width\":`2400`,width:`2400`,\"data-og-height\":`1141`,height:`1141`,\"data-path\":`images/audiences-list.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/abtestly/pnpJFDTFa50Ks6SL/images/audiences-list.png?w=280\u0026fit=max\u0026auto=format\u0026n=pnpJFDTFa50Ks6SL\u0026q=85\u0026s=0db672b8a0876cc027b700e367f0eba1 280w, https://mintcdn.com/abtestly/pnpJFDTFa50Ks6SL/images/audiences-list.png?w=560\u0026fit=max\u0026auto=format\u0026n=pnpJFDTFa50Ks6SL\u0026q=85\u0026s=77f3f3af9bec51853c8c49783b11f2c6 560w, https://mintcdn.com/abtestly/pnpJFDTFa50Ks6SL/images/audiences-list.png?w=840\u0026fit=max\u0026auto=format\u0026n=pnpJFDTFa50Ks6SL\u0026q=85\u0026s=72f66d42b53c93857fc34785947a66e8 840w, https://mintcdn.com/abtestly/pnpJFDTFa50Ks6SL/images/audiences-list.png?w=1100\u0026fit=max\u0026auto=format\u0026n=pnpJFDTFa50Ks6SL\u0026q=85\u0026s=cd5d5761f49896e0e95e159d25264329 1100w, https://mintcdn.com/abtestly/pnpJFDTFa50Ks6SL/images/audiences-list.png?w=1650\u0026fit=max\u0026auto=format\u0026n=pnpJFDTFa50Ks6SL\u0026q=85\u0026s=ba2d89fd57cdd580e47bc7ee58e1459a 1650w, https://mintcdn.com/abtestly/pnpJFDTFa50Ks6SL/images/audiences-list.png?w=2500\u0026fit=max\u0026auto=format\u0026n=pnpJFDTFa50Ks6SL\u0026q=85\u0026s=0e5237e0adef924ebef04e8c36d14bb8 2500w`})}),`\n`,_jsx(Heading,{level:`2`,id:`visitor-category`,children:`Visitor category`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Device`}),`, Desktop, Mobile, Tablet. Multi-select.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Browser`}),`, Chrome, Safari, Firefox, Edge, Opera, others.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Operating system`}),`, Windows, macOS, iOS, Android, Linux, others.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Language`}),`, the visitor’s preferred `,_jsx(_components.code,{children:`Accept-Language`}),`.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Device/browser/OS are derived server-side at ingest from the user\nagent. Client-side spoofing does not fool the categorization.`}),`\n`,_jsx(Heading,{level:`2`,id:`geo`,children:`Geo`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Country`}),`, multi-select from the ISO list.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Region`}),`, case-insensitive text match.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`City`}),`, case-insensitive text match.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Geo is looked up at the edge (`,_jsx(_components.code,{children:`GET /g`}),`) once per session, cached, and\nserved from Cloudflare’s country/region/city data. Bounded wait of\n250 ms, if the lookup times out, the visitor is treated as\n“unknown country” and geo-dependent rules do not match. See\n`,_jsx(_components.a,{href:`/targeting/geo`,children:`Geo`}),` for the failure-mode details.`]}),`\n`,_jsx(Heading,{level:`2`,id:`visitor-history`,children:`Visitor history`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`New vs returning`}),`, a 30-minute gap defines a new session.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Visit count`}),`, how many sessions this visitor has had on your\nsite.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Days since last visit`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Pages viewed`}),`, this session.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Has completed goal X`}),`, whether the visitor has ever converted on\na specific goal in your library.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`History rules require the site to have the\n`,_jsx(_components.a,{href:`/developer/spa-lifecycle`,children:`behavioral substrate`}),` turned on. It is on\nby default for sites created after mid-2026.`]}),`\n`,_jsx(Heading,{level:`2`,id:`traffic-source`,children:`Traffic source`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Referrer`}),`, the `,_jsx(_components.code,{children:`document.referrer`}),` header.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`UTM source`}),` / `,_jsx(_components.strong,{children:`medium`}),` / `,_jsx(_components.strong,{children:`campaign`}),` / `,_jsx(_components.strong,{children:`term`}),` / `,_jsx(_components.strong,{children:`content`}),`.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Referrer is bucketed into a friendly source (“google”, “facebook”,\n“direct”) for the picker, but you can also match on the raw hostname.`}),`\n`,_jsx(Heading,{level:`2`,id:`time`,children:`Time`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Day of week`}),`, Mon through Sun, multi-select.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Hour of day`}),`, 0–23, multi-select.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Both are evaluated in your `,_jsx(_components.strong,{children:`project timezone`}),`. Set the timezone\nunder `,_jsx(_components.a,{href:`/settings/general`,children:`Settings → General`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`custom`,children:`Custom`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Cookie value`}),`, read a cookie by name, match on its value.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`JavaScript condition`}),`, a boolean expression you write. Evaluated\non the page each time the audience is checked.`]}),`\n`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`JavaScript conditions run in the same context as your other page\nscripts, and are evaluated with `,_jsx(_components.code,{children:`new Function`}),`, so they need\n`,_jsx(_components.code,{children:`unsafe-eval`}),` in your CSP if you have one. So does variation\nJavaScript, so avoiding these conditions does not on its own keep\n`,_jsx(_components.code,{children:`unsafe-eval`}),` out of your policy. See\n`,_jsx(_components.a,{href:`/install/snippet#content-security-policy`,children:`Content Security Policy`}),`.\nPrefer a cookie or a data attribute where you can anyway, they are\neasier to reason about.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`location-vs-audience`,children:`Location vs Audience`}),`\n`,_jsxs(_components.p,{children:[`If your instinct is “match on URL”, that is a Location rule, not an\nAudience rule. See `,_jsx(_components.a,{href:`/targeting/url-rules`,children:`URL rules`}),`.`]}),`\n`,_jsx(_components.p,{children:`If your instinct is “match on the visitor”, it is Audience. Everything\nelse on this page.`}),`\n`,_jsx(Heading,{level:`2`,id:`saved-audiences`,children:`Saved audiences`}),`\n`,_jsxs(_components.p,{children:[`You can define an Audience inline on an experiment, or save one under\n`,_jsx(_components.strong,{children:`Site → Audiences`}),` to reuse. See\n`,_jsx(_components.a,{href:`/targeting/saved-lists`,children:`Saved lists`}),` for when to reach for a saved\nAudience.`]}),`\n`,_jsx(Heading,{level:`2`,id:`silent-rule-failures`,children:`Silent rule failures`}),`\n`,_jsxs(_components.p,{children:[`An Audience that never matches, because a rule references a cookie\nthat does not exist, or a JavaScript condition that always throws.\nsilently excludes every visitor. The experiment then looks like it\n“is not running”. If yours seems to have zero exposures after a\nsensible amount of time, walk the audience rules one by one against a\n`,_jsx(_components.a,{href:`/preview/preview-modal`,children:`preview link`}),`. When an experiment does not match\nthe page you are on, the preview badge says so directly. Nothing today\nbreaks an audience down rule by rule, so narrow it by disabling rules\nuntil the experiment starts matching.`]})]})}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":"Audiences","description":"Every visitor rule ABTestly ships. Device, geo, source, history, and a handful of custom escape hatches.","href":"/targeting/audiences"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Visitor category","slug":"visitor-category","depth":2,"children":[]},{"title":"Geo","slug":"geo","depth":2,"children":[]},{"title":"Visitor history","slug":"visitor-history","depth":2,"children":[]},{"title":"Traffic source","slug":"traffic-source","depth":2,"children":[]},{"title":"Time","slug":"time","depth":2,"children":[]},{"title":"Custom","slug":"custom","depth":2,"children":[]},{"title":"Location vs Audience","slug":"location-vs-audience","depth":2,"children":[]},{"title":"Saved audiences","slug":"saved-audiences","depth":2,"children":[]},{"title":"Silent rule failures","slug":"silent-rule-failures","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":"Audiences - ABTestly","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-09T22:05:04.889Z","gitLastModified":"2026-09-09T18:56:45.000Z","originalFileLocation":"targeting/audiences.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=\"Every visitor rule ABTestly ships. Device, geo, source, history, and a handful of custom escape hatches.\">\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=\"Audiences - 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/targeting/audiences\">\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=\"Audiences - 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/targeting/audiences\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/targeting/audiences.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/targeting/audiences#webpage\",\"url\":\"https://docs.abtestly.com/targeting/audiences\",\"name\":\"Audiences\",\"description\":\"Every visitor rule ABTestly ships. Device, geo, source, history, and a handful of custom escape hatches.\",\"dateModified\":\"2026-09-09T18:56:45.000Z\",\"isPartOf\":{\"@id\":\"https://docs.abtestly.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.abtestly.com/targeting/audiences#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.abtestly.com/targeting/audiences#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Target the right visitors\",\"item\":\"https://docs.abtestly.com/targeting/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Audiences\",\"item\":\"https://docs.abtestly.com/targeting/audiences\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.abtestly.com/targeting/audiences#article\",\"headline\":\"Audiences\",\"name\":\"Audiences\",\"description\":\"Every visitor rule ABTestly ships. Device, geo, source, history, and a handful of custom escape hatches.\",\"url\":\"https://docs.abtestly.com/targeting/audiences\",\"mainEntityOfPage\":{\"@id\":\"https://docs.abtestly.com/targeting/audiences#webpage\"},\"image\":\"https://docs.abtestly.com/images/og-image.png\",\"dateModified\":\"2026-09-09T18:56:45.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\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","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","description":"How Locations decide which pages qualify. Operators, negations, and the per-rule case-insensitive toggle.","href":"/targeting/url-rules"},{"title":"Audiences","href":"/targeting/audiences"},{"title":"Geo targeting","description":"Country, region, and city, looked up at the edge, cached per session, bounded wait so a slow lookup does not stall the page.","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","href":"/methodology/sample-ratio-mismatch"}]},{"group":"Signals","pages":[{"title":"Signals overview","href":"/signals/overview"},{"title":"Scan a page","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"}]}]},"title":"Audiences - ABTestly","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-CIbhtp2j.js","DynamicMarkdown-CtpgKJwj.js","zoom-image-lightbox-CVZVK4hN.js","lightbox-handle-r17bVUz3.js"]}