How to A/B Test Two Versions of Your Sales One-Pager
Every sales team has this argument: the feature-tour one-pager versus the customer-story one-pager, settled by whoever argues longest. Attachments can't end the debate — both versions disappear into inboxes and return nothing.
Tracking links can. Split your next send down the middle, give each half a different variant, and a week later the reading data calls the winner — not the loudest voice in the room.
Make it a fair fight
Change one variable. Here that's the framing — Variant A tours the features, Variant B tells one customer's outcome story — with the same offer, same design, same send day. Upload both as private documents:
curl -X POST https://apdf.io/api/docs \
-H "Authorization: Bearer $API_TOKEN" -H "Accept: application/json" \
--data-urlencode "file=https://your-site.example/onepager-a.pdf" \
--data-urlencode "name=Reporting One-Pager — Variant A" \
-d "is_public=0"
# repeat for Variant B — note both doc_ids
Split the list mechanically
No cherry-picking — alternate rows of the contact CSV so neither variant gets the warmer half. One loop mints the links:
i=0
while IFS=, read -r NAME EMAIL; do
DOC=$([ $((i % 2)) -eq 0 ] && echo "$A_ID" || echo "$B_ID")
curl -s -X POST "https://apdf.io/api/docs/$DOC/links" \
-H "Authorization: Bearer $API_TOKEN" -H "Accept: application/json" \
--data-urlencode "name=$NAME" --data-urlencode "email=$EMAIL" -o /dev/null
i=$((i+1)); sleep 1 # stay under the API rate limit
done < <(tail -n +2 contacts.csv)
Ten contacts in, five links on each variant out. Mail-merge each half its own URLs and the experiment is live — every open and every second of reading now lands on the right side of the scoreboard, attributed by name.
Read the scoreboard
A week later, one call per variant settles it:
$ curl -s "https://apdf.io/api/docs/$A_ID/analytics" -H "Authorization: Bearer $API_TOKEN" \
-H "Accept: application/json" | jq '.data | {sessions, unique_viewers, avg_duration_ms}'
{
"sessions": 4,
"unique_viewers": 4,
"avg_duration_ms": 13500
}
$ curl -s "https://apdf.io/api/docs/$B_ID/analytics" -H "Authorization: Bearer $API_TOKEN" \
-H "Accept: application/json" | jq '.data | {sessions, unique_viewers, avg_duration_ms}'
{
"sessions": 7,
"unique_viewers": 5,
"avg_duration_ms": 43429
}
Reading the numbers like an experimenter:
- Dwell time is the verdict — 13.5 versus 43.4 seconds average on the same-length page. Variant B held people three times longer.
- Re-opens are the tell — B logged 7 sessions from 5 viewers: two people came back. Nobody returned to A.
- Reach differed too — 4 of 5 opened A, 5 of 5 opened B. With identical subject lines, that's noise; log it, don't celebrate it.
- Completion can't referee a one-pager — it reads 100% on both sides the moment anyone opens page one of one. For single-page tests, dwell and re-opens carry the decision.
Call it honestly, then ship the winner
Five readers per arm is a directional test, not a p-value — treat a 3× dwell gap as a confident direction and anything under 1.5× as a tie. Send the winner to the rest of the list (the bulk links script scales the mail merge), and keep the loser's link set live: stragglers who open late keep feeding the data.
Then test the next single variable — subject line, opening claim, the case study you lead with. The scoreboard's already built.
Where to go from here
The experiment machinery generalizes — same links, bigger questions.
Related tutorials
See If Clients Actually Read Your Monthly Reports
The report nobody reads is the retainer nobody renews. Tracked links per client sort the portfolio in one sweep — both Meridian stakeholders read cover to cover, Brightpath flicked for 15 seconds, Okafor never opened — and per-page data tells you whether your decision request was ever seen.
Track Who Reads Your Press Kit
Twenty pitches, twenty attached kits, and a silence that could mean anything. Per-journalist links end the blindness: the full read plus asset download says she's writing, the fact-sheet return visit says offer the interview now, and the never-opened rows say re-pitch — not follow up.
Freelancers: A Proposal Workflow Without Per-Seat Tools
Proposal software is priced for sales teams; freelancers just need the signal. A one-person workflow on the free plan: links per contact reveal the 12-minute open, the internal forward, and the 21:21 return visit that camped on the price page — plus the three-slot pipeline trick and honest edges.