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

  • outboundCTRshare of landed visitors who tap a CTA. Hero placement, headline, button copy, qualifier vs single-CTA. The builder edits this directly.
  • downstreamCRshare 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.
  • payoutvertical ceiling. Pick a vertical with a $40+ RPM ceiling before you debate button colors.
breakeven RPM table · revenue per 1,000 paid visitors must clear column 2
Traffic CPCBreakeven RPM2× margin RPMExample mix to clear 2×
$0.30$300$60020% CTR · 12% CR · $13 payout
$0.50$500$1,00022% CTR · 14% CR · $16 payout
$0.80$800$1,60025% CTR · 16% CR · $20 payout
rule of thumb · breakeven RPM = 1000 × CPC · target 2× for a real business

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 fit matrix · RPM ranges from operator-reported 2024–2026 data
VerticalRPM rangeBest traffic sourcePayout windowCompliance note
GLP-1 / Weight-loss$45–$110Meta, native (Taboola/Outbrain)Net-30 on form fill or callFDA-aware claims. Avoid disease-prevention language. Compounded vs branded distinction in copy.
Senior Benefits / Medicare$30–$80Meta 55+, Bing, nativeCPL or net-15 on call transferCMS marketing rules during AEP. No "free" without disclosure. State-licensed downstream.
Mass Tort$60–$220Native, Google compliance, FBNet-60 on signed retainerAttorney-advertising rules per state. Disclaimer required. No outcome guarantees.
Mortgage Refi / HELOC$25–$70Bing, Google, nativeCPL with quality clawbackCFPB/UDAAP. APR disclosure on rate claims. No "guaranteed approval" copy.
Solar / Roofing$20–$55Meta homeowners, native, GoogleCPL with appointment-set tierDownstream state licensing. Geo-fence by tax-credit eligibility. No ITC misrepresentation.
Debt Relief$25–$65Native, Bing, MetaCPL or net-15 on enrollmentCFPB 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.

day one · 24-hour wiring loop
MORNINGRegister domainspin up tenantLATE MORNINGBuild first pageLUNCHWire postbackoutbound forwardingAFTERNOONPublish$20 smoke testOVERNIGHTBandit picksNEXT AMReadscale

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.

recommended sub-ID convention · sub1 → sub10
SlotRecommended useExample value
sub1traffic_sourcemeta · bing · taboola · outbrain
sub2campaign_idcamp_2026_glp1_fl_v3
sub3ad_idad_8821_lookalike_2pct
sub4headline_varianth_doctors_say · h_florida_only
sub5cta_buttonroof_5_9 · roof_10_14 · roof_15_plus
sub6verticalglp1 · senior_med · mass_tort_paraquat
sub7page_idpg_top7_seniors_fl
sub8ad_unit_idau_qualifier_roof_age_v6
sub9visitor_geoFL · TX · CA
sub10devicemobile · desktop · tablet
worked example · multi-button qualifier with per-button sub1 override
# 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

0%25%50%75%100%d1d2d3d4d5

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

qualifier-roof-agev6 · concluded · winneravg RPM $38.65roof-replacement.liveslot 2 · vertical=solarRPM $38.10override: 0solar-2026.liveslot 1 · vertical=solarRPM $44.90override: 0home-warranty.liveslot 3 · vertical=home_svcRPM $31.20override: 0roofing-deals.liveslot 2 · vertical=solarRPM $40.40override: 0storm-claims.liveslot 4 · vertical=mass_tortRPM $36.80override: 0
fan-out economics · same unit, more placements
FootprintSetup costDaily revenue (est.)Notes
1 page · 1 unit~4 hr build$X / dayProve 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 portfolioportfolio compoundPer-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 stepPlatform capabilityRead the spec
Build the pageDrag-and-drop builder + AI co-pilot, mobile-first previewfeatures#builder
Wire the postback/postback endpoint, HMAC verify, dedupe rules, outbound forwardingfeatures#postbacks
Sub-ID strategysub1–sub10 passthrough, per-button overrides, override hierarchyfeatures#tracking
Find the winnerThompson Sampling bandit, AI challenger generation, credible-interval gatingfeatures#bandit
Scale a winnerAd-unit-as-first-class-object, multi-page placement, cross-page RPM rollupfeatures#ad-units
Read the numbersAnalytics with placement-slot, CTA-button, sub-ID drill-downfeatures#analytics

Ready to run the playbook?

The 24-hour loop, a real bandit, sub-ID attribution end-to-end. Free to start.