The operator's guide
How to make money
with listicles.
From domain register to first $1k/day, the same loop that runs the platform.
01 · ECONOMICS
A media buyer's job is one equation.
Listicle arbitrage rewards two things: keeping the cost-side floor as low as your traffic source allows, and pushing the revenue-side ceiling — RPM — as high as the bandit can drive it. Everything else on this page exists to move one of those two numbers.
The equation
margin = (outboundCTR × downstreamCR × payout) − CPC # at breakeven, revenue per visitor = CPC # RPM = revenue per 1,000 visitors # breakeven RPM = 1000 × CPC
One paid click = one visitor on the lander. The visitor either taps an outbound CTA or doesn't. The downstream offer either converts that click or doesn't. Three numbers in series, one cost out front. Three knobs, one equation.
Three knobs, one direction
- outboundCTR — share of landed visitors who tap a CTA. Hero placement, headline, button copy, qualifier vs single-CTA. The builder edits this directly.
- downstreamCR — share of outbound clicks that convert at the offer. Decided by intent quality, geo, sub-ID match, hour-of-day. Move it by tightening targeting, not by rewriting the lander.
- payout — vertical ceiling. Pick a vertical with a $40+ RPM ceiling before you debate button colors.
| Traffic CPC | Breakeven RPM | 2× margin RPM | Example mix to clear 2× |
|---|---|---|---|
| $0.30 | $300 | $600 | 20% CTR · 12% CR · $13 payout |
| $0.50 | $500 | $1,000 | 22% CTR · 14% CR · $16 payout |
| $0.80 | $800 | $1,600 | 25% CTR · 16% CR · $20 payout |
This is why bandit-driven RPM optimization isn't cosmetic. At $0.50 CPC, every $1 of RPM lift is $1 of margin per 1,000 visitors — directly. Moving from $520 RPM to $640 RPM at 50,000 visitors/day is $6,000/day extra, on the same ad spend. The Thompson Sampling allocator is paid in margin, not impressions.
02 · VERTICALS
Not all listicle traffic is created equal.
Vertical determines RPM ceiling, the traffic source that fits, the payout window you have to finance, and the compliance overhead. Pick wrong and the bandit can't save you — there's no margin to optimize.
| Vertical | RPM range | Best traffic source | Payout window | Compliance note |
|---|---|---|---|---|
| GLP-1 / Weight-loss | $45–$110 | Meta, native (Taboola/Outbrain) | Net-30 on form fill or call | FDA-aware claims. Avoid disease-prevention language. Compounded vs branded distinction in copy. |
| Senior Benefits / Medicare | $30–$80 | Meta 55+, Bing, native | CPL or net-15 on call transfer | CMS marketing rules during AEP. No "free" without disclosure. State-licensed downstream. |
| Mass Tort | $60–$220 | Native, Google compliance, FB | Net-60 on signed retainer | Attorney-advertising rules per state. Disclaimer required. No outcome guarantees. |
| Mortgage Refi / HELOC | $25–$70 | Bing, Google, native | CPL with quality clawback | CFPB/UDAAP. APR disclosure on rate claims. No "guaranteed approval" copy. |
| Solar / Roofing | $20–$55 | Meta homeowners, native, Google | CPL with appointment-set tier | Downstream state licensing. Geo-fence by tax-credit eligibility. No ITC misrepresentation. |
| Debt Relief | $25–$65 | Native, Bing, Meta | CPL or net-15 on enrollment | CFPB Telemarketing Sales Rule. No upfront-fee promises. State debt-relief licensing. |
Pick one
One vertical. One traffic source. One offer. Get to $500/day net before you fork. Operators who run two verticals on day one almost always run two mediocre ones.
Match payout to bankroll
Net-60 mass tort has the best RPM but the worst cashflow. With a $3k test budget, start CPL on senior benefits or mortgage. Save mass tort for when payout windows can’t kill you.
Compliance is the floor
Every vertical above has a regulator. Read the disclosure rules before the first headline. Platform compliance flags catch obvious violations; they don’t replace your lawyer.
03 · LOOP
Cold domain to running paid traffic in one business day.
No mystique. One vertical, one traffic source, one downstream offer, $50–100 of test spend. The first day is about wiring the pipes end-to-end, not finding a winner. Day two is when the bandit starts paying you.
Morning
Register domain · spin up tenant
Buy domain, sign up, attach domain or use subdomain.
Late morning
Build first page
Pick template, edit blocks, AI co-pilot for headline + qualifier copy.
Lunch
Wire postback · outbound forwarding
/postback HMAC, sub1–sub10 mapping, downstream forward to lead router.
Afternoon
Publish · $20 smoke test
Snapshot version, click test, push paid spend on one ad set.
Overnight
Bandit picks
Thompson Sampling allocates across challenger variants while you sleep.
Next AM
Read · scale · clone
Review RPM, scale spend on the lead arm, clone winning unit to next page.
What you need before noon
- 1Domain. $10–15 at any registrar. Clean .com or .live, no hyphens, no trademarks.
- 2Traffic-platform account. Bing Ads or Meta in the user’s name with a real billing address. Warm up — don’t spin up and spend $500 same day.
- 3Downstream offer. Affiliate link, lead-buyer endpoint, or your own router. Postback URL + param map + sub-ID conventions on paper before you wire.
- 4Test spend. $50–100. Buys 100–300 visitors. Smoke test, not a verdict — don’t kill at n=120.
What you skip on day one
- Custom domain SSL, branded email, logo polish. Subdomain on launch.
- Five-page portfolio. Build one page end-to-end before building a second.
- Pixel paranoia. Postback first, ad-platform pixel optional, CAPI second week.
- Concluding the bandit. Day one has no signal — look tomorrow.
04 · SUB-IDS
Every dollar must be attributable. Sub1–sub10 is the audit trail.
Sub-IDs aren't a feature, they're the spine of the business. They tell you which traffic source paid back, which headline cleared the floor, which qualifier branch converted, which geo broke even at which CPC. Without them you're optimizing a black box.
| Slot | Recommended use | Example value |
|---|---|---|
| sub1 | traffic_source | meta · bing · taboola · outbrain |
| sub2 | campaign_id | camp_2026_glp1_fl_v3 |
| sub3 | ad_id | ad_8821_lookalike_2pct |
| sub4 | headline_variant | h_doctors_say · h_florida_only |
| sub5 | cta_button | roof_5_9 · roof_10_14 · roof_15_plus |
| sub6 | vertical | glp1 · senior_med · mass_tort_paraquat |
| sub7 | page_id | pg_top7_seniors_fl |
| sub8 | ad_unit_id | au_qualifier_roof_age_v6 |
| sub9 | visitor_geo | FL · TX · CA |
| sub10 | device | mobile · desktop · tablet |
# 1. inbound landing URL (paid click from meta) GET https://roof-replacement.live/top-7-rebates ?utm_source=meta &sub1=meta &sub2=camp_2026_roof_fl_v3 &sub3=ad_8821_lookalike_2pct &sub4=h_florida_only &sub9=FL &sub10=mobile # 2. visitor taps "5–9 years" in the qualifier — per-button overrides # layer on top of the captured landing values GET /c/8f3aJq2pK # token resolves the placement → 302 redirect, outbound URL: https://offer.partner.com/click ?clickId=cid_8f3a4c… &sub1=meta # from landing &sub2=camp_2026_roof_fl_v3 &sub3=ad_8821_lookalike_2pct &sub4=h_florida_only &sub5=roof_5_9 # per-button override wins &sub6=solar &sub7=pg_top7_roof_fl &sub8=au_qualifier_roof_age_v6 &sub9=FL &sub10=mobile # 3. downstream postback echoes them all back, on conversion POST /postback ?clickId=cid_8f3a4c… &payout=42.10 &sub1..sub10=(round-tripped — no loss)
If you're not segmenting by sub-ID, you're not optimizing — you're guessing. The attribution chain has to round-trip cleanly: landing URL → click → outbound → postback → analytics. One missing slot anywhere and the bandit starts rewarding the wrong thing.
05 · BANDIT
Thompson Sampling decides what runs. You decide when to conclude.
The bandit is honest about uncertainty. It will overweight a leader before you'd call it a winner, and it will keep a long-shot arm in the rotation longer than your gut says — because the math says so. Your job isn't to pick winners; it's to know when the race is over and queue up the next one.
Arm has < 50 conversions
Cold start. Variance dominates. CTR is the early signal — RPM lags. Don’t conclude. Don’t pause. Don’t add a third arm yet.
Hold. Let allocation widen.
Lead arm at 70–90% credible interval
Allocation is leaning but not decided. Adding a fresh challenger here is cheap and informs the next test. AI co-pilot generates two on request.
Add a challenger. Keep racing.
Lead arm > 95% for 24h+
Concluded. Promote. The reward gap is real, the credible interval is tight, and further allocation to losers burns money.
Conclude. Promote. Spawn 2 new challengers.
allocation over 5 days · 3-arm challenger test
Arm B climbs from 33% → 86% as RPM and credible interval tighten
Arm B · 86%
RPM $48.10 · n=3,184
Arm A · 11%
RPM $28.40 · n=2,011
Arm C · 3%
RPM $19.80 · n=540
The AI co-pilot can auto-generate the next two challengers when you conclude — new headline, new qualifier copy, same structure. Approve or edit, then ship. The platform handles the rest of the allocation math.
06 · SCALING
The unit is the asset. The page is the placement.
A winning ad unit isn't a page — it's a portable asset. Once a unit clears the bandit on one page, it deploys across every page and every vertical that fits, with per-placement overrides where the context demands them. Ad servers have known this for 20 years.
one winning unit · five placements · one rolled-up RPM
adUnit · qualifier-roof-age-v6 · 95% credible interval, concluded d4
| Footprint | Setup cost | Daily revenue (est.) | Notes |
|---|---|---|---|
| 1 page · 1 unit | ~4 hr build | $X / day | Prove the unit. Bandit-conclude before fan-out. |
| 5 pages · same unit | ~30 min / page | ~3–5× | Less than 5× in practice — traffic source ceiling and audience overlap. |
| 5 pages × 3 verticals | ~2 weeks portfolio | portfolio compound | Per-vertical RPM rollup. Drop pages that drag below 1.3× ROAS. |
Edit once, ship everywhere
Change the headline on the unit and every placement updates. The join row carries pageSpecificOverrides for one-off tweaks — geo language, vertical disclosure — without forking the unit.
RPM rolls up by unit
Cross-page rollups aggregate by ad unit, by placement slot, by individual CTA button. A unit at 8 placements with $38.65 RPM is a real number — not a per-page average that hides which placement drags.
07 · MILESTONES
What good looks like at 30, 60, 90.
Concrete targets. If you're not hitting them, debug here, not on the traffic source. Most failures at day 60 are day-1 vertical picks, not bid strategy.
Day 1–30
Find a winner
- 1 vertical picked, 1 traffic source warmed up
- 3+ pages live on subdomain or 1 custom domain
- 2 ad-unit variants per slot, bandit allocating
- $50–100/day spend, one campaign
- First positive RPM day by day 14 or pivot the offer
Day 31–60
Compound
- Bandit-concluded winners promoted across 5+ pages
- Sub-ID-driven traffic-source breakdown clean
- Postback dedupe + outbound forwarding live to lead router or CAPI
- Cross-page RPM rollups guiding daily decisions
- $300–500/day at 1.3–1.8× ROAS
Day 61–90
Scale
- 2nd vertical added, separate sub6 namespace
- Custom domain attached, SSL approved
- Team seat 2 added — creative or ops
- Top 5 ad units re-run on fresh challengers monthly
- $1k+/day at 1.5×+ ROAS sustained
Day-1 vertical pick > day-30 page polish > day-60 scaling decisions, in decreasing order of impact on a 90-day P&L. Most operators invert this order and wonder why scaling doesn't work.
08 · PLATFORM
Every step above maps to a thing the platform does.
The playbook isn't a layer on top of the product. The product is the playbook, instrumented. Each row below is a feature built specifically because operators need to do that step on day one and can't afford for it to be the bottleneck.
| Playbook step | Platform capability | Read the spec |
|---|---|---|
| Build the page | Drag-and-drop builder + AI co-pilot, mobile-first preview | features#builder |
| Wire the postback | /postback endpoint, HMAC verify, dedupe rules, outbound forwarding | features#postbacks |
| Sub-ID strategy | sub1–sub10 passthrough, per-button overrides, override hierarchy | features#tracking |
| Find the winner | Thompson Sampling bandit, AI challenger generation, credible-interval gating | features#bandit |
| Scale a winner | Ad-unit-as-first-class-object, multi-page placement, cross-page RPM rollup | features#ad-units |
| Read the numbers | Analytics with placement-slot, CTA-button, sub-ID drill-down | features#analytics |
Ready to run the playbook?
The 24-hour loop, a real bandit, sub-ID attribution end-to-end. Free to start.