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.
Published 2026-09-09 · Search job: campaign shows zero clicks
A campaign can show zero clicks on a dashboard while the exchange is recording clicks, because three different mistakes produce the same blank. beeswax_snapshot writes clicks = 0 on purpose. The performance endpoint excludes snapshot rows when it reads clicks. Real clicks come from source = beeswax reporting rows. The Reporting API field is clicks plural, not click. ad_click_tokens are not delivery truth.
If your campaign shows zero clicks, check the source and the field name before you change targeting.
Snapshot rows are a spend picture
The production spend supervisor writes a Beeswax line-item snapshot every tick. That row is source = beeswax_snapshot. Its job is lifetime spend. It stores clicks as zero. Summing snapshot clicks with reporting clicks does not "fill in" a gap. It adds zeros. Reading only the snapshot looks like a dead campaign.
The performance path already excludes snapshot for the click column. A homemade query that sums every impression_log_rollups row will not. The same two sources must never be summed for spend either. That doubling is Two spend sources, one auction.
The field is plural
Beeswax provider delivery clicks come from Reporting API rows using the clicks plural field. A parser keyed on click reads every row as zero and looks exactly like a seat that reports no activity. The June 2026 learning-flight readout had to be thrown out in part because of this class of mistake. We will not go back to the singular.
Returned rows are also label-cased. clicks arrives as Clicks. campaign_id arrives as Campaign ID. A snake_case lookup on the requested name reads zeros even when the plural was requested. Label-cased report keys.
Tokens are plumbing
ad_click_tokens are attribution redirect plumbing. They can be zero when the creative uses a normal click URL. Supply-bench landings go straight to /sb/<slug> and do not mint tokens. Treating token count as delivery click truth will show zero against a portfolio that is landing and being billed.
Freshness is a fourth way to see zero
generated_at is when our API responded. It is not provider freshness. A dashboard that renders an empty click column from a stale sync, then stamps generated_at as now, looks live and empty. Use freshness_status, metric sources, and Beeswax reporting sync timestamps. Freshness is not generated_at.
Zero clicks can still be real. 1,073 of 1,149 Supply Bench placements had zero clicks. That is a supply finding, written in Most placements we bought did nothing. Prove the meter before you prove the placement.