Tests we actually flew.
Supply paths, ad buying, ads ideas, and the meters we use to read them. A launched cell is not a finding. A judged result is.
Supply path tests
What remnant display actually delivered when we bought it: placements, domains, SSPs, ads.txt, and the excludes that work.
Ad buying tests
Trafficking, pacing, budgets, dayparting, and the settings that silently stop a campaign.
Ads and landing ideas
Isolated funnels, consumer probes, creative matrices, and the promises we are willing to pay to learn.
How we read results
CTR is not the score. Clicks, visits, IVT, freshness, and the meters we refuse to collapse.
A lifetime cap that silently became one day
An optional lifetime budget was coalesced to the daily budget on every Beeswax write path. The campaign looked uncapped in our database and stopped after day one.
ads.txt did not save this buy
99.85 percent of observed Supply Bench spend was already ads.txt authorized. Unauthorized was $0.48. ads.txt did not remove the waste we actually found.
Agent-written creatives, deterministic claim checks
AI generated ad creative can draft variants. Those variants stay claim-guarded until landing-page claim extraction exists. Freeform model claim_sources are not evidence.
Attach measurement before you optimize
HUMAN FraudSensor is vendor 7 on this seat at $0.05 CPM. Creative add-on 44 is the banner tag. Until it is on and fields are non-zero, we will not publish an IVT result.
Authorized inventory can still be junk
ads.txt authorization answers who may sell a domain. It does not answer whether the traffic is usable. 99.85 percent of this buy was already authorized.
Bid down a bad placement instead of killing it
Bid modifiers can scale a bid, for example multiplier 0.3, on placement, site, or inventory_source. That path is seat-verified and not productized.
Budget fields have to move together
Beeswax rejects any line item with daily greater than lifetime. The first pacer moved only lifetime. Five campaigns succeeded because their windows had closed. Five still inside the window were rejected. The job still read succeeded.
Click macros that actually expand
Live-proven on 2026-09-05. 195 optimize-daily landings expanded PLACEMENT_ID, INVENTORY_SOURCE, EXCHANGE_HANDLE, and DOMAIN. /rest/macro cannot enumerate them.
Click-to-page-view benchmarks we trust
Anonymized main-seat brand-name display flights sat at 15.85 percent click-to-page-view when usable and 3.75 to 6.68 percent when not. We do not name those advertisers.
Clicks, visits, and conversions are different meters
Exchange clicks, click tokens, landing visits, and conversions are four columns. Substituting one for another is how a dashboard shows engagement that never reached a page.
Consumer probes vs product ads
Supply-bench pages are not Adprime signup funnels. Success is a human completing an on-screen task. Mixing those jobs poisons both the quality read and the product test.
CPM now, CPA when the payload is honest
Beeswax CPA on this seat requires cpa_target, cpa_event, and max_bid. Live tests run as CPM with conversion measurement attached. CPA pacing exists in the catalog. It has not been write-verified on a live line item.
Creative, audience, and page as one matrix
Multivariate creative testing here is a nested experiment tree, not one giant A/B. Each layer gets an ID, a purpose, and a stop rule so the stack stays readable.
CTR is the trap
Click-through rate on remnant display measures how clicky the inventory was. On our flights that was not the same as whether a person arrived.
Curiosity that still tells the truth
Ethical quiz ads can be curious. They cannot be fake iPhone prizes or fake scarcity. Allowed: real quizzes, calculators, generators, and polls we actually render. The page must match the ad.
Daily pacing, not lifetime pacing
Lifetime pacing on this seat requires an end date. Adprime Zero campaigns may have no lifetime cap. Daily pacing does not need an end date and is the setting that returned 200.
Dayparting is not on the targeting catalog
Targeting-keys returns 50 keys and no clock. Bid modifiers have 66 keys, including time_of_week and user_time_of_week. Checking one catalog was how we said dayparting did not exist.
Dayparting uses the viewer's clock
user_time_of_week is evaluated in the viewer's local timezone. It cannot deterministically spread fleet spend across the UTC day. time_of_week's zone is unresolved between UTC and EST/EDT docs.
Deals vs open exchange on a small daily budget
This child seat has historically had zero deals. We will not invent a private-marketplace result. This page is the test we still owe.
Delivery modifiers as budget weights
Delivery modifier terms are targeting, rank, and weight, plus a required fallback_weight. This seat has had zero delivery modifier objects.
Do not put a derived hour in a dedupe key
Beeswax bid_hour is a naive America/New_York wall clock. Appending Z stamped rows four hours early, duplicated an hour per campaign, and doubled spend from $24.46 to $48.92.
Domain waste after we filter exchanges
Exchange excludes do not remove domain waste. Domain findings still need seat-level reference list objects. That is an honest product limit, not a custom_list myth.
Even pacing that never reached the exchange
campaigns.pacing was stored, echoed in the API, and rendered on the dashboard. CreateBeeswaxLineItemArgs had no pacing field. The buyer's even request never reached Beeswax for four months.
Freshness is not generated_at
generated_at is when our API responded. It is not provider freshness. Use freshness_status, metric sources, and Beeswax reporting sync timestamps.
How to judge display traffic
Use IVT and click-to-page-view, not CTR. Zero invalid impressions means nothing is measuring if the creative has no vendor tag.
How to traffic a campaign you can actually judge
Attach HUMAN FraudSensor Banner tag add-on 44 at $0.05 CPM, request IVT and viewability fields, and judge on IVT and click-to-page-view. Never judge remnant display on CTR.
Label-cased report keys
Beeswax async report rows come back with label-cased keys. campaign_id arrives as Campaign ID. A snake_case parser reads every metric as zero.
Lead magnets that match the ad
A lead magnet for paid traffic is the secondary CTA after the promise. Send the prompt pack, checklist, or quickstart the banner already named. Do not swap in a generic newsletter.
measurable_invalid_impressions is not the rate
Strict IVT is invalid_impressions over impressions. On this seat measurable_invalid_impressions frequently equals almost every impression and produces a nonsense percentage.
Most placements we bought did nothing
On the 2026-09-02 Supply Bench pull, 93.4 percent of placements had zero clicks and still took 64 percent of observed spend.
msn.com showed up twice
msn.com ran about 3.7 percent CTR on the July 2026 learning flight and 5.35 percent on Supply Bench. The host repeated. The creative did not have to.
Name the campaign so a stranger can read the stack
Use angle__targeting__inventory__pageTemplate__wave. A generic name like growth test hides what was isolated. The name is the experiment label a later operator can read without the original chat.
One promise from ad to page to CTA
Isolated funnel advertising repeats one sentence from the banner through the hero to the button. The six angle keys are the first portfolio. Mixing them on one page is how you learn nothing.
One trafficking change per day
About 5,000 impressions and 20 clicks a day is too little signal if two things moved. Write the revert command before you apply the change. REVERT is a normal outcome.
Open exchange waste, mapped by grain
There is no Beeswax object named supply route. Waste shows up in reports by placement, site, domain, and exchange, and only some of those grains can be excluded today.
Placement vs site vs domain: which exclude actually works
Placement and site are direct targeting keys. Domain and app_bundle need seat-level reference lists. The old custom_list sentence blocked 59 percent of findable waste.
Prepaid runway vs a paused portfolio
auto_paused_daily_cap is a healthy enrolled state for a fixed-daily fleet. Zero running campaigns after the cap is correct. Prepaid runway without reading auto-reload is a countdown you may be inventing.
Prompt to campaign objects
An AI prompt can launch ads when it writes the same account objects the dashboard, API, CLI, and MCP already share. The prompt is the interface. The campaign, creative, and targeting rows are the product.
QPS is not targeting
Front-end QPS filters decide which auctions enter the bidder and consume contracted QPS. Line-item targeting decides which already-received requests may bid.
Reseller paths clicked 2.3x more than direct
Authorized-Reseller CTR was 0.423 percent against Authorized-Direct at 0.184 percent on the same Supply Bench creative. That is an arbitrage signature, not a quality win.
Resume day burst, then the slice
Resume re-pushes the full lifetime envelope. The pacer must null paced_lifetime_budget_cents so the next tick writes the slice. Leave the stale value in place and the campaign can burn the day in one hour.
Same creative, 28x CTR spread by SSP
OPENX ran 0.111 percent CTR on 44 percent of spend. SMARTADSERVER ran 3.074 percent. THIRTY_THREE_ACROSS ran 18.18 percent. The creative and format did not change.
Scan then exclude, because you cannot pick the list first
1,073 zero-click placements cannot be known before a flight. The working order is deliver, read grain, then exclude at a key the seat can compile.
Segment targeting from a real catalog
LiveRamp and Data Marketplace segments on this product resolve against 43,175 real third-party rows across 13 provider IDs. Unknown keys are rejected. The inactive write probe created expression 23441 and attached no line item.
Seven domains produced two fifths of the clicks
Seven domains produced 41.3 percent of Supply Bench clicks from 4.7 percent of impressions. That is a concentration finding, not a certified IVT verdict.
Six angles we are willing to pay to learn
The first paid portfolio is six promises: AI chat, no sales call, builder workflow, autonomous operator, growth matrix, and API quickstart. Each angle is a question we will spend to answer, not a slogan to rotate.
Stop sending paid clicks to the homepage
The homepage is too general for a paid click. An isolated funnel is one ad promise, one page promise, and one primary CTA. That is the June 2026 copy plan, not a flight result.
Template variants inside one promise
Landing page template testing keeps the angle fixed and changes the persuasion model. Short-direct, interactive-planner, and pain-led are three styles for the same sentence, not three new promises.
Ten interaction pages we actually flew
Wave 2 went live August 27, 2026 on ten /sb paths, from confirm-seen through name-generator. These are consumer interaction landings, not product signup pages.
Time of week is counted in minutes
user_time_of_week runs from Sunday midnight as minutes, 0 to 10079. A range of [9, 12] is three minutes, not a 9 to 12 morning window. An hours implementation would compile and never deliver.
Two spend sources, one auction
beeswax hourly rows and beeswax_snapshot lifetime rows cover the same auctions. A plain sum doubles spend. Use greatest of max snapshot and sum of non-snapshot.
Two things pacing at once stops delivery
The product-side pacer shrinks lifetime to a slice. Exchange pacing spreads the daily budget. Both at once exhaust the slice mid-day. Exactly one mechanism may pace a campaign.
We built a pacer because we misread one error
Setting pacing on CPM returns 400 because that strategy is not paced. The seat has CPM_PACED. The trailing reach-out sentence is boilerplate. The misread cost four months and a product-side pacer.
Web-only still bought browser games
environments=['web'] held. app_agg rows were 0. The flight still bought worldofsolitaire.com, wheelofnames.com, and tftcomps.gg.
What a 300x250 can honestly ask a stranger to do
Display banner creative ideas we already flew are honest asks: confirm you see this, hold for three seconds, vote, scratch with no prize, pick dinner, estimate, generate names. Not a fake win.
What we mean by a supply path
There is no Beeswax object named supply route. A path is targeting plus lists plus deals plus modifiers plus reports, read back after delivery.
When to copy a campaign instead of editing it
Iterate ads without mixing tests by copying the campaign and changing one layer. Public campaign copy plus creative associations are the path. Do not pause or remove the final active creative.
Why a dashboard can show zero clicks
beeswax_snapshot writes clicks as 0. The performance endpoint excludes snapshot for clicks. Real clicks come from source=beeswax reporting. The field is clicks, plural.
Why an empty allowlist serves nothing
inventory_source is an allowlist. An empty list compiles to an expression that matches no inventory. The apply path returns 409 rather than shipping a campaign that cannot serve.