calendar Last updated: 8 September 2026
Data integration
Data Pipelines
Facebook Ads
How to's

Meta Ads Analytics: A Complete Guide to Facebook Ads Data

Try It Now

Connect your data in 1 min. Start free, no credit card

Got insights from this post? Give it a boost by sharing with others!

Meta Ads is the most-connected advertising platform on Windsor.ai, and the pattern in what teams actually pull is consistent: spend, campaign, impressions, and clicks come first, by a wide margin, before anything else. This guide is organized around that pattern, job by job, rather than as a generic “how to analyze ads” explainer.

The single most common full pull is five fields together: campaign, clicks, date, impressions, spend. If you’re starting from scratch, that combination is the right first prompt.

Pull campaign, clicks, date, impressions, and spend for my Meta Ads
account over the last 30 days, grouped by campaign. Sort by spend,
highest first.

This works the same whether you land it in ChatGPT, Claude, or Copilot once Meta Ads is connected to Windsor.ai, or schedule the same pull into Looker Studio, Power BI, or BigQuery.

Campaign performance

Beyond the canonical five-field pull, the next tier of fields people add are reach, ctr, ad_name, adset_name, frequency, cpc, and cpm, in roughly that order of popularity. Naming the campaign, ad set, and ad instead of just their ids is what most people add first once the basic numbers are in front of them.

Pull campaign, clicks, impressions, and spend for the last 7 days, plus
reach, ctr, and frequency. Flag any campaign where frequency is above 3
and ctr is falling.

Purchase and ROAS reporting

Purchase tracking is one of the most common jobs on this connector, and it comes in two flavors that are easy to conflate: actions_offsite_conversion_fb_pixel_purchase counts purchases the Meta pixel tracked on your website specifically, while actions_omni_purchase counts purchases attributed from any connected Facebook Business Tool, web, app, or offline. purchase_roas_omni_purchase is the ROAS figure built on that broader omni definition. Pick the one that matches what your business actually sells through, mixing pixel-only and omni figures in the same report is a common source of numbers that don’t reconcile.

Pull campaign, spend, actions_omni_purchase, and purchase_roas_omni_purchase
for the last 30 days. Which campaigns have spend over $500 and a ROAS
under 1?

Lead campaigns

actions_lead is a common pull in its own right, covering leads from Facebook-owned properties (forms, Messenger) and connected off-Facebook tracking. If you’re running Instant Form lead gen specifically, actions_leadgen_grouped matches the “Leads” number Meta Ads Manager shows for that campaign type, and cost_per_action_type_lead gives you the cost side.

Pull campaign, spend, actions_lead, and cost_per_action_type_lead for
the last 30 days for any campaign with objective lead generation. Rank
by cost per lead, lowest first.

For the actual lead records behind those numbers, not just the counts, see the Facebook Lead Ads connector.

Frequency and creative fatigue

frequency, how many times the same person has seen your ad, is one of the most-pulled performance fields on this connector. Rising frequency alongside falling ctr is the standard signal of creative fatigue. Pair it with the creative fields, body, title, thumbnail_url, call_to_action_type, and creative_id, to find out which specific creative is wearing out.

Pull frequency, ctr, and creative_id for every active ad over the last
14 days. Show me any ad where frequency has risen and ctr has dropped
compared to the previous 14 days.

Placement and audience breakdowns

publisher_platform (Facebook, Instagram, Audience Network) and platform_position (which placement within that platform) tell you where your budget is actually landing. Instagram placements specifically also expose their own set of Effective Media fields, likes, comments, and other post-level metrics for the Instagram version of your ad. Combine with age, gender, and country for audience breakdowns.

Pull spend, impressions, and ctr broken down by publisher_platform and
platform_position for the last 14 days. Which placement has the lowest
cost per click?

Budgets and status

campaign_daily_budget and adset_daily_budget are common pulls for anyone auditing spend allocation, alongside campaign_effective_status and adset_bid_strategy to see what’s actually live and how it’s bidding. This is also the data behind write actions, once you know which campaign or ad set needs a change, your assistant can make it directly. See Managing Meta Ads from Claude and from ChatGPT.

Video

Video-specific fields, video_completion_rate and the play-curve breakdowns showing what share of viewers were still watching at each few seconds in, are requested by a smaller group than the fields above, but they’re the only way to see whether a video ad is losing viewers early or holding attention.

History beyond Ads Manager

Meta’s own reporting only looks back so far, a recurring wall for anyone trying to chart performance over a year or more. The fix is the same one that applies across every connector: a scheduled daily pull into a warehouse builds your own history going forward, rather than relying on Meta to keep it for you. See How to Build a Facebook Ads Data Model in BigQuery for the warehouse pattern.

Cross-channel: Meta Ads and Google Ads together

A meaningful share of Meta Ads accounts also run Google Ads and pull both in the same week, more than any other cross-connector pairing for this data. Comparing the two directly, on one blended report, is common enough to be worth doing properly rather than eyeballing two separate exports. See Facebook Ads vs Google Ads: One Report for Both Platforms for the field mapping and blended ROAS method.

Meta Ads API without code

Everything above uses Meta’s real Marketing API fields without writing any code. Connect your account to Windsor.ai once, and ChatGPT, Claude, or Copilot can query it directly through plain-language prompts. For the technical detail behind the API itself, see the Meta Ads API guide.

Field names that don’t exist

A recurring source of errors: adset and ad are levels you query at, not field names you can request directly, so asking for them as fields fails. The same goes for a handful of other guessed names:

What people type What they meant
adset, ad Query at that level (campaign, ad set, or ad), don’t request it as a field
leads actions_lead
landing_page_views actions_landing_page_view
daily_budget campaign_daily_budget or adset_daily_budget
purchases actions_purchase or actions_omni_purchase
conversion_value action_values_purchase or the specific action’s value field

This is one of the most common error patterns on the connector, worth checking first if a pull comes back empty or errors out. For the full breakdown, including budget, status, and creative field names, and the breakdown-incompatibility errors, see the Facebook Ads “Field Not Valid” error guide.

Related reading

FAQs

What's the single most important pull to start with?

Campaign, clicks, date, impressions, and spend together. It’s the most common full combination Meta Ads accounts request, and a solid starting point before adding anything more specific.

Tired of juggling fragmented data? Get started with Windsor.ai today to create a single source of truth

Let us help you automate data integration and AI-driven insights, so you can focus on what matters, growth strategy.
g logo
fb logo
big query data
youtube logo
power logo
looker logo