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.

Free forever plan No credit card needed
logo connect
Join over 19,000+ businesses that trust Windsor.ai to connect Facebook Ads to Claude
audi logo
colgate
asics
roche
novo nordisk logo
UBS
unicef
verisure
wpp
club med
skoda
heineken
puma
audi logo
colgate
asics
roche
novo nordisk logo
UBS
unicef
verisure
wpp
club med
skoda
heineken
puma

What Facebook Ads customers say about Windsor.ai

5.0

“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.”

Willian S.
5.0

“Windsor.ai makes it easy to integrate campaign platforms like Meta Ads and Shopify.”

Muhammad M.
4.5

“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.”

Djordje M.

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.

Method 1

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.

Skip CSV exports and manual formatting, get clean, ready-to-use answers straight in Claude
Normalises Meta Ads alongside 350+ other connectors so Claude can analyse across sources in one conversation
Tracks frequency and CTR trends at the creative level to catch ad fatigue early
Creates, pauses, and re-budgets campaigns from chat, with your approval before every 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

1
Connect Meta Ads to Windsor

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.

2
Add the Windsor MCP connector to Claude

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.

3
Ask questions, or give instructions

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
Method 2

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.

Method 3

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
Method 4

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.

Parameters
campaign_idstringRequirednamestringRequiredoptimization_goalstringRequiredbilling_eventstringRequiredtargetingobjectRequireddaily_budgetstringlifetime_budgetstringbid_amountstringend_timestringpromoted_objectstringdestination_typestringstatusstring
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.

Parameters
namestringRequiredobjectivestringRequiredspecial_ad_categoriesarraydaily_budgetstringlifetime_budgetstringbid_strategystringis_adset_budget_sharing_enabledstringstatusstring
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.

Parameters
adset_idstringRequirednamestringRequiredpage_idstringlinkstringmessagestringheadlinestringdescriptionstringimage_urlstringcall_to_action_typeenumvideo_idstringmessaging_destinationstringcreativestringstatusstring
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.

Parameters
campaign_idstringRequirednamestringbid_strategystringspecial_ad_categoriesstringspend_capstring
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.

Parameters
adset_idstringRequirednamestringtargetingstringoptimization_goalstringbid_amountstringbid_strategystringdestination_typestringend_timestring
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.

Parameters
campaign_idstringRequired
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.

Parameters
campaign_idstringRequiredbudget_typestringRequiredamountintegerRequired
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.

Parameters
campaign_idstringRequired
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.

Parameters
ad_idstringRequired
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.

Parameters
adset_idstringRequired
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.

Parameters
ad_idstringRequired
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.

Parameters
ad_idstringRequiredmessagestringheadlinestringdescriptionstringlinkstringimage_urlstringcall_to_action_typeenumurl_tagsstringdegrees_of_freedom_specstringcard_indexstring
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.

Parameters
adset_idstringRequired
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.

Parameters
adset_idstringRequiredbudget_typestringRequiredamountintegerRequired
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.

Parameters
ad_idstringRequirednamestringcreativestringconversion_domainstringdisplay_sequencestring
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.

Parameters
adset_idstringRequiredpost_idstringRequirednamestringRequiredcall_to_action_typestringstatusstring
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.

Parameters
ad_idstringRequiredwelcome_messagestringwelcome_message_specstring
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.

Parameters
video_urlstringRequirednamestringRequired

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

What is Windsor.ai's Facebook Ads Claude connector?

Windsor.ai’s Facebook Ads Claude connector (via Windsor MCP) is a no-code integration that pulls your Meta Ads data directly from the Meta Ads API, cleans and normalizes it, and streams it directly into Claude as structured, analysis-ready datasets.

Instead of exporting CSVs and uploading them manually, you can query your live Facebook Ads performance (spend, ROAS, CPA, CTR, conversions, breakdowns, etc.) using natural-language prompts across one or multiple ad accounts and manage your campaigns directly in Claude.

Tired of manual Facebook Ads data exports into Claude? Try Windsor.ai today to automate your reporting

Access your data from various sources in one place. Get started for free.
g logo
fb logo
big query data
youtube logo
power logo
looker logo