Connect Meta Ads to ChatGPT through Windsor, and a pattern shows up fast: ChatGPT users pull setup and configuration fields, campaign objective, optimization goal, targeting, budget, creative, far more often than they pull spend and performance numbers. Claude and Copilot users lean toward reporting; ChatGPT users lean toward auditing whether the account is even built correctly.
This page is that audit, already assembled. Ten fields, pulled for every active ad set, checked against four things that quietly waste budget, plus the exact prompts to pull the data and fix what’s wrong.
The audit fields
Pull these ten fields for every active ad set in the account:
| Field | What it tells you |
campaign_objective |
What the campaign is supposed to optimize toward |
adsset_optimization_goal |
What the ad set is actually bidding to optimize |
adset_bid_strategy |
How the ad set bids in the auction |
adset_destination_type |
Where a click lands (website, app, Messenger, Instagram Direct) |
adset_targeting |
The full audience spec: geo, age, interests, placements |
adset_daily_budget |
How much each ad set is allowed to spend per day |
campaign_effective_status |
Whether the campaign is actually active, not just not-paused |
body |
The ad copy running |
title |
The ad’s link title |
call_to_action_type |
The button shown on the ad |
If any of these come back “not valid for fields param,” you’ve likely mistyped a field id rather than hit a real restriction, see the Facebook Ads “Field Not Valid” error guide for the exact fix per field.
The four checks
1. Objective vs. optimization goal mismatch
A campaign’s campaign_objective sets what Meta validates ads against; the ad set’s adsset_optimization_goal is what it actually bids on. The two can drift, a sales-objective campaign running an ad set optimized for link clicks or reach instead of conversions, which quietly caps performance without ever throwing an error. Fix: update_adset to reset optimization_goal to match the objective.
2. Budget spread
Compare adset_daily_budget across active ad sets in the same campaign. Uneven splits, or too many active ad sets dividing a small total budget, mean each one exits the learning phase slower and none gets enough signal to optimize well. Fix: set_adset_budget to consolidate spend into fewer, better-funded ad sets.
3. Overlapping targeting
adset_targeting is a full JSON spec: geo, age, gender, interests, placements. When two active ad sets in the same campaign target substantially the same audience, they enter the same auction and bid against each other, raising your own costs. Fix: update_adset to narrow or differentiate targeting so ad sets stop competing with themselves.
4. Creative reuse across ad sets
Compare body, title, and call_to_action_type across ads in different active ad sets. The same creative running unchanged across several ad sets isn’t really being tested, and it fatigues faster since the combined audience sees it more often. Fix: update_ad_creative to rotate in a genuinely different variant for at least one ad set.
The prompt that runs the audit
One prompt covers the pull and the analysis:
Pull campaign_objective, adsset_optimization_goal, adset_bid_strategy,
adset_destination_type, adset_targeting, adset_daily_budget,
campaign_effective_status, body, title, and call_to_action_type for
every active ad set in this account. Then flag:
1. Any ad set whose optimization goal doesn't match its campaign's objective
2. Active ad sets in the same campaign with daily budgets that differ by more than 3x
3. Active ad sets in the same campaign whose targeting overlaps significantly
4. Ads in different ad sets reusing the same body, title, and CTA
List what you find before changing anything.
Once you’ve reviewed the findings, a second prompt applies the fixes:
For the mismatched ad set, update its optimization goal to match the
campaign objective. For the two ad sets splitting budget unevenly,
rebalance their daily budgets. For the overlapping ad sets, narrow one
of their targeting specs so they stop competing with each other. Show
me the exact changes before applying them.
Related reading
- Meta Ads Analytics: A Complete Guide to Facebook Ads Data
- What Happens When an AI Assistant Creates Meta Ad Sets
- Managing Meta Ads from ChatGPT
- Managing Meta Ads from Claude
- All available write actions across every connected platform
- Facebook Ads “Field Not Valid” error: troubleshooting guide
FAQs
Do I need to run all four checks every time?
No. Run the full pull periodically (weekly or after major campaign changes), but the checks are independent, you can ask your assistant to run just the budget-spread check or just the targeting-overlap check on demand.
Will fixing a mismatch pause my campaign or lose data?
No. Every fix here (updating an optimization goal, rebalancing a budget, narrowing targeting, or swapping a creative) edits the existing object in place. None of these actions pause, delete, or recreate a campaign.
What if my assistant flags an issue that's intentional?
Not every mismatch is a mistake, some teams deliberately run different optimization goals or overlapping targeting for testing purposes. Treat the audit as a list to review, not a list to auto-fix; the second prompt only applies changes you’ve confirmed after seeing the findings.

