Your Meta Device Report Might Have Quietly Gone to Zero, and Nobody Told You
Since August 6, three Meta Ads reporting breakdowns, device, hourly, and frequency, only return data if you’ve opted in per ad account.
If you haven’t, the API doesn’t error out.
It just hands back an empty result with a normal HTTP 200 status. Your dashboard looks like your mobile traffic vanished overnight, when nothing about your campaigns actually changed.
What actually broke
Meta’s change, confirmed across multiple reporting platforms tracking the update, covers three specific breakdowns in the Marketing API and Ads Manager’s reporting view: the device breakdown (impression_device), the hourly breakdown (hourly_stats_aggregated_by_audience_time_zone), and the frequency breakdown (frequency_value).
Before August 6, all three worked by default in every ad account. Since August 6, they only return results for accounts that have explicitly opted in.
The part that makes this dangerous is the failure mode.
- A non-opted account doesn’t get an error message, a warning, or an email.
- The request succeeds. The API returns 200.
- The data array is just empty, and Ads Manager renders that as a blank or zeroed-out report.
A device-by-placement report that showed real numbers on August 5 can look like it collapsed on August 6, with no campaign change behind it at all.
The restriction applies to any breakdown combination that includes device, so a routine device-by-age or device-by-placement pull dies the same silent way.
Airbyte’s documentation on the change notes the requirement applies specifically to non-sales-supported accounts, meaning smaller and mid-market advertisers managing their own accounts are the ones most exposed.
Larger accounts with a dedicated Meta sales relationship may already be covered.
Who feels this first
Three groups carry the most risk here.
- Anyone reading Meta performance through a third-party dashboard, Looker Studio, Power BI, Supermetrics, Funnel, or an in-house Marketing API pipeline, inherits whatever Meta hands back without necessarily knowing the source data went quiet.
- Agencies managing device or hourly reporting across multiple client accounts are exposed account by account, since the opt-in isn’t global, it has to be set per ad account.
- And anyone who builds automated reports or alerts on top of these breakdowns is at risk of a tool writing zeroes into a table instead of flagging that something upstream changed, because an empty 200 looks identical to a request that succeeded and genuinely found nothing.
Why this matters beyond one broken report
This is a narrower version of a pattern AdBeacon keeps flagging: platform-reported numbers aren’t just vulnerable to inflation, they’re vulnerable to silently disappearing, and the platform’s own API won’t tell you which one happened.
A device report that goes to zero looks identical, from the API’s perspective, to a device report where mobile genuinely stopped converting.
Only a human checking the account, or independent, first-party attribution sitting outside the platform, can tell the difference. The accounts likeliest to get burned here are the ones that would have reported a real campaign collapse in a Monday meeting without checking whether it was a settings toggle Meta never announced through any help center article.
What to check this week
- Pull a device or hourly report from both August 5 and a recent date, and compare them. If the more recent one is empty where the earlier one had numbers, that’s the opt-in gap, not a performance problem.
- Opt in under Additional Breakdowns in Ads Manager’s reporting view, on every account you manage. There’s no bulk toggle inside the standard UI, so this has to happen account by account.
- For agency-scale management, use the enablement endpoint (POST /act_<ID>/insights/feature-settings) to opt accounts in programmatically. It’s enable-only, there’s no API path to disable it, and Meta’s own documentation is inconsistent about whether the asynchronous report job workaround still works, so don’t rely on that as a fallback.
- Expect roughly a day for history to backfill once an account opts in. Don’t panic if the numbers don’t reappear instantly.
- Before anyone flags a campaign collapse, check this first. A device or hourly report that suddenly reads zero is far more likely to be this opt-in gap than an actual overnight drop in mobile performance.
This is exactly the kind of change that punishes accounts that weren’t paying attention: no announcement email, no error in the API, just a quieter dashboard that looks like bad news until someone checks the setting.
If you want attribution data that doesn’t depend on a platform’s opt-in toggle to keep showing up, book a live AdBeacon demo.
—-
FAQ
What Meta Ads breakdowns stopped working on August 6, 2026?
The device breakdown (impression_device), the hourly breakdown (hourly_stats_aggregated_by_audience_time_zone), and the frequency breakdown (frequency_value) all now require a per-account opt-in. Accounts that haven’t opted in get an empty result instead of an error.
How do I know if my Meta account is affected?
Pull a device or hourly report and compare a date before August 6 to a recent date. If the recent report is empty or zeroed out where the earlier one had data, your account hasn’t opted in.
How do I fix a Meta device or hourly report that’s showing zero?
In Ads Manager’s reporting view, go to Additional Breakdowns and enable the affected breakdown for that ad account. For managing many accounts at once, use the enablement endpoint at POST /act_<ID>/insights/feature-settings. History typically backfills within about a day.
Does this affect Meta’s Conversions API or ad delivery?
No. This is a reporting and Insights API change only. It affects what data breakdowns return, not how ads are delivered or how conversions are tracked.
Why didn’t Meta send a warning before this took effect?
Meta documented the change in developer-facing update notes, but there’s no dedicated help center article and no account-level email alert. The API also returns a normal success response with an empty result, rather than an error, which is why the change is easy to miss.