Ad buying tests
Trafficking, pacing, budgets, dayparting, and the settings that silently stop a campaign.
Start with
- 2 min readHow to traffic a campaign you can actually judgeAttach HUMAN FraudSensor add-on 44 at $0.05 CPM, request IVT and viewability, and judge on IVT and click-to-page-view. Never judge remnant display on CTR.
- 2 min readA lifetime cap that silently became one dayAn optional lifetime budget became the daily budget on every Beeswax write path. The campaign looked uncapped in our database and stopped after day one.
- 2 min readBudget fields have to move togetherBeeswax rejects a line item with daily above lifetime. The first pacer moved only lifetime, and five campaigns were rejected. The job still read succeeded.
All pieces, newest first
16 pieces
- Require AUTH_DIRECT and AUTH_RESELLERPlanads.txt is a targeting key with four values. All our past campaigns accepted unauthorized and unknown. A 5/5 test is running. This is a plan, not a result.1 min read
- A lifetime cap that silently became one dayAn optional lifetime budget became the daily budget on every Beeswax write path. The campaign looked uncapped in our database and stopped after day one.2 min read
- Budget fields have to move togetherBeeswax rejects a line item with daily above lifetime. The first pacer moved only lifetime, and five campaigns were rejected. The job still read succeeded.2 min read
- CPM now, CPA when the payload is honestPlanBeeswax CPA requires cpa_target, cpa_event, and max_bid. Live tests run as CPM with conversion measurement attached. CPA pacing is not write-verified.1 min read
- Daily pacing, not lifetime pacingLifetime pacing on this seat requires an end date, and Adprime Zero campaigns may have no lifetime cap. Daily pacing needs no end date and returned 200.2 min read
- Dayparting is not on the targeting catalogTargeting-keys has 50 keys and no clock. Bid modifiers have 66, including time_of_week and user_time_of_week. We missed dayparting by checking one catalog.2 min read
- Dayparting uses the viewer's clockuser_time_of_week is the viewer's local time. It cannot deterministically spread fleet spend across the UTC day. time_of_week's zone is unresolved.2 min read
- Even pacing that never reached the exchangecampaigns.pacing was stored and shown, but CreateBeeswaxLineItemArgs had no pacing field. The buyer's even request never reached Beeswax for four months.2 min read
- How to traffic a campaign you can actually judgeAttach HUMAN FraudSensor add-on 44 at $0.05 CPM, request IVT and viewability, and judge on IVT and click-to-page-view. Never judge remnant display on CTR.2 min read
- One trafficking change per dayAbout 5,000 impressions and 20 clicks a day is too little signal if two things moved. Write the revert command first. REVERT is a normal outcome.2 min read
- Prepaid runway vs a paused portfolioauto_paused_daily_cap is a healthy state for a fixed-daily fleet. Zero running campaigns after the cap is correct. Read prepaid runway with auto-reload.2 min read
- Resume day burst, then the sliceResume re-pushes the full envelope. The pacer must null paced_lifetime_budget_cents so the next tick writes the slice, or the day can burn in one hour.2 min read
- Segment targeting from a real catalogLiveRamp and Data Marketplace segments on this product resolve against 43,175 real third-party rows across 13 provider IDs. Unknown keys are rejected.2 min read
- Time of week is counted in minutesuser_time_of_week counts minutes from Sunday midnight, 0 to 10079. [9, 12] is three minutes, not 9 to 12. An hours version would compile and never deliver.2 min read
- Two things pacing at once stops deliveryOur pacer shrinks lifetime to a slice and exchange pacing spreads the daily budget. Both at once exhaust the slice mid-day. Only one mechanism may pace.2 min read
- We built a pacer because we misread one errorPacing on CPM returns 400 because CPM is not paced. The seat has CPM_PACED. The reach-out line is boilerplate. Misreading it cost four months and a pacer.2 min read