Facebook Ads “Field Not Valid” and “Fields Incompatible” Errors: Troubleshooting Guide
If you request Facebook (Meta) Ads data through Windsor.ai and see a message like:
Sorry, some of the fields you have selected are not valid. Error message: (#100) adset is not valid for fields param. please check https://developers.facebook.com/docs/marketing-api/reference/ads-insights/ for all valid values
the field name you asked for does not exist in Facebook’s Marketing API under that spelling. Windsor passes the field straight through, so nothing is wrong with your connection or your ad account. This is the single most common Facebook error we see: it accounted for 2,835 failed requests across 1,658 teams in one week of production traffic.
A second, smaller family of errors happens when the fields you picked are individually valid but can’t be requested together, either a breakdown (gender, age, platform) that conflicts with certain metrics, or two breakdown dimensions that conflict with each other. Both are covered below.
Why this happens
Facebook’s ad reporting API doesn’t expose one field per concept. Instead, most metrics are split into families by two independent axes:
- What kind of number.
actions_*is a count,action_values_*is the revenue/value behind it,cost_per_action_type_*is cost per action,unique_actions_*is the deduplicated count. - Which attribution source. The same event (a purchase, a lead) is tracked separately per source:
omni_purchase(blended across every source),offsite_conversion_fb_pixel_purchase(your website pixel only),onsite_conversion_purchase(checkout inside Facebook/Instagram),app_custom_event_fb_mobile_purchase(in-app),offline_conversion_purchase(offline events you upload).
That means “purchases” alone isn’t a field, Windsor’s Facebook connector exposes 847 fields, and roughly 300 of them are variations on this actions/action_values/cost_per_action_type pattern across dozens of event types. A person or an AI assistant guessing a plain-English name (purchases, revenue, roas, adset) almost always lands on a name that looks right but isn’t one of the 847. This guide covers the structural fields (campaign, ad, ad set, budget, status, creative) with confirmed exact fixes. A follow-up guide will cover the purchases/leads/revenue family, which needs a live account to confirm the right default per attribution source.
Facebook’s naming is also inconsistent about which concept gets the plain name: ad_name and adset_name exist, but there’s no plain ad or adset field, while campaign alone does return the campaign name.
For the complete list of fields Windsor supports for this connector, see the Facebook Ads field reference. Each fix below is something you can hand to an AI assistant: describe what you actually selected and the join key, and Claude, ChatGPT or Copilot can split the request and merge the results itself.
Common causes, in order of how often we see them
1. Structural fields: campaign, ad, ad set, budget, status, and creative details
These are the highest-volume wrong guesses, and each has one exact fix. All are checked against Windsor’s live Facebook field schema.
| You typed | Use this Windsor field | What it returns |
|---|---|---|
| adset, adname (meaning the ad set) | adset_name | Ad Set Name |
| ad, adname (meaning the ad) | ad_name | Ad Name |
| cost | spend | Amount Spent |
| clicks_all | clicks | Clicks |
| daily_budget, campaign_budget, budget | adset_daily_budget or campaign_daily_budget | Daily budget at the ad set or campaign level (Facebook budgets can live on either) |
| lifetime_budget | adset_lifetime_budget or campaign_lifetime_budget | Lifetime budget, same either/or |
| budget_remaining | adset_budget_remaining or campaign_budget_remaining | Remaining budget |
| account_spend_cap | spend_cap | Account Spend Cap |
| billing_event | adset_billing_event | Ad Set Billing Event |
| targeting | adset_targeting | Ad Set Targeting Spec (raw targeting JSON) |
| promoted_object | adset_promoted_object | Ad Set Promoted Object |
| destination_type | adset_destination_type | Ad Set Destination Type |
| delivery_status, disable_reason | status (ad level), adset_effective_status, campaign_effective_status | Delivery status per level. Windsor exposes plain status only at the ad level; ad set and campaign use their own effective_status field |
| configured_status | campaign_configured_status | Only confirmed at the campaign level in the schema; ad and ad set expose status / effective_status instead |
| creative_name | name | Ad Creative Name (the plain “name” field is the creative’s name, not the ad’s) |
| ad_creative_body, creative_body, message | body | Ad Creative Body text |
| ad_creative_title, ad_creative_link_title | title | Ad Creative Title |
| ad_creative_link_url, destination_url | link or link_url | Ad Creative Link URL |
| ad_creative_thumbnail_url, creative_thumbnail_url | thumbnail_url | Ad Creative Thumbnail URL |
| ad_creative_id | creative_id | Creative ID |
| ad_creative_call_to_action_type | call_to_action_type | Call To Action Type (e.g. Shop Now, Learn More) |
| yearmonth | year_month | Yearmonth |
| landing_page_views | actions_landing_page_view | Landing Page Views, it’s an action count, not a standalone field |
| post_reactions | actions_post_reaction | Post Reactions |
| messaging_conversation_started_7d, messaging_conversations_started | actions_onsite_conversion_messaging_conversation_started_7d | Messaging conversations started. The _7d suffix is part of the exact field id, not optional |
Ask your assistant: “Look up the Windsor field id for [concept] in the Facebook field reference before requesting it, don’t guess the plain-English name.”
2. Breakdowns (age, gender, platform) incompatible with omni or ranking fields
Example error: “Breakdown fields [{gender, age}] are incompatible with ‘omni’ and ‘ranking’ fields {action_values_omni_purchase, actions_omni_purchase}”.
Demographic and placement breakdowns, gender, age, country, publisher_platform, platform_position, impression_device, run on Facebook’s delivery/insights pipeline. The omni_* actions and action_values fields, and Facebook’s ranking-quality fields, are computed on a different pipeline that doesn’t support being sliced by those breakdowns in the same request.
- Fix: pull the breakdown together with non-omni metrics (spend, clicks, impressions, and the source-specific actions_offsite_conversion_fb_pixel_purchase / actions_onsite_conversion_purchase fields all work fine with breakdowns), and pull the omni_* fields in a separate request without the breakdown. Join on campaign/ad set/ad and date.
- Ask your assistant: “Split this into one Windsor request with the gender/age breakdown and non-omni metrics, and another with the omni_ purchase fields and no breakdown, then join them by campaign and date.”
3. Two breakdown dimensions that can't combine with each other
Example error: “Sorry, the fields you have selected are not compatible with each other… Current combination of data breakdown columns (action_type, image_asset, video_asset) is invalid.”
This is separate from case 2: it’s two breakdown dimensions conflicting with each other, not a breakdown conflicting with a metric. action_type (splitting actions by type) is one of the pickier ones, it doesn’t combine with every creative-asset breakdown (image_asset, video_asset, and similar).
- Fix: request one breakdown dimension at a time. If you need both action_type and a creative-asset breakdown, run them as two requests and join on ad and date.
- Ask your assistant: “Request action_type and the creative-asset breakdown as two separate Windsor calls, then join the results by ad and date.”
One more limit worth knowing: the 37-month lookback
Example error: “(#N) The start date of the time range cannot be beyond 37 months from the current date.” This is Facebook’s own Marketing API limit, not a Windsor restriction, and it’s the third most common Facebook-specific error we see (317 occurrences, 219 teams in one week). If you need older history, it isn’t retrievable through the Ads Insights API at all; only data pulled and stored going forward will cover it.
General troubleshooting checklist
- If the error names a field you typed in plain English (adset, cost, budget, status), check the quick reference table above or the Facebook field reference before guessing again.
- If the error mentions breakdown fields being incompatible with omni or ranking fields, split the omni_* metrics into their own request without the breakdown.
- If the error mentions two breakdown columns being incompatible with each other, request one breakdown dimension per call.
- If the date range fails with a 37-month message, that’s Facebook’s own API limit; shorten the range.
- Still failing? Check the field directly against Facebook’s own Ads Insights API reference, the link the error message itself points to.
Still stuck?
If you’ve matched the field names and split the request as above and still see the error, reach out to support with:
- The full error message, verbatim, including the field or breakdown names.
- The exact Windsor field list you requested.
- Whether the same fields work directly against the Facebook Ads Insights API.
That’s the fastest way for us to identify a genuinely new restriction and add it to this guide.
Related reading
Tired of juggling fragmented data? Get started with Windsor.ai today to create a single source of truth