LabArticleSeat-verified

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.

Published 2026-09-09 · Search job: reporting API field names

Reporting API field names on this seat do not come back as the snake_case you requested. Async report rows return label-cased keys. campaign_id arrives as Campaign ID. clicks arrives as Clicks. A parser keyed on the requested snake_case name reads every metric as zero and looks exactly like a seat that reports no delivery.

If your integration "proved" the view is empty, print the keys you actually received before you change the view.

Why this looks like a product outage

The request is asynchronous. You submit fields, you get a task_id, you fetch rows later. The rows do not echo your request names. They echo labels. A client that zips requested names onto values in order, or that looks up impressions and clicks in a map, will store zeros. The next dashboard render is a campaign with spend you may have from a snapshot and clicks you do not have from reporting.

That blank is one of the ways a dashboard shows zero clicks. The others are snapshot rows that store clicks = 0, the singular field click, and token plumbing treated as delivery. Why a dashboard can show zero clicks.

The same class of mistake hit IVT. invalid_impressions requested and looked up as snake_case will read zero even after a vendor tag is on and the label-cased column is populated. Do not certify a flight as clean from a missed key.

What else this seat's reports will not do

Offset is ignored. A limit of 50,000 returns HTTP 400. Filters on campaign_id fail. The usable Supply Bench pull was the top roughly 5,000 rows by spend, $316.64 of about $432. A parser that "got zero rows" may have hit the 400, not an empty account.

generated_at on our API response is not a report timestamp. Freshness is not generated_at.

What we will not do

We will not publish a compatibility layer that guesses every label variant in a blog post. The rule is: log the keys, map from the received label, and keep a test that fails if Campaign ID is unread. We will not treat a zero-filled parse as evidence the campaign failed.

How to judge display traffic lists this gotcha next to snapshot spend and freshness because each one produces a false zero. Fix the parse before you fix the buy.