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 waste budget without an error message, 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:
-
campaign_objective: What the campaign is supposed to optimize toward -
adsset_optimization_goal: What the ad set bids 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 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 bids on. The two can drift, a sales-objective campaign running an ad set optimized for link clicks or reach instead of conversions, which 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 is not being tested, and it fatigues faster since the combined audience sees it more often. Fix: update_ad_creative to rotate in a different variant for at least one ad set. It builds a new creative with your changes and points the same ad at it.
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.
Example: the audit on our ME Beats account
We asked ChatGPT, through the Windsor.ai plugin, to run the first prompt on our own Meta Ads account, ME Beats. Every ME Beats ad set is paused today. We asked for the ad sets that spent money in the last 30 days instead of the active ones. Three ad sets in two campaigns qualified.

- Objective vs. optimization goal: no mismatch. All three ad sets run in sales campaigns (OUTCOME_SALES) and optimize for website conversions (OFFSITE_CONVERSIONS).
-
Budget spread: ChatGPT marked this check “Cannot verify”, because
adset_daily_budgetis empty on all three ad sets. Both campaigns set the budget at campaign level, $30.00 a day each (campaign_daily_budget). In an account like this, addcampaign_daily_budgetto the prompt and useset_campaign_budgetfor the fix. - Targeting: ChatGPT marked this “Potential overlap”, but the two ad sets in MIDI 5 Email TEST are kept apart: the cold ad set targets a 1% lookalike of our customer list and excludes the list itself, which the Retarget ad set targets. Both use the same countries, age range and placements. The Vol.5 ad set (US, age 21 to 55, Advantage audience on) is in another campaign and outside check 3; ChatGPT still pointed out the shared US audience.
- Creative reuse: no exact duplicate. All three ads share the title “SOUL MIDI DRUM PACK VOL.5 | AD2 PRESETS” and the Shop Now button, with three different body texts.
Nothing in the account changed; the prompt only lists findings.
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 ad set or ad; a creative swap creates a new creative and points the same ad at it. 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.

