Connect Facebook Ads (Meta Ads) to Claude
Automatically sync your Facebook Ads data to Claude using the Windsor.ai connector.
Analyze your Facebook Ads data, including spend, ROAS, CPA, CTR, and conversions in seconds. Create campaigns and ad sets, pause or enable them, and adjust budgets directly from Claude.
Forget CSVs. Stop copy/paste. Connect data in minutes. No code required.
What Facebook Ads customers say about Windsor.ai
“I really like that Windsor.ai has a really simple API that’s easy to use. They are always updating it, which is great. There was even a situation where they added a specific feature for us, allowing us to use the fifteen-minute update by having control over the cache. Their communication and attention to the client are awesome, making me appreciate their customer service even more.”
“Windsor.ai makes it easy to integrate campaign platforms like Meta Ads and Shopify.”
“I like that the software enables me to connect source data from Google or Facebook to my CRM software, while making great insights inside different modules of this software.”
Which one do I need?
All four methods below get your Facebook Ads (Meta Ads) data in front of Claude. They differ in freshness, setup effort, and whether Claude can also act on your campaigns rather than just read them.
To help you navigate quicker, here’s what each method allows you to do. “Best for” leads so you can jump straight to the row that matches your situation.
| Windsor.ai | Manual CSV upload | Automation platforms | Marketing API / custom MCP | |
|---|---|---|---|---|
| Best for | Live analysis plus campaign management from Claude | A single one-off question | Scheduled pulls into spreadsheets | Bespoke workflows the others don’t cover |
| Live data | Yes, queried at prompt time | No, static snapshot | Close, on a schedule | Yes, if you build it |
| Cross-channel analysis | Yes, 350+ sources | Only what you upload | Limited, via Sheets | Only if you build it |
| Campaign management (write) | Yes: create, pause, budget | No | No | Yes, if you build it |
| Setup effort | Low (no code) | None, but repeated every report | Medium | High (developer task) |
The Marketing API route is last on purpose. It’s the heaviest-effort option (a real developer task), so it belongs at the end as the fallback for when the other three genuinely don’t cover your case.
Windsor.ai for live analysis and campaign management
Windsor.ai connects your Meta Ads account to Claude through Windsor MCP in about a minute, with no code. Claude queries your live spend, ROAS, CPA, CTR, and conversion data at prompt time, and Windsor’s write actions let it create, pause, and re-budget campaigns from the same conversation, always with your explicit confirmation before any change.
What it can do
- Query live Meta Ads performance, spend, ROAS, CPA, CTR, conversions, across one or many ad accounts
- Blend Meta Ads with GA4, Google Ads, Shopify, CRM and billing data in the same conversation
- Manage campaigns from Claude: create campaigns and ad sets, boost posts, pause or enable, set budgets, with your confirmation first
- Pull custom Facebook Pixel conversions and full breakdowns (age, gender, geo, placement, device)
What it can't do
- Design net-new ad creatives, boosting reuses an existing post's creative
- Manage Instagram organic content, that's the separate Instagram connector (Instagram Ads are included here)
Setup takes about a minute
Go to onboard.windsor.ai/app/facebook, grant access and authorise via Meta's OAuth. This pulls campaigns, ad sets, ads, creatives and conversions, with custom Pixel conversions detected automatically.
In Claude, open Customize, then Connectors, search for Windsor and click Add. Sign in to your Windsor.ai account when prompted, and the connector appears in your Connectors list. You can also open the Windsor.ai listing in the Claude directory (https://claude.ai/directory/360c0c31-4bb6-42ca-8e50-5da0a100a68e) and click Connect.
Open a new chat and query your Meta Ads data in plain language, or tell Claude to pause, boost, or re-budget something and approve the change it proposes.
No code, API calls, or custom pipelines required. Runs on Windsor MCP for Claude.
See the 60-second setup
A walkthrough of connecting Meta Ads to Claude through Windsor.ai.
What data is available
| Meta Ads level | Key fields | What Claude can do with it |
|---|---|---|
| Campaign / ad set / ad performance | spend, impressions, clicks, ctr, cpc, cpm, frequency, reach | Performance reports, WoW/MoM comparisons, scaling decisions |
| Conversions & revenue | actions_purchase, action_values_purchase, actions_offsite_conversion_fb_pixel_purchase | ROAS and CPA analysis, funnel drop-off detection |
| Custom Pixel conversions | custom_conversion_action_name, custom_conversion_id, custom_conversion_rule, counts and values | Reporting on your own conversion definitions |
| Breakdowns | age, gender, geo, placement, device | Audience and placement optimisation |
| Creative performance | ad_name, creative fields, outbound_clicks, outbound_clicks_ctr | Fatigue detection, winning-angle analysis |
| Write actions | campaigns, ad sets, ads, budgets, boosted posts | Acting on the analysis without leaving Claude |
Queried live against the Meta Ads API, so there is no fixed sync schedule or cache delay. Full list in the Facebook Ads field reference.
Example prompts
Performance reporting
Summarize my Facebook Ads performance for the last 30 days by campaign. Include spend, impressions, clicks, CTR, CPC, conversions, CPA, and ROAS. Highlight the top 3 and bottom 3 campaigns by ROAS.
Break down performance over the last 30 days by audience (age, gender, geo) and placement/device. Show which segments have the lowest CPA and highest ROAS, and recommend targeting and placement changes.
Budget and scaling
Calculate my Return on Ad Spend by dividing action_values_purchase by spend across all active campaigns over the last 30 days. Correlate the top 3 highest-ROAS campaigns with their frequency and cpm metrics to tell me if I have room to scale the budget without exhausting the audience.
Based on the last 30 days, recommend how to reallocate the budget across campaigns and ad sets to improve overall ROAS. Specify what to scale, what to pause, and what to test next.
Review all ad sets where spend is over $500 this week. Identify any where the cost per purchase is 20% higher than my account average, and tell me if the drop in efficiency stems from a rising cpc or a drop in website conversion rate.
Creative and ad fatigue
Break down the outbound_clicks_ctr by ad_name. Look at my top 5 ads: what common themes, formats, or primary text keywords are driving the highest volume of outbound_clicks at the lowest cost_per_outbound_click?
Identify ad fatigue in my Meta Ads over the last 14 days vs the previous 14 days, at the ad and creative level. Flag ads where frequency is up and at least two of these worsened: CTR down, CPC up, CPA up, conversion rate down, ROAS down. Recommend next actions for each flagged ad.
Identify my top 10 ads by ROAS from the last 30 days. Summarize what likely makes each work (hook, offer, audience fit, CTA, tone), then generate 15 new ad copy variations inspired by these winners, labeled by angle.
Conversions and tracking
Analyze the daily trend between link_clicks and actions_offsite_conversion_fb_pixel_purchase for this month. Are there specific days of the week where the conversion rate drops significantly despite stable impressions and spend, indicating a potential tracking drop-off?
Show me performance for my custom Facebook Pixel conversions over the last 30 days. Break down by custom conversion name and include spend, conversions, CPA, and ROAS.
True ROAS
Calculate true ROAS across all my Meta Ads accounts for the last 30 days. Use Meta spend and Shopify revenue attributed to Meta (utm_source/utm_medium). Show total spend, attributed revenue, ROAS, and a daily trend table.
Campaign management (write actions)
Act as a senior media buyer. Based on the current spend, cpc, and purchase data across the whole account, give me a prioritized, 3-step optimization plan, and pause the ads suffering from fatigue after I confirm.
Pause every ad set with a CPA above my 30-day account average and frequency above 4. Show me the list and wait for my approval before pausing anything.
Cross-channel questions to ask next
- Which Meta campaigns produce revenue in GA4 or Shopify, not just link clicks
- How Meta CPAs compare with Google Ads on the same conversion
- Whether rising frequency on Meta correlates with falling branded search demand
- Blended ROAS across Meta and LinkedIn Ads for the same launch
Manual CSV export and upload
The zero-setup route: export a report from Meta Ads Manager as a CSV and upload it into a Claude conversation. For a single question about a fixed period, this works fine on any Claude plan.
What it can do
- One-off analysis with no account connection or new tools
- Works on any Claude plan, including free
- Good enough for a fixed-period question you will not repeat
What it can't do
- Stay current, the data is a static snapshot that goes stale the moment you export it
- Avoid repeat work, every follow-up period means another export and upload
- Handle big accounts well, file-size and row limits arrive fast
- Act on campaigns, Claude can only read what you uploaded
How: Ads Manager, Reports, Export table data as CSV, then drag the file into Claude and ask your question.
Automation platforms (Zapier, Make, n8n)
Zapier, Make, or n8n can pull Meta Ads data into Google Sheets on a schedule, and Claude reads the Sheet. This suits teams that want a spreadsheet that stays roughly current without manual exports, or an event-triggered workflow where Meta Ads is one step among several tools. It is a different job from Methods 1 and 2: those answer questions on demand, this keeps a copy of the data flowing on a timer.
What it can do
- Scheduled refreshes into a Sheet the whole team can also use
- Trigger actions off events as one step in a broader workflow spanning other tools
What it can't do
- Deliver truly live numbers, you get whatever the last scheduled run pulled
- Run itself, workflow maintenance is on you and broken runs fail quietly
- Manage campaigns from Claude, and Sheets caps how much history fits
Meta Marketing API with custom MCP or GPT-style actions
If none of the above cover your workflow (a niche endpoint, unusual permissions, an internal tool), you can build your own bridge with Meta’s Marketing API, either as a custom MCP server for Claude or via Claude’s tool use. Open-source Meta Ads MCP projects exist as starting points.
This is the heaviest-effort route here: you are wiring up auth, token refresh, and rate-limit handling yourself rather than doing a no-code setup.
What it can do
- Whatever you build, full flexibility over endpoints, fields and actions
- Cover workflows the no-code methods do not support
What it can't do
- Work without developer effort, there is no no-code path here
- Avoid ongoing maintenance, Meta API versions and access tokens rotate
Reach for this only when Methods 1 to 3 genuinely do not cover your case. It carries ongoing build and maintenance cost that the other three do not.
Available actions
Create Ad Set Create a new ad set in an existing Meta Ads campaign (Facebook or Instagram). Created paused by default so it does not spend until enabled. Budget amounts are in the account currency minor unit (e.g. cents: 5000 means 50.00). Provide at most one of daily_budget or lifetime_budget; omit both only when the campaign uses campaign budget optimization. lifetime_budget requires end_time. Some optimization goals require promoted_object, a Meta spec naming what is optimized (e.g. {"pixel_id": "<id>", "custom_event_type": "PURCHASE"} for conversions, or {"page_id": "<id>"} for page likes). destination_type sets where the ad sends people; for boosting an existing post (boost_post) use ON_POST with optimization_goal POST_ENGAGEMENT to keep engagement on the post (no call to action needed). A website or undefined destination instead makes Meta require a website URL and call to action in the creative.
Create a new ad set in an existing Meta Ads campaign (Facebook or Instagram). Created paused by default so it does not spend until enabled. Budget amounts are in the account currency minor unit (e.g. cents: 5000 means 50.00). Provide at most one of daily_budget or lifetime_budget; omit both only when the campaign uses campaign budget optimization. lifetime_budget requires end_time. Some optimization goals require promoted_object, a Meta spec naming what is optimized (e.g. {"pixel_id": "<id>", "custom_event_type": "PURCHASE"} for conversions, or {"page_id": "<id>"} for page likes). destination_type sets where the ad sends people; for boosting an existing post (boost_post) use ON_POST with optimization_goal POST_ENGAGEMENT to keep engagement on the post (no call to action needed). A website or undefined destination instead makes Meta require a website URL and call to action in the creative.
Create Campaign Create a new Meta Ads campaign (Facebook or Instagram). Created paused by default so it does not spend until enabled. objective is a Meta campaign objective (e.g. OUTCOME_TRAFFIC, OUTCOME_LEADS, OUTCOME_SALES). special_ad_categories must list any regulated categories the ads fall under (e.g. HOUSING, EMPLOYMENT, CREDIT) or be empty. Setting a campaign budget enables campaign budget optimization; amounts are in the account currency minor unit (e.g. cents: 5000 means 50.00). Provide at most one of daily_budget or lifetime_budget. When no campaign budget is set, some accounts require is_adset_budget_sharing_enabled to be specified.
Create a new Meta Ads campaign (Facebook or Instagram). Created paused by default so it does not spend until enabled. objective is a Meta campaign objective (e.g. OUTCOME_TRAFFIC, OUTCOME_LEADS, OUTCOME_SALES). special_ad_categories must list any regulated categories the ads fall under (e.g. HOUSING, EMPLOYMENT, CREDIT) or be empty. Setting a campaign budget enables campaign budget optimization; amounts are in the account currency minor unit (e.g. cents: 5000 means 50.00). Provide at most one of daily_budget or lifetime_budget. When no campaign budget is set, some accounts require is_adset_budget_sharing_enabled to be specified.
Create Ad Create a new ad in an existing Meta Ads ad set (Facebook or Instagram). Created paused by default so it does not spend until enabled. The simplest way is to provide page_id and link plus optional text (message, headline, description), image_url and call_to_action_type; these build a single-image link ad creative automatically. For a Click-to-Message ad, set messaging_destination (MESSENGER or INSTAGRAM_DIRECT) instead of link; the message opens a conversation with the page. For a video ad, upload the video first with create_ad_video and pass its video_id here with page_id and a required thumbnail image_url; message becomes the primary text, headline the title, description the caption, and call_to_action_type (with link) adds a button. For advanced cases, pass a full Meta creative spec via creative instead (e.g. {"creative_id": "<id>"} to reuse an existing creative, or {"object_story_spec": {...}}). Provide either the individual creative fields or creative, not both.
Create a new ad in an existing Meta Ads ad set (Facebook or Instagram). Created paused by default so it does not spend until enabled. The simplest way is to provide page_id and link plus optional text (message, headline, description), image_url and call_to_action_type; these build a single-image link ad creative automatically. For a Click-to-Message ad, set messaging_destination (MESSENGER or INSTAGRAM_DIRECT) instead of link; the message opens a conversation with the page. For a video ad, upload the video first with create_ad_video and pass its video_id here with page_id and a required thumbnail image_url; message becomes the primary text, headline the title, description the caption, and call_to_action_type (with link) adds a button. For advanced cases, pass a full Meta creative spec via creative instead (e.g. {"creative_id": "<id>"} to reuse an existing creative, or {"object_story_spec": {...}}). Provide either the individual creative fields or creative, not both.
Update Campaign Update editable attributes of a Meta Ads campaign (Facebook or Instagram). Provide only the fields to change; at least one is required. spend_cap is a lifetime spend limit in the account currency minor unit (e.g. cents: 5000 means 50.00). special_ad_categories lists the regulated categories the ads fall under (e.g. HOUSING, EMPLOYMENT, CREDIT) or is empty. Use pause_campaign/enable_campaign to change status and set_campaign_budget to change the budget. objective is fixed at creation and cannot be updated.
Update editable attributes of a Meta Ads campaign (Facebook or Instagram). Provide only the fields to change; at least one is required. spend_cap is a lifetime spend limit in the account currency minor unit (e.g. cents: 5000 means 50.00). special_ad_categories lists the regulated categories the ads fall under (e.g. HOUSING, EMPLOYMENT, CREDIT) or is empty. Use pause_campaign/enable_campaign to change status and set_campaign_budget to change the budget. objective is fixed at creation and cannot be updated.
Update Ad Set Update editable attributes of a Meta Ads ad set (Facebook or Instagram). Provide only the fields to change; at least one is required. bid_amount is in the account currency minor unit (e.g. cents: 500 means 5.00). Switching bid_strategy to a capped strategy (LOWEST_COST_WITH_BID_CAP or COST_CAP) requires bid_amount in the same call. end_time is an ISO 8601 timestamp less than one year ahead (e.g. 2027-01-01T00:00:00-0800). Use pause_adset/enable_adset to change status and set_adset_budget to change the budget.
Update editable attributes of a Meta Ads ad set (Facebook or Instagram). Provide only the fields to change; at least one is required. bid_amount is in the account currency minor unit (e.g. cents: 500 means 5.00). Switching bid_strategy to a capped strategy (LOWEST_COST_WITH_BID_CAP or COST_CAP) requires bid_amount in the same call. end_time is an ISO 8601 timestamp less than one year ahead (e.g. 2027-01-01T00:00:00-0800). Use pause_adset/enable_adset to change status and set_adset_budget to change the budget.
Pause Campaign Pause an active Meta Ads campaign (Facebook or Instagram). Reversible via enable_campaign.
Pause an active Meta Ads campaign (Facebook or Instagram). Reversible via enable_campaign.
Set Campaign Budget Set the daily or lifetime budget of a Meta Ads campaign (Facebook or Instagram). The amount is in the account currency minor unit (e.g. cents: 5000 means 50.00). Only one budget type applies at a time; setting one replaces the other. Meta rejects frequent budget changes on the same campaign; space out repeated changes instead of adjusting in rapid succession.
Set the daily or lifetime budget of a Meta Ads campaign (Facebook or Instagram). The amount is in the account currency minor unit (e.g. cents: 5000 means 50.00). Only one budget type applies at a time; setting one replaces the other. Meta rejects frequent budget changes on the same campaign; space out repeated changes instead of adjusting in rapid succession.
Enable Campaign Activate a paused Meta Ads campaign (Facebook or Instagram). Reversible via pause_campaign.
Activate a paused Meta Ads campaign (Facebook or Instagram). Reversible via pause_campaign.
Enable Ad Activate a paused Meta Ads ad (Facebook or Instagram). Reversible via pause_ad.
Activate a paused Meta Ads ad (Facebook or Instagram). Reversible via pause_ad.
Enable Ad Set Activate a paused Meta Ads ad set (Facebook or Instagram). Reversible via pause_adset.
Activate a paused Meta Ads ad set (Facebook or Instagram). Reversible via pause_adset.
Pause Ad Pause an active Meta Ads ad (Facebook or Instagram). Reversible via enable_ad.
Pause an active Meta Ads ad (Facebook or Instagram). Reversible via enable_ad.
Update Ad Creative Edit the creative of an existing Meta Ads ad (Facebook or Instagram): ad copy (message), headline, description, destination link, image, call-to-action button, URL tracking tags and Advantage+ enhancement settings. Meta treats ad creatives as immutable, so this copies the ad's current creative (keeping its name, url_tags and degrees_of_freedom_spec), applies the changes, creates the result as a new creative and re-points the ad at it; the ad keeps its id, but the returned creative id is new. Provide ad_id plus at least one field to change. Editable content fields depend on the creative's media type: link ads support all of them; video ads support message, headline, description, image_url (thumbnail), link and call_to_action_type (the link lives on the button, so adding a link to a video ad without a button also requires call_to_action_type); photo ads only message (the caption) and image_url; text ads only message. For carousel ads (link ads with cards), message edits the text above the cards; headline, description, link, image_url and call_to_action_type live on the cards, so also pass card_index (0-based) to edit one specific card. url_tags (e.g. 'utm_source=x&utm_medium=y') and degrees_of_freedom_spec (a raw Meta spec) can be edited on any creative, including ads that promote an existing organic post (e.g. boosted posts) — but content fields on those ads cannot be edited; edit the post itself instead. Dynamic/catalog creatives cannot be edited at all. Omitted fields keep their current values; to clear url_tags pass an empty string, and to reset degrees_of_freedom_spec to Meta's default enhancement behavior pass an empty object. To swap the ad to a different existing creative, use update_ad instead.
Edit the creative of an existing Meta Ads ad (Facebook or Instagram): ad copy (message), headline, description, destination link, image, call-to-action button, URL tracking tags and Advantage+ enhancement settings. Meta treats ad creatives as immutable, so this copies the ad's current creative (keeping its name, url_tags and degrees_of_freedom_spec), applies the changes, creates the result as a new creative and re-points the ad at it; the ad keeps its id, but the returned creative id is new. Provide ad_id plus at least one field to change. Editable content fields depend on the creative's media type: link ads support all of them; video ads support message, headline, description, image_url (thumbnail), link and call_to_action_type (the link lives on the button, so adding a link to a video ad without a button also requires call_to_action_type); photo ads only message (the caption) and image_url; text ads only message. For carousel ads (link ads with cards), message edits the text above the cards; headline, description, link, image_url and call_to_action_type live on the cards, so also pass card_index (0-based) to edit one specific card. url_tags (e.g. 'utm_source=x&utm_medium=y') and degrees_of_freedom_spec (a raw Meta spec) can be edited on any creative, including ads that promote an existing organic post (e.g. boosted posts) — but content fields on those ads cannot be edited; edit the post itself instead. Dynamic/catalog creatives cannot be edited at all. Omitted fields keep their current values; to clear url_tags pass an empty string, and to reset degrees_of_freedom_spec to Meta's default enhancement behavior pass an empty object. To swap the ad to a different existing creative, use update_ad instead.
Pause Ad Set Pause an active Meta Ads ad set (Facebook or Instagram). Reversible via enable_adset.
Pause an active Meta Ads ad set (Facebook or Instagram). Reversible via enable_adset.
Set Ad Set Budget Set the daily or lifetime budget of a Meta Ads ad set (Facebook or Instagram). The amount is in the account currency minor unit (e.g. cents: 5000 means 50.00). Only one budget type applies at a time; setting one replaces the other. Meta allows at most 4 budget changes per ad set per hour; further changes are rejected until the hour passes.
Set the daily or lifetime budget of a Meta Ads ad set (Facebook or Instagram). The amount is in the account currency minor unit (e.g. cents: 5000 means 50.00). Only one budget type applies at a time; setting one replaces the other. Meta allows at most 4 budget changes per ad set per hour; further changes are rejected until the hour passes.
Update Ad Update editable attributes of a Meta Ads ad (Facebook or Instagram). Provide only the fields to change; at least one is required. creative swaps the ad to a different creative and is a Meta creative reference (e.g. {"creative_id": "<id>"}). conversion_domain is the registrable domain the ad drives conversions to (e.g. example.com), used for conversion attribution. display_sequence orders the ad within a sequenced campaign. Use pause_ad/enable_ad to change status.
Update editable attributes of a Meta Ads ad (Facebook or Instagram). Provide only the fields to change; at least one is required. creative swaps the ad to a different creative and is a Meta creative reference (e.g. {"creative_id": "<id>"}). conversion_domain is the registrable domain the ad drives conversions to (e.g. example.com), used for conversion attribution. display_sequence orders the ad within a sequenced campaign. Use pause_ad/enable_ad to change status.
Boost Post Boost (promote) an existing organic Facebook or Instagram post by creating a paid ad for it in an existing Meta Ads ad set. Provide the full post id (in '{page_id}_{post_id}' form, as it appears in the connector data) and the ad set to place the ad in. The ad reuses the published post as its creative via object_story_id, so no new copy or media is created. The target ad set MUST belong to an engagement campaign (objective OUTCOME_ENGAGEMENT) and name the post's page in its promoted_object; build it with create_campaign and create_adset first if needed. Two ad set shapes work: an ON_POST destination with optimization_goal POST_ENGAGEMENT (engagement on the post itself, no call-to-action needed), or a FACEBOOK_PAGE destination with optimization_goal PROFILE_AND_PAGE_ENGAGEMENT, which additionally requires a call-to-action button on the ad — pass call_to_action_type (e.g. VISIT_PROFILE) for that case, otherwise Meta rejects the ad with a 'call-to-action required' error. The page promoted by the ad set and the post's page must match, and the access token must have ads permission on that page. Created paused by default so it does not spend until enabled; use enable_ad to activate it.
Boost (promote) an existing organic Facebook or Instagram post by creating a paid ad for it in an existing Meta Ads ad set. Provide the full post id (in '{page_id}_{post_id}' form, as it appears in the connector data) and the ad set to place the ad in. The ad reuses the published post as its creative via object_story_id, so no new copy or media is created. The target ad set MUST belong to an engagement campaign (objective OUTCOME_ENGAGEMENT) and name the post's page in its promoted_object; build it with create_campaign and create_adset first if needed. Two ad set shapes work: an ON_POST destination with optimization_goal POST_ENGAGEMENT (engagement on the post itself, no call-to-action needed), or a FACEBOOK_PAGE destination with optimization_goal PROFILE_AND_PAGE_ENGAGEMENT, which additionally requires a call-to-action button on the ad — pass call_to_action_type (e.g. VISIT_PROFILE) for that case, otherwise Meta rejects the ad with a 'call-to-action required' error. The page promoted by the ad set and the post's page must match, and the access token must have ads permission on that page. Created paused by default so it does not spend until enabled; use enable_ad to activate it.
Set Page Welcome Message Set or update the automated welcome message (greeting / ice breaker) shown when a user opens the conversation from a Meta Ads Click-to-Message ad (Messenger or Instagram, OUTCOME_ENGAGEMENT / CONVERSATIONS). The welcome message lives on the ad creative, which Meta treats as immutable, so this builds a new creative that copies the ad's existing creative and only swaps the welcome message, then re-points the ad at it. Provide ad_id plus either welcome_message (plain greeting text, the common case) or welcome_message_spec (a full page_welcome_message structure for ice breakers / quick replies), not both. The change is verified by reading the new creative back; the action fails if Meta did not persist the value.
Set or update the automated welcome message (greeting / ice breaker) shown when a user opens the conversation from a Meta Ads Click-to-Message ad (Messenger or Instagram, OUTCOME_ENGAGEMENT / CONVERSATIONS). The welcome message lives on the ad creative, which Meta treats as immutable, so this builds a new creative that copies the ad's existing creative and only swaps the welcome message, then re-points the ad at it. Provide ad_id plus either welcome_message (plain greeting text, the common case) or welcome_message_spec (a full page_welcome_message structure for ice breakers / quick replies), not both. The change is verified by reading the new creative back; the action fails if Meta did not persist the value.
Create Ad Video Upload a video to a Meta Ads ad account from a public URL so it can be used in a video ad. Meta fetches the file from video_url and transcodes it; the action waits until the video is ready and returns its video_id. Pass that video_id to create_ad together with page_id and a thumbnail image_url to build the video ad. The upload cannot be undone via an action.
Upload a video to a Meta Ads ad account from a public URL so it can be used in a video ad. Meta fetches the file from video_url and transcodes it; the action waits until the video is ready and returns its video_id. Pass that video_id to create_ad together with page_id and a thumbnail image_url to build the video ad. The upload cannot be undone via an action.
Conclusions: which method wins for your use case
| Your situation | Recommended | Why |
|---|---|---|
| “I want to analyze live results and act on them, create, pause, re-budget, without leaving Claude” | Windsor.ai | Only method with both live data and write actions |
| “I need Meta Ads next to GA4, Google Ads, or Shopify revenue” | Windsor.ai | Cross-channel analysis across 350+ sources is Windsor’s core differentiator |
| “I have one quick question about last month’s numbers” | Manual CSV upload | Fastest path for a true one-off, no account connection needed |
| “I want a spreadsheet that stays roughly current for the team” | Automation platforms | Scheduled pulls into Sheets are exactly that job |
| “None of the above cover what I need, and I have dev resources” | Custom Marketing API / MCP | Full flexibility, at the cost of build and maintenance effort |
FAQs
How do I connect Claude to Meta Ads?
Connecting Claude to Meta Ads (Facebook Ads) with Windsor.ai takes three steps and about a minute:
- Create a free Windsor.ai account and connect your Meta Ads account via OAuth.
- Add the Windsor MCP connector to Claude.
- Ask Claude anything about your Meta Ads performance, or tell it to create, pause, or re-budget campaigns.
The direction doesn’t matter: whether you think of it as connecting Meta Ads to Claude or connecting Claude to your Meta Ads account, it’s the same one-minute setup. For a full walkthrough with screenshots, see the step-by-step guide on how to connect Facebook Ads to Claude automatically.
Can I use this integration with Claude Code?
Yes. Windsor MCP works anywhere Claude supports MCP connectors: the Claude web app, Claude Desktop, and Claude Code. In Claude Code, add Windsor as an MCP server and you can query your Facebook Ads data (spend, ROAS, CPA, conversions, breakdowns) straight from your terminal sessions, alongside your other tools.
The setup is the same in all three: connect Meta Ads once in Windsor.ai, then add the Windsor MCP connector wherever you use Claude. See the Windsor MCP setup guide for Claude for each variant’s steps.
What can I do with my Facebook Ads data in Claude?
Once your Meta Ads data is available in Claude, you can:
- Generate instant performance reports (daily/weekly/monthly) with spend, ROAS, CPA, CTR, conversions, and more, returned as a text summary, visual dashboard, table, or CSV-ready output.
- Break down results by level (account, campaign, ad set, ad, creative) to quickly spot winners and losers.
- Diagnose performance changes by comparing periods (WoW/MoM) and flagging spikes/drops in CPA, ROAS, CTR, frequency, etc.
- Uncover audience and placement insights by segment (geo, age, gender, device, placement) to find the lowest-cost converters.
- Analyze creatives for fatigue (e.g., rising frequency + declining CTR/conversion rate) and get test ideas for new angles.
- Execute write actions directly from Claude, like creating campaigns and ad sets, boosting existing posts into paid ads, pausing/enabling campaigns, ad sets, and ads, and setting budgets.
- Create client-ready outputs like visual summaries, slide/table-ready dashboards, and action plans on demand and in plain language.
- Run cross-channel analysis (if connected) by combining Facebook Ads with GA4, Google Ads, Shopify, CRM data, etc., inside the same Claude conversation.
Find more details about Windsor MCP for Claude use cases in this guide: https://windsor.ai/how-to-use-windsor-mcp-examples-use-cases/.
How much does it cost to integrate Facebook Ads into Claude using Windsor.ai?
Windsor.ai’s pricing for Claude data integration can vary depending on the number of connected accounts and data sources. We offer absolutely transparent pricing plans, with Windsor MCP for Claude included in every plan.
How long does it take to connect Facebook Ads to Claude?
With Windsor.ai’s intuitive connector, the integration process takes just a minute. No technical expertise is required; connecting Facebook Ads to Claude is simple, straightforward, and completely code-free.
How does Windsor MCP connect Facebook Ads data to Claude?
Windsor MCP acts as a bridge between Meta Ads and Claude:
- You connect your Facebook/Meta Ads account to Windsor.ai (OAuth) so Windsor can access your data via the Meta Ads API.
- Windsor then pulls the data in the background, normalizes/cleans it, and structures it into analysis-ready datasets.
- When you use the Windsor MCP connector in Claude, Claude can query those datasets directly (instead of you exporting CSVs), so your answers are based on fresh, structured Meta Ads data; no code, no uploads, no manual prep.
Do you have helpful links to get started with integrating Facebook Ads and Claude using Windsor.ai?
Yes, we have helpful resources to help you get started. You can explore our official documentation and tutorials for Facebook Ads to Claude integration with Windsor.ai:
How often does the Facebook Ads data refresh in Claude via Windsor MCP?
With Windsor MCP, your Facebook Ads data refreshes whenever you query it in Claude. Each time you run a prompt, Windsor pulls the latest available numbers from the Meta Ads API, so you’re not working from a static CSV snapshot.
A couple of important notes:
- “Live” doesn’t always mean instant to-the-second: Meta can have natural reporting delays (especially for conversions), so some metrics may lag by minutes or longer depending on Meta’s reporting.
- If you’re comparing very recent data (e.g., “today”), it’s normal to see slight shifts as Meta finalizes results.
Can I analyze Instagram data in Claude via the same connector?
Yes. Claude can analyze Instagram data via the same Windsor MCP connector. You just need to connect Instagram (Organic) as an additional data source in your Windsor.ai account, and then query it in Claude the same way you do with Facebook Ads.
A couple of quick notes:
- Instagram Organic = profile/content metrics (posts, engagement, etc., depending on what you’ve connected).
- Instagram Ads is a part of the Facebook Ads connector.
Can Claude manage my Meta Ads campaigns?
Yes. Windsor’s write-enabled MCP gives Claude full campaign management access to your Meta Ads account. Here’s what you can do:
- Create campaigns: set objective (Traffic, Leads, or Sales), budget, bid strategy, and run dates.
- Create ad sets: define your target audience, where ads appear, and how Meta optimizes delivery.
- Boost an existing post: turn a published Facebook or Instagram post into a paid ad, reusing the original content instead of building new creative.
- Pause or enable campaigns, ad sets, and individual ads.
- Adjust budgets: set daily or lifetime spend limits at campaign or ad set level.
Nothing changes without your explicit approval. Claude shows you exactly what it’s about to do and waits for your confirmation before making any change.
Does this integration support custom Facebook Pixel conversions?
Yes. The Windsor MCP Facebook Ads connector supports custom Facebook Pixel conversions, so you can pull custom conversion metadata (e.g., custom conversion name/ID, event source, rule, retention days) and their related action counts/values, then analyze them in Claude.
In Windsor’s available Meta Ads fields, you’ll see custom conversion fields like custom_conversion_action_name, custom_conversion_id, custom_conversion_rule, plus custom conversion action count/value fields. These are what you’d use to report on Pixel custom conversions.
Example prompt:
Show me performance for my custom Facebook Pixel conversions over the last 30 days. Break down by custom conversion name and include spend, conversions, CPA, and ROAS. Highlight the top and bottom performers and suggest optimizations.
Is my advertising data used to train Claude's public models?
Data routed through Anthropic’s API (and Windsor.ai’s pipeline) is generally completely private and not used for model training, unlike consumer chat interfaces.
How far back can I pull historical Facebook Ads data?
In most cases, you can pull Facebook (Meta) Ads data as far back as your Meta ad account has reporting data available via the Meta Ads API.
Your exact historical lookback may also depend on your Windsor plan limits.
Tired of manual Facebook Ads data exports into Claude? Try Windsor.ai today to automate your reporting