Lab

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.

BuyingArticleSeat-measured2026-09-09

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.

SupplyArticleSeat-measured2026-09-09

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.

IdeasArticleOperator-judged2026-09-09

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.

MeasurementPlanPlan2026-09-09

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.

SupplyArticleSeat-measured2026-09-09

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.

SupplyPlanPlan2026-09-09

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.

BuyingArticleSeat-measured2026-09-09

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.

MeasurementArticleSeat-measured2026-09-09

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.

MeasurementArticleOperator-judged2026-09-09

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.

MeasurementArticleOperator-judged2026-09-09

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.

IdeasArticleOperator-judged2026-09-09

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.

BuyingPlanPlan2026-09-09

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.

IdeasArticleOperator-judged2026-09-09

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.

MeasurementArticleSeat-measured2026-09-09

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.

IdeasArticleOperator-judged2026-09-09

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.

BuyingArticleSeat-verified2026-09-09

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.

BuyingArticleSeat-verified2026-09-09

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.

BuyingArticleSeat-verified2026-09-09

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.

SupplyPlanPlan2026-09-09

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.

SupplyPlanPlan2026-09-09

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.

MeasurementArticleSeat-measured2026-09-09

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.

SupplyArticleSeat-verified2026-09-09

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.

BuyingArticleSeat-verified2026-09-09

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.

MeasurementArticleOperator-judged2026-09-09

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.

MeasurementArticleOperator-judged2026-09-09

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.

BuyingArticleOperator-judged2026-09-09

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.

MeasurementArticleSeat-verified2026-09-09

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.

IdeasArticleOperator-judged2026-09-09

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.

MeasurementArticleSeat-verified2026-09-09

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.

SupplyArticleSeat-measured2026-09-09

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.

SupplyArticleSeat-measured2026-09-09

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.

IdeasArticleOperator-judged2026-09-09

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.

IdeasArticleOperator-judged2026-09-09

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.

BuyingArticleOperator-judged2026-09-09

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.

SupplyArticleOperator-judged2026-09-09

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.

SupplyArticleSeat-verified2026-09-09

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.

BuyingArticleOperator-judged2026-09-09

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.

IdeasArticleOperator-judged2026-09-09

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.

SupplyArticleSeat-verified2026-09-09

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.

SupplyArticleSeat-measured2026-09-09

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.

BuyingArticleSeat-verified2026-09-09

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.

SupplyArticleSeat-measured2026-09-09

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.

SupplyArticleOperator-judged2026-09-09

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.

BuyingArticleSeat-verified2026-09-09

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.

SupplyArticleSeat-measured2026-09-09

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.

IdeasArticleOperator-judged2026-09-09

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.

IdeasArticleOperator-judged2026-09-09

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.

IdeasPlanPlan2026-09-09

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.

IdeasArticleSeat-measured2026-09-09

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.

BuyingArticleSeat-verified2026-09-09

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.

MeasurementArticleSeat-verified2026-09-09

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.

BuyingArticleSeat-verified2026-09-09

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.

BuyingArticleSeat-verified2026-09-09

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.

SupplyArticleSeat-measured2026-09-09

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.

IdeasArticleOperator-judged2026-09-09

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.

SupplyArticleOperator-judged2026-09-09

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.

IdeasArticleSeat-verified2026-09-09

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.

MeasurementArticleSeat-verified2026-09-09

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.

SupplyArticleSeat-verified2026-09-09

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.