Where split testing actually runs in Senderz, how traffic is divided, and how to read the A/B Tests screen without over-reading it.
Split testing in Senderz happens in two places, and neither of them is the A/B Tests screen.
An automation can hold an A/B test step that sends contacts down two different paths.
A popup can hold up to four variations of itself.
A/B Tests in the sidebar, under Analytics & insights, is a register. It lists the tests your workspace has running and shows what has been recorded against each one. You cannot build a test there.
Read this page first if you are trying to work out where to set a test up.
The two builders are documented in full elsewhere: flow
steps for the automation split, and popup testing
and results for popup variations.
An A/B test step splits contacts between Path A and Path B. Two paths
only. Registers itself on the A/B Tests screen.
Popups
Two to four variations of the whole popup, split evenly. Results live in the
popup builder, not on the A/B Tests screen.
Campaigns
Not available. A campaign sends one version to its whole audience. There is
no subject line or content split in the campaign wizard.
The campaigns list has an A/B test filter chip, and the A/B Tests screen
has a Campaign source filter. Neither has anything to show, because
nothing in the product can put variants on a campaign yet. Use an automation
if you need a split send.
The A/B test step lives in the Logic group of the automation palette.
1
Drop the A/B test step where the split should happen
Everything before the step is shared. Everything after it is what you are
testing.
2
Connect both branches
The step has two outgoing paths, A and B. Build the steps you want to
compare under each one. An automation will not publish with only one branch
connected.
3
Choose a goal metric
Goal metric is the thing you are trying to move. The choices are Open
rate, Click rate, Conversion (Placed Order), Revenue per recipient, and
Custom event. Pick Custom event and you also name the event.
4
Set the split
The Split slider is the percentage that goes down Path A. It moves in
steps of 5 and is limited to a range of 10 to 90, so you can weight a test
but you cannot send everyone one way.
5
Set a duration or a minimum sample
Duration (hours) and Minimum sample sit side by side. You need at
least one of the two filled in before the automation will publish.
6
Save the automation
Saving is what registers the test. The record appears on the A/B Tests
screen straight away, named after the automation and the step, with a
status of Running.
Anything you can put in an automation. The split is a fork in the path, not a
field-by-field comparison, so Path A and Path B can differ by as much or as
little as you like.
Comparison
How to build it
Two subject lines
One email step on each branch, same template content, different subject
Two templates
A different template on each branch’s email step
Email against SMS
An email step on one branch, an SMS step on the other
Send immediately against waiting a day
A wait step on one branch before the message
One message against two
A single email on A, an email plus a follow-up on B
Change one thing at a time. If Path A differs from Path B in subject line
and send delay, a difference in the result tells you nothing about which
change caused it.
A contact is assigned to a branch the first time they reach the step, and the
assignment is stored on their journey.
Assignment is sticky. Once someone is on Path A they stay on Path A for
that journey. Re-running the step does not reroute them.
The split is respected as a probability, not a queue. With a 50/50 split
and 100 contacts you will get close to 50 each, not exactly 50 each. Small
audiences drift further from the setting than large ones.
A contact is counted once. The participant count on the A/B Tests screen
goes up on first assignment only.
Changing the split later only affects contacts who have not been assigned
yet. It does not move anyone who is already on a path.
Open A/B Tests in the sidebar. Every member of the workspace can view it.Four tiles sit above the table: Total tests, Running now, Significant
winners and Aggregate lift. Below them are pill filters for source
(Campaign, Automation, Popup) and status (Running, Completed, Deployed,
Paused), plus a search box that matches on the test name.The table columns:
Column
What it shows
Source
Which surface the test belongs to, with the record name underneath
Test
The goal metric being measured
Type
A short tag for the same thing
Variants
How many variants the record holds. An automation split is always 2
Status
Running, Completed, Deployed or Paused
Participants
How many contacts have been assigned so far
Winner
The recorded winning variant letter, or a dash
Lift
The recorded lift
Confidence
Derived from the recorded p value
Started
The date the record was first created
Click a row to open it. The detail view repeats the header facts, then shows a
card per variant with open rate, click rate, conversion and revenue, and a
winner breakdown by segment underneath.
Senderz does not calculate the winner, the lift, the confidence or the
per-variant cards for an automation test. Those fields exist on the record
and are shown if something fills them in, but nothing in the product computes
them today. In practice an automation test reads no winner, +0% lift
and 0.0% confidence for its whole life, the variant cards say variant
performance data is not yet available, and the four tiles above the table stay
at zero apart from the counts.
Because the screen does not do the maths, compare the two branches directly in
the automation editor.Select a message step on Path A, then the equivalent step on Path B. Each one
shows a Performance card for the last 30 days with sends, opens, clicks,
unsubscribes, orders and revenue. That is the real comparison. See
publishing and monitoring for what
each number on that card means.Two things to keep in mind when you read it:
The card window is the last 30 days, not the life of the test. A test that
has been running longer is not fully represented.
Compare rates, not totals. An uneven split makes the totals uneven by
design.
There is no automatic rollout. Moving traffic to the better branch is a manual
edit to the automation.
1
Confirm the difference is real
Use the per-step Performance cards, and check the participant count is large
enough that the gap is not noise. The sample size calculator below gives you
a target.
2
Move the traffic in the automation
Open the automation and either slide the split as far as it goes toward the
winning path, or remove the A/B test step and connect the winning branch
directly to the step above it. The slider stops at 90, so it cannot send
100% one way on its own.
3
Mark the record, if you want the history
On the A/B Tests screen, open the test and press Deploy the winner. This
marks the record as Deployed. It is a bookkeeping action.
Deploy the winner does not change any sending. It sets the record’s status
and nothing else. The automation keeps splitting traffic exactly as it did
before until you edit the automation itself. The button is also disabled until
a winner has been recorded on the test, which for an automation test means it
stays disabled.
The Automatically promote winner toggle on the A/B test step is saved with
the automation and shown in the inspector, but nothing acts on it. Traffic
does not move on its own. Treat it as a note to yourself until it is wired up.
The same is true of Duration (hours) and Minimum sample. They are
required before publishing and they are stored with the test, but Senderz does
not stop the test or change its status when either one is reached. Diary the end
date yourself.
The result is the number of participants needed per variant, so a two-way
split needs roughly double that in total audience.
The number is driven by the base rate and the lift you want to detect. Moving
the confidence slider changes the sentence under the number but not the number
itself, so read the result as a rough floor rather than a precise threshold.
Popups do not use the A/B test step and do not appear on the A/B Tests screen.
The Popup source filter has nothing to show.A popup test is set up in the popup builder’s own A/B panel, holds two to four
variations of the entire popup, splits traffic evenly with no weighting, and
reports views, sign-ups and rate per variation right there. It also crowns a
leading variation once one is ahead on conversion rate with at least 100 views,
and Decide winner genuinely promotes that variation’s content onto the
popup.Full detail in popup testing and results.
The A/B test step has Path A and Path B, and no more. The record on the A/B
Tests screen can hold up to four variants, and shows an MVT tag when it does,
but an automation cannot produce more than two.
Removing the step does not remove the record
Delete the A/B test step from an automation and its record stays on the A/B
Tests screen. There is no delete action on the screen, so old records
accumulate. Use the search box and the status filter to keep the list
readable.
Saving the automation resets the status to Running
Every save of an automation refreshes its A/B test records, and that
includes setting the status back to Running. If you mark a test Deployed and
then edit the automation, the status will read Running again.
The test name comes from the automation
The record is named after the automation and the A/B test step’s title.
Rename the step to something descriptive before you save, or every test in a
busy workspace ends up called the same thing.
The record appears before you publish
Saving an automation registers the test, so a draft automation’s split shows
as Running on the A/B Tests screen even though nobody is being enrolled yet.
Check the automation’s own status to know whether it is live.
Asking the Marketing Agent to set one up
Senderz AI can register an A/B test record for you, with a name, source,
the variable under test, a hypothesis and a variant count. It creates the
record only. It does not build the split step or move any traffic, so you
still have to open the automation and wire the branches.
The A/B test step in context, alongside conditional splits and wait timers.
Publishing and monitoring
Per-step performance cards, which is where you actually compare the two
branches.
Popup testing and results
Popup variations, the even split, the leading badge and Decide winner.
Campaigns
The five-step wizard, and why there is no split step in it.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Senderz","description":"Senderz is the Israel-first marketing platform for email, SMS, web push and voice. Documentation, guides, integrations and API reference.","colors":{"primary":"#141414","light":"#fafafa","dark":"#737373"},"logo":{"light":"https://mintcdn.com/senderz/TYfOlOCqzxvvnafR/logo/logo-light.png?fit=max\u0026auto=format\u0026n=TYfOlOCqzxvvnafR\u0026q=85\u0026s=716b2d481f50aa8a6539edb6be85247f","dark":"https://mintcdn.com/senderz/TYfOlOCqzxvvnafR/logo/logo-dark.png?fit=max\u0026auto=format\u0026n=TYfOlOCqzxvvnafR\u0026q=85\u0026s=fd55875da479e5492f832c94aadcaa4b","href":"https://senderz.app"},"favicon":"https://mintcdn.com/senderz/TYfOlOCqzxvvnafR/favicon.ico?fit=max\u0026auto=format\u0026n=TYfOlOCqzxvvnafR\u0026q=85\u0026s=536e1b773b66d5a4d4bdd0491fce1c5a","appearance":{"default":"light"},"background":{"color":{"light":"#f6f6f6","dark":"#0a0a0a"}},"navbar":{"links":[{"href":"mailto:hello@senderz.app","label":"Support"},{"href":"https://status.senderz.app","label":"Status"}],"primary":{"type":"button","label":"Open Senderz","href":"https://app.senderz.app"}},"footer":{"socials":{"website":"https://senderz.app","x":"https://x.com/senderz","linkedin":"https://www.linkedin.com/company/senderz"},"links":[{"header":"Product","items":[{"label":"Dashboard","href":"https://app.senderz.app"},{"label":"Pricing","href":"https://senderz.app/pricing"}]},{"header":"Legal","items":[{"label":"Terms","href":"https://app.senderz.app/terms"},{"label":"Privacy","href":"https://app.senderz.app/privacy"},{"label":"Acceptable use","href":"https://app.senderz.app/acceptable-use"}]}]},"search":{"prompt":"Search the Senderz docs"},"styling":{"eyebrows":"breadcrumbs","codeblocks":"system","latex":false},"navigation":{"languages":[{"language":"he","default":true,"href":"he/getting-started/introduction"},{"language":"en","href":"en/getting-started/introduction"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"senderz","hasAudioNarration":false,"actualSubdomain":"senderz","customDomains":["docs.senderz.app"],"gitSource":{"type":"github","owner":"appdever01","repo":"sender","deployBranch":"docs","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ac293e5f04d9190a8c6d0e9","clientVersion":"0.0.4124","searchFilterCounts":[{"language":"en","tag":"Guides","count":52},{"language":"en","tag":"Integrations","count":18},{"language":"en","tag":"Campaigns \u0026 automation","count":17},{"language":"en","tag":"API reference","count":15},{"language":"en","tag":"Public API","count":8},{"language":"en","tag":"E-commerce","count":8},{"language":"en","tag":"Audience","count":7},{"language":"en","tag":"Channels","count":6},{"language":"en","tag":"Account","count":5},{"language":"en","tag":"Automation \u0026 no-code","count":5},{"language":"he","tag":"מדריך","count":4},{"language":"he","tag":"אינטגרציות","count":4},{"language":"he","tag":"סקירה","count":4},{"language":"he","tag":"צעדים ראשונים","count":3},{"language":"he","tag":"רגולציה בישראל","count":1}]},"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":"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},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"en/messaging/ab-tests","slug":"/en/messaging/ab-tests","pageMetadata":{"title":"A/B tests","description":"Where split testing actually runs in Senderz, how traffic is divided, and how to read the A/B Tests screen without over-reading it.","icon":"vial","href":"/en/messaging/ab-tests"},"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: \"Where split testing actually runs in Senderz, how traffic is divided, and how to read the A/B Tests screen without over-reading it.\"\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`,em:`em`,li:`li`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Card,CardGroup,Heading,Info,Note,ParamField,Step,Steps,Table,Tip,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!ParamField)_missingMdxReference(`ParamField`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Split testing in Senderz happens in two places, and neither of them is the `,_jsx(_components.strong,{children:`A/B Tests`}),` screen.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`An `,_jsx(_components.strong,{children:`automation`}),` can hold an A/B test step that sends contacts down two different paths.`]}),`\n`,_jsxs(_components.li,{children:[`A `,_jsx(_components.strong,{children:`popup`}),` can hold up to four variations of itself.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`A/B Tests`}),` in the sidebar, under `,_jsx(_components.strong,{children:`Analytics \u0026 insights`}),`, is a register. It lists the tests your workspace has running and shows what has been recorded against each one. You cannot build a test there.`]}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`Read this page first if you are trying to work out `,_jsx(_components.em,{children:`where`}),` to set a test up.\nThe two builders are documented in full elsewhere: `,_jsx(_components.a,{href:`/en/messaging/flows/steps`,children:`flow\nsteps`}),` for the automation split, and `,_jsx(_components.a,{href:`/en/messaging/popup-testing-and-analytics`,children:`popup testing\nand results`}),` for popup variations.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`where-a-test-can-run`,children:`Where a test can run`}),`\n`,_jsxs(CardGroup,{cols:3,children:[_jsx(Card,{title:`Automations`,icon:`code-branch`,href:`/en/messaging/flows/steps`,children:_jsxs(_components.p,{children:[`An `,_jsx(_components.strong,{children:`A/B test`}),` step splits contacts between Path A and Path B. Two paths\nonly. Registers itself on the A/B Tests screen.`]})}),_jsx(Card,{title:`Popups`,icon:`window-restore`,href:`/en/messaging/popup-testing-and-analytics`,children:_jsx(_components.p,{children:`Two to four variations of the whole popup, split evenly. Results live in the\npopup builder, not on the A/B Tests screen.`})}),_jsx(Card,{title:`Campaigns`,icon:`ban`,children:_jsx(_components.p,{children:`Not available. A campaign sends one version to its whole audience. There is\nno subject line or content split in the campaign wizard.`})})]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`The campaigns list has an `,_jsx(_components.strong,{children:`A/B test`}),` filter chip, and the A/B Tests screen\nhas a `,_jsx(_components.strong,{children:`Campaign`}),` source filter. Neither has anything to show, because\nnothing in the product can put variants on a campaign yet. Use an automation\nif you need a split send.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`setting-up-a-test-in-an-automation`,children:`Setting up a test in an automation`}),`\n`,_jsxs(_components.p,{children:[`The A/B test step lives in the `,_jsx(_components.strong,{children:`Logic`}),` group of the automation palette.`]}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Drop the A/B test step where the split should happen`,children:_jsx(_components.p,{children:`Everything before the step is shared. Everything after it is what you are\ntesting.`})}),_jsx(Step,{title:`Connect both branches`,children:_jsx(_components.p,{children:`The step has two outgoing paths, A and B. Build the steps you want to\ncompare under each one. An automation will not publish with only one branch\nconnected.`})}),_jsx(Step,{title:`Choose a goal metric`,children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Goal metric`}),` is the thing you are trying to move. The choices are Open\nrate, Click rate, Conversion (Placed Order), Revenue per recipient, and\nCustom event. Pick Custom event and you also name the event.`]})}),_jsx(Step,{title:`Set the split`,children:_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`Split`}),` slider is the percentage that goes down Path A. It moves in\nsteps of 5 and is limited to a range of 10 to 90, so you can weight a test\nbut you cannot send everyone one way.`]})}),_jsx(Step,{title:`Set a duration or a minimum sample`,children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Duration (hours)`}),` and `,_jsx(_components.strong,{children:`Minimum sample`}),` sit side by side. You need at\nleast one of the two filled in before the automation will publish.`]})}),_jsx(Step,{title:`Save the automation`,children:_jsx(_components.p,{children:`Saving is what registers the test. The record appears on the A/B Tests\nscreen straight away, named after the automation and the step, with a\nstatus of Running.`})})]}),`\n`,_jsx(Heading,{level:`3`,id:`what-you-can-vary`,children:`What you can vary`}),`\n`,_jsx(_components.p,{children:`Anything you can put in an automation. The split is a fork in the path, not a\nfield-by-field comparison, so Path A and Path B can differ by as much or as\nlittle as you like.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Comparison`}),_jsx(_components.th,{children:`How to build it`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Two subject lines`}),_jsx(_components.td,{children:`One email step on each branch, same template content, different subject`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Two templates`}),_jsx(_components.td,{children:`A different template on each branch’s email step`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Email against SMS`}),_jsx(_components.td,{children:`An email step on one branch, an SMS step on the other`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Send immediately against waiting a day`}),_jsx(_components.td,{children:`A wait step on one branch before the message`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`One message against two`}),_jsx(_components.td,{children:`A single email on A, an email plus a follow-up on B`})]})]})]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`Change one thing at a time. If Path A differs from Path B in subject line\n`,_jsx(_components.em,{children:`and`}),` send delay, a difference in the result tells you nothing about which\nchange caused it.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`publish-checks`,children:`Publish checks`}),`\n`,_jsx(_components.p,{children:`Publishing is blocked until the step is complete.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Check`}),_jsx(_components.th,{children:`Fix`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Fewer than two branches connected`}),_jsx(_components.td,{children:`Wire both Path A and Path B`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`No goal metric`}),_jsx(_components.td,{children:`Choose one from the dropdown`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Split outside 10 to 90`}),_jsx(_components.td,{children:`Move the slider back into range`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`No duration and no minimum sample`}),_jsx(_components.td,{children:`Fill in one of the two`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`how-traffic-is-divided`,children:`How traffic is divided`}),`\n`,_jsx(_components.p,{children:`A contact is assigned to a branch the first time they reach the step, and the\nassignment is stored on their journey.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Assignment is sticky.`}),` Once someone is on Path A they stay on Path A for\nthat journey. Re-running the step does not reroute them.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`The split is respected as a probability`}),`, not a queue. With a 50/50 split\nand 100 contacts you will get close to 50 each, not exactly 50 each. Small\naudiences drift further from the setting than large ones.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`A contact is counted once.`}),` The participant count on the A/B Tests screen\ngoes up on first assignment only.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Changing the split later`}),` only affects contacts who have not been assigned\nyet. It does not move anyone who is already on a path.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`the-a/b-tests-screen`,children:`The A/B Tests screen`}),`\n`,_jsxs(_components.p,{children:[`Open `,_jsx(_components.strong,{children:`A/B Tests`}),` in the sidebar. Every member of the workspace can view it.`]}),`\n`,_jsxs(_components.p,{children:[`Four tiles sit above the table: `,_jsx(_components.strong,{children:`Total tests`}),`, `,_jsx(_components.strong,{children:`Running now`}),`, `,_jsx(_components.strong,{children:`Significant\nwinners`}),` and `,_jsx(_components.strong,{children:`Aggregate lift`}),`. Below them are pill filters for source\n(Campaign, Automation, Popup) and status (Running, Completed, Deployed,\nPaused), plus a search box that matches on the test name.`]}),`\n`,_jsx(_components.p,{children:`The table columns:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Column`}),_jsx(_components.th,{children:`What it shows`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Source`}),_jsx(_components.td,{children:`Which surface the test belongs to, with the record name underneath`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Test`}),_jsx(_components.td,{children:`The goal metric being measured`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Type`}),_jsx(_components.td,{children:`A short tag for the same thing`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Variants`}),_jsx(_components.td,{children:`How many variants the record holds. An automation split is always 2`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Status`}),_jsx(_components.td,{children:`Running, Completed, Deployed or Paused`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Participants`}),_jsx(_components.td,{children:`How many contacts have been assigned so far`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Winner`}),_jsx(_components.td,{children:`The recorded winning variant letter, or a dash`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Lift`}),_jsx(_components.td,{children:`The recorded lift`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Confidence`}),_jsx(_components.td,{children:`Derived from the recorded p value`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Started`}),_jsx(_components.td,{children:`The date the record was first created`})]})]})]}),`\n`,_jsx(_components.p,{children:`Click a row to open it. The detail view repeats the header facts, then shows a\ncard per variant with open rate, click rate, conversion and revenue, and a\nwinner breakdown by segment underneath.`}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Senderz does not calculate the winner, the lift, the confidence or the\nper-variant cards for an automation test.`}),` Those fields exist on the record\nand are shown if something fills them in, but nothing in the product computes\nthem today. In practice an automation test reads `,_jsx(_components.strong,{children:`no winner`}),`, `,_jsx(_components.strong,{children:`+0% lift`}),`\nand `,_jsx(_components.strong,{children:`0.0% confidence`}),` for its whole life, the variant cards say variant\nperformance data is not yet available, and the four tiles above the table stay\nat zero apart from the counts.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`reading-results-today`,children:`Reading results today`}),`\n`,_jsx(_components.p,{children:`Because the screen does not do the maths, compare the two branches directly in\nthe automation editor.`}),`\n`,_jsxs(_components.p,{children:[`Select a message step on Path A, then the equivalent step on Path B. Each one\nshows a `,_jsx(_components.strong,{children:`Performance`}),` card for the last 30 days with sends, opens, clicks,\nunsubscribes, orders and revenue. That is the real comparison. See\n`,_jsx(_components.a,{href:`/en/messaging/flows/publish-and-monitor`,children:`publishing and monitoring`}),` for what\neach number on that card means.`]}),`\n`,_jsx(_components.p,{children:`Two things to keep in mind when you read it:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The card window is the `,_jsx(_components.strong,{children:`last 30 days`}),`, not the life of the test. A test that\nhas been running longer is not fully represented.`]}),`\n`,_jsxs(_components.li,{children:[`Compare `,_jsx(_components.strong,{children:`rates`}),`, not totals. An uneven split makes the totals uneven by\ndesign.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`deciding-a-winner`,children:`Deciding a winner`}),`\n`,_jsx(_components.p,{children:`There is no automatic rollout. Moving traffic to the better branch is a manual\nedit to the automation.`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Confirm the difference is real`,children:_jsx(_components.p,{children:`Use the per-step Performance cards, and check the participant count is large\nenough that the gap is not noise. The sample size calculator below gives you\na target.`})}),_jsx(Step,{title:`Move the traffic in the automation`,children:_jsx(_components.p,{children:`Open the automation and either slide the split as far as it goes toward the\nwinning path, or remove the A/B test step and connect the winning branch\ndirectly to the step above it. The slider stops at 90, so it cannot send\n100% one way on its own.`})}),_jsx(Step,{title:`Mark the record, if you want the history`,children:_jsxs(_components.p,{children:[`On the A/B Tests screen, open the test and press `,_jsx(_components.strong,{children:`Deploy the winner`}),`. This\nmarks the record as Deployed. It is a bookkeeping action.`]})})]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Deploy the winner does not change any sending.`}),` It sets the record’s status\nand nothing else. The automation keeps splitting traffic exactly as it did\nbefore until you edit the automation itself. The button is also disabled until\na winner has been recorded on the test, which for an automation test means it\nstays disabled.`]})}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`Automatically promote winner`}),` toggle on the A/B test step is saved with\nthe automation and shown in the inspector, but nothing acts on it. Traffic\ndoes not move on its own. Treat it as a note to yourself until it is wired up.`]})}),`\n`,_jsxs(_components.p,{children:[`The same is true of `,_jsx(_components.strong,{children:`Duration (hours)`}),` and `,_jsx(_components.strong,{children:`Minimum sample`}),`. They are\nrequired before publishing and they are stored with the test, but Senderz does\nnot stop the test or change its status when either one is reached. Diary the end\ndate yourself.`]}),`\n`,_jsx(Heading,{level:`2`,id:`sample-size-calculator`,children:`Sample size calculator`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Sample size calc`}),` in the page header opens an estimate of how many contacts\neach branch needs before a result means anything.`]}),`\n`,_jsx(ParamField,{path:`Base conversion rate (%)`,default:`20`,id:`param-base-conversion-rate`,children:_jsx(_components.p,{children:`What the metric you are testing does today, as a percentage.`})}),`\n`,_jsx(ParamField,{path:`Lift you want to detect (%)`,default:`10`,id:`param-lift-you-want-to-detect`,children:_jsx(_components.p,{children:`The relative improvement you care about. A 10% lift on a 20% base rate means\nmoving from 20% to 22%.`})}),`\n`,_jsx(ParamField,{path:`Confidence level (%)`,default:`95`,id:`param-confidence-level`,children:_jsx(_components.p,{children:`Shown in the wording under the result.`})}),`\n`,_jsxs(_components.p,{children:[`The result is the number of participants needed `,_jsx(_components.strong,{children:`per variant`}),`, so a two-way\nsplit needs roughly double that in total audience.`]}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`The number is driven by the base rate and the lift you want to detect. Moving\nthe confidence slider changes the sentence under the number but not the number\nitself, so read the result as a rough floor rather than a precise threshold.`})}),`\n`,_jsx(Heading,{level:`2`,id:`popup-variations-are-a-separate-mechanism`,children:`Popup variations are a separate mechanism`}),`\n`,_jsxs(_components.p,{children:[`Popups do not use the A/B test step and do not appear on the A/B Tests screen.\nThe `,_jsx(_components.strong,{children:`Popup`}),` source filter has nothing to show.`]}),`\n`,_jsxs(_components.p,{children:[`A popup test is set up in the popup builder’s own A/B panel, holds two to four\nvariations of the entire popup, splits traffic evenly with no weighting, and\nreports views, sign-ups and rate per variation right there. It also crowns a\nleading variation once one is ahead on conversion rate with at least 100 views,\nand `,_jsx(_components.strong,{children:`Decide winner`}),` genuinely promotes that variation’s content onto the\npopup.`]}),`\n`,_jsxs(_components.p,{children:[`Full detail in `,_jsx(_components.a,{href:`/en/messaging/popup-testing-and-analytics`,children:`popup testing and results`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`who-can-do-what`,children:`Who can do what`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Action`}),_jsx(_components.th,{children:`Roles`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`View the A/B Tests screen and open a test`}),_jsx(_components.td,{children:`Any workspace member`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Build or edit an A/B test step in an automation`}),_jsx(_components.td,{children:`Owner, admin, editor, designer`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Press Deploy the winner`}),_jsx(_components.td,{children:`Owner, admin, editor, designer`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`limits-worth-knowing`,children:`Limits worth knowing`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`An automation split is always two paths`,id:`an-automation-split-is-always-two-paths`,children:_jsx(_components.p,{children:`The A/B test step has Path A and Path B, and no more. The record on the A/B\nTests screen can hold up to four variants, and shows an MVT tag when it does,\nbut an automation cannot produce more than two.`})}),_jsx(Accordion,{title:`Removing the step does not remove the record`,id:`removing-the-step-does-not-remove-the-record`,children:_jsx(_components.p,{children:`Delete the A/B test step from an automation and its record stays on the A/B\nTests screen. There is no delete action on the screen, so old records\naccumulate. Use the search box and the status filter to keep the list\nreadable.`})}),_jsx(Accordion,{title:`Saving the automation resets the status to Running`,id:`saving-the-automation-resets-the-status-to-running`,children:_jsx(_components.p,{children:`Every save of an automation refreshes its A/B test records, and that\nincludes setting the status back to Running. If you mark a test Deployed and\nthen edit the automation, the status will read Running again.`})}),_jsx(Accordion,{title:`The test name comes from the automation`,id:`the-test-name-comes-from-the-automation`,children:_jsx(_components.p,{children:`The record is named after the automation and the A/B test step’s title.\nRename the step to something descriptive before you save, or every test in a\nbusy workspace ends up called the same thing.`})}),_jsx(Accordion,{title:`The record appears before you publish`,id:`the-record-appears-before-you-publish`,children:_jsx(_components.p,{children:`Saving an automation registers the test, so a draft automation’s split shows\nas Running on the A/B Tests screen even though nobody is being enrolled yet.\nCheck the automation’s own status to know whether it is live.`})}),_jsx(Accordion,{title:`Asking the Marketing Agent to set one up`,id:`asking-the-marketing-agent-to-set-one-up`,children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Senderz AI`}),` can register an A/B test record for you, with a name, source,\nthe variable under test, a hypothesis and a variant count. It creates the\nrecord only. It does not build the split step or move any traffic, so you\nstill have to open the automation and wire the branches.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`related`,children:`Related`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Flow steps and actions`,icon:`layer-group`,href:`/en/messaging/flows/steps`,children:_jsx(_components.p,{children:`The A/B test step in context, alongside conditional splits and wait timers.`})}),_jsx(Card,{title:`Publishing and monitoring`,icon:`chart-line`,href:`/en/messaging/flows/publish-and-monitor`,children:_jsx(_components.p,{children:`Per-step performance cards, which is where you actually compare the two\nbranches.`})}),_jsx(Card,{title:`Popup testing and results`,icon:`flask`,href:`/en/messaging/popup-testing-and-analytics`,children:_jsx(_components.p,{children:`Popup variations, the even split, the leading badge and Decide winner.`})}),_jsx(Card,{title:`Campaigns`,icon:`paper-plane`,href:`/en/messaging/campaigns`,children:_jsx(_components.p,{children:`The five-step wizard, and why there is no split step in it.`})})]})]})}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":{"codeStyling":"system","config":{},"pageMetadata":{"title":"A/B tests","description":"Where split testing actually runs in Senderz, how traffic is divided, and how to read the A/B Tests screen without over-reading it.","icon":"vial","href":"/en/messaging/ab-tests"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Where a test can run","slug":"where-a-test-can-run","depth":2,"children":[]},{"title":"Setting up a test in an automation","slug":"setting-up-a-test-in-an-automation","depth":2,"children":[{"title":"What you can vary","slug":"what-you-can-vary","depth":3,"children":[]},{"title":"Publish checks","slug":"publish-checks","depth":3,"children":[]}]},{"title":"How traffic is divided","slug":"how-traffic-is-divided","depth":2,"children":[]},{"title":"The A/B Tests screen","slug":"the-a/b-tests-screen","depth":2,"children":[{"title":"Reading results today","slug":"reading-results-today","depth":3,"children":[]}]},{"title":"Deciding a winner","slug":"deciding-a-winner","depth":2,"children":[]},{"title":"Sample size calculator","slug":"sample-size-calculator","depth":2,"children":[]},{"title":"Popup variations are a separate mechanism","slug":"popup-variations-are-a-separate-mechanism","depth":2,"children":[]},{"title":"Who can do what","slug":"who-can-do-what","depth":2,"children":[]},{"title":"Limits worth knowing","slug":"limits-worth-knowing","depth":2,"children":[]},{"title":"Related","slug":"related","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"senderz","siteName":"Senderz","title":"A/B tests - Senderz","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"he":{"href":"/he/getting-started/introduction","matchLevel":4},"en":{"href":"/en/messaging/ab-tests","matchLevel":0}}},"lastModified":"2026-08-26T13:50:08.898Z","originalFileLocation":"en/messaging/ab-tests.mdx","locale":"en"},"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=\"light\"}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=\"Where split testing actually runs in Senderz, how traffic is divided, and how to read the A/B Tests screen without over-reading it.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Senderz\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/senderz/i8tUhenf4EX6qIDZ/_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/senderz/i8tUhenf4EX6qIDZ/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/senderz/i8tUhenf4EX6qIDZ/_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/senderz/i8tUhenf4EX6qIDZ/_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/senderz/i8tUhenf4EX6qIDZ/_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/senderz/i8tUhenf4EX6qIDZ/_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/senderz/i8tUhenf4EX6qIDZ/_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/senderz/i8tUhenf4EX6qIDZ/_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/senderz/i8tUhenf4EX6qIDZ/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"A/B tests - Senderz\">\u003cmeta data-mint-head property=\"og:description\" content=\"Where split testing actually runs in Senderz, how traffic is divided, and how to read the A/B Tests screen without over-reading it.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Senderz\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.senderz.app/en/messaging/ab-tests\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://senderz.mintlify.site/_mintlify/api/og/v2?division=Campaigns+%26+automation\u0026amp;title=A%2FB+tests\u0026amp;description=Where+split+testing+actually+runs+in+Senderz%2C+how+traffic+is+divided%2C+and+how+to+read+the+A%2FB+Tests+screen+without+over-reading+it.\u0026amp;theme=5f67aa4bce0831aa15b0a1ff\u0026amp;signature=ffd6350969dbdb94ba80658b136733408eb68b06ec9e5b59563cb694a88c8cee\">\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=\"A/B tests - Senderz\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Where split testing actually runs in Senderz, how traffic is divided, and how to read the A/B Tests screen without over-reading it.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://senderz.mintlify.site/_mintlify/api/og/v2?division=Campaigns+%26+automation\u0026amp;title=A%2FB+tests\u0026amp;description=Where+split+testing+actually+runs+in+Senderz%2C+how+traffic+is+divided%2C+and+how+to+read+the+A%2FB+Tests+screen+without+over-reading+it.\u0026amp;theme=5f67aa4bce0831aa15b0a1ff\u0026amp;signature=ffd6350969dbdb94ba80658b136733408eb68b06ec9e5b59563cb694a88c8cee\">\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/senderz/i8tUhenf4EX6qIDZ/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Senderz\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#141414\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.senderz.app/en/messaging/ab-tests\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/en/messaging/ab-tests.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.senderz.app/#organization\",\"name\":\"Senderz\",\"url\":\"https://docs.senderz.app\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/senderz/TYfOlOCqzxvvnafR/logo/logo-light.png?fit=max\u0026auto=format\u0026n=TYfOlOCqzxvvnafR\u0026q=85\u0026s=716b2d481f50aa8a6539edb6be85247f\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.senderz.app#website\",\"name\":\"Senderz\",\"url\":\"https://docs.senderz.app\",\"publisher\":{\"@id\":\"https://docs.senderz.app/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.senderz.app/en/messaging/ab-tests#webpage\",\"url\":\"https://docs.senderz.app/en/messaging/ab-tests\",\"name\":\"A/B tests\",\"description\":\"Where split testing actually runs in Senderz, how traffic is divided, and how to read the A/B Tests screen without over-reading it.\",\"dateModified\":\"2026-08-26T13:50:08.898Z\",\"isPartOf\":{\"@id\":\"https://docs.senderz.app#website\"},\"breadcrumb\":{\"@id\":\"https://docs.senderz.app/en/messaging/ab-tests#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.senderz.app/en/messaging/ab-tests#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Campaigns \u0026 automation\",\"item\":\"https://docs.senderz.app/en/messaging/campaigns\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"A/B tests\",\"item\":\"https://docs.senderz.app/en/messaging/ab-tests\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.senderz.app/en/messaging/ab-tests#article\",\"headline\":\"A/B tests\",\"name\":\"A/B tests\",\"description\":\"Where split testing actually runs in Senderz, how traffic is divided, and how to read the A/B Tests screen without over-reading it.\",\"url\":\"https://docs.senderz.app/en/messaging/ab-tests\",\"mainEntityOfPage\":{\"@id\":\"https://docs.senderz.app/en/messaging/ab-tests#webpage\"},\"dateModified\":\"2026-08-26T13:50:08.898Z\",\"publisher\":{\"@id\":\"https://docs.senderz.app/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.senderz.app#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Senderz\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Senderz\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/en/messaging/ab-tests.md","siteName":"Senderz","nav":{"global":null,"languages":[{"language":"he","default":true,"pages":[{"title":"he","href":"/he/getting-started/introduction"}]},{"language":"en","tabs":[{"tab":"Guides","groups":[{"group":"Getting started","pages":[{"title":"Welcome to Senderz","sidebarTitle":"Introduction","icon":"house","href":"/en/getting-started/introduction"},{"title":"Quickstart","icon":"rocket","href":"/en/getting-started/quickstart"},{"title":"Core concepts","icon":"diagram-project","href":"/en/getting-started/concepts"},{"title":"Workspaces \u0026 team","icon":"users","href":"/en/getting-started/workspaces"}]},{"group":"Channels","pages":[{"title":"Channels overview","icon":"signal-stream","href":"/en/channels/overview"},{"title":"Email","icon":"envelope","href":"/en/channels/email"},{"title":"SMS","icon":"comment-sms","href":"/en/channels/sms"},{"title":"WhatsApp","icon":"whatsapp","href":"/en/channels/whatsapp"},{"title":"Web push","icon":"bell","href":"/en/channels/push"},{"title":"Voice","icon":"phone","href":"/en/channels/voice"}]},{"group":"Audience","pages":[{"title":"Contacts","icon":"address-book","href":"/en/audience/contacts"},{"title":"Contact fields","icon":"database","href":"/en/audience/contact-fields"},{"title":"Lists","icon":"rectangle-list","href":"/en/audience/lists"},{"title":"Segments","icon":"filter","href":"/en/audience/segments"},{"title":"Importing contacts","icon":"file-import","href":"/en/audience/import"},{"title":"Consent \u0026 suppression","icon":"clipboard-check","href":"/en/audience/consent"},{"title":"Preference center","icon":"sliders","href":"/en/audience/preference-center"}]},{"group":"Campaigns \u0026 automation","pages":[{"title":"Campaigns","icon":"paper-plane","href":"/en/messaging/campaigns"},{"title":"Campaign approvals","description":"Require owner or admin sign-off before a campaign can be scheduled, with a review queue, submission notes and decision comments.","icon":"circle-check","href":"/en/messaging/campaign-approvals"},{"title":"A/B tests","icon":"vial","href":"/en/messaging/ab-tests"},{"title":"Automations (flows)","description":"Triggered, multi-step automations that react to store and contact events. Build one, publish it, and it keeps running.","icon":"bolt","href":"/en/messaging/flows"},{"title":"Flow triggers","icon":"bolt","href":"/en/messaging/flows/triggers"},{"title":"Flow steps and actions","icon":"layer-group","href":"/en/messaging/flows/steps"},{"title":"Webhook step","icon":"webhook","href":"/en/messaging/flows/webhooks"},{"title":"Who enters and who leaves","icon":"door-open","href":"/en/messaging/flows/audience-and-exit"},{"title":"Flow library and AI","icon":"wand-magic-sparkles","href":"/en/messaging/flows/library-and-ai"},{"title":"Publishing and monitoring","icon":"chart-line","href":"/en/messaging/flows/publish-and-monitor"},{"title":"Templates","icon":"file-lines","href":"/en/messaging/templates"},{"title":"Popups","icon":"window-restore","href":"/en/messaging/popups"},{"title":"Popup blocks","icon":"cubes","href":"/en/messaging/popup-blocks"},{"title":"Popup targeting and display","icon":"bullseye","href":"/en/messaging/popup-targeting"},{"title":"Installing popups on your store","icon":"plug","href":"/en/messaging/popup-install"},{"title":"Popup testing and results","icon":"flask","href":"/en/messaging/popup-testing-and-analytics"},{"title":"Coupons","icon":"ticket","href":"/en/messaging/coupons"}]},{"group":"Content","pages":[{"title":"Brand kit","icon":"palette","href":"/en/content/brand-kit"},{"title":"Media library","icon":"images","href":"/en/content/media-library"},{"title":"Product catalog","icon":"box","href":"/en/content/products"},{"title":"Saved blocks","icon":"cubes","href":"/en/content/saved-blocks"}]},{"group":"Deliverability","pages":[{"title":"Domains \u0026 authentication","icon":"globe","href":"/en/deliverability/domains"},{"title":"Sender addresses \u0026 names","icon":"at","href":"/en/deliverability/sender-identities"},{"title":"SMS Sender names","icon":"id-badge","href":"/en/deliverability/sender-ids"},{"title":"Warmup \u0026 reputation","icon":"temperature-arrow-up","href":"/en/deliverability/warmup"}]},{"group":"Israeli compliance","pages":[{"title":"Israeli compliance","icon":"scale-balanced","href":"/en/compliance/israel"},{"title":"Quiet hours \u0026 Shabbat","icon":"moon","href":"/en/compliance/quiet-hours"}]},{"group":"Analytics \u0026 AI","pages":[{"title":"Revenue attribution","icon":"chart-pie","href":"/en/analytics/attribution"},{"title":"Senderz AI","icon":"sparkles","href":"/en/ai/overview"},{"title":"AI assistant","icon":"comments","href":"/en/ai/assistant"}]},{"group":"Account","pages":[{"title":"Plans \u0026 billing","icon":"credit-card","href":"/en/account/plans-and-billing"},{"title":"Contact limits","icon":"gauge-high","href":"/en/account/contact-limits"},{"title":"SMS credits","icon":"wallet","href":"/en/account/sms-credits"},{"title":"Notifications","icon":"bell","href":"/en/account/notifications"},{"title":"Help and support","icon":"life-ring","href":"/en/account/support"}]}]},{"tab":"Integrations","pages":[{"title":"Integrations","href":"/en/integrations/overview"}]},{"tab":"API reference","pages":[{"title":"API reference","href":"/en/api-reference/introduction"}]}]}]},"basePath":"","title":"A/B tests - Senderz","buildId":"dpl_8hoxaqFTU7hTr6A2fUraxAyjuiZo","deploymentId":"dpl_8hoxaqFTU7hTr6A2fUraxAyjuiZo","dynamics":[],"chunks":[]}