Meta Ads Manager data API: campaigns, insights, billing
Meta Ads Manager (package com.facebook.adsmanager) is Meta's first-party app for running Facebook and Instagram advertising from a phone. Under the hood it speaks Meta's GraphQL API: every screen issues a named, persisted query document over a single signed-in gateway, tagged with an operation name and a persisted-document id, and authenticated with the advertiser's OAuth access token from the logged-in session.
The illustrative surface below generalizes those private calls into path form: the home screen's campaign list via POST /v1/ads/campaigns, per-object metrics via POST /v1/ads/insights (spend, impressions, reach, clicks, cpm, purchase_roas), weekly account charts via POST /v1/ads/performance-chart, billing reads with current_balance and credential_id via POST /v1/billing/account, draft creation via POST /v1/ads/drafts, and account-standing checks with account_status and restriction_type via POST /v1/ads/account-standing.
Meta Ads Manager is Meta's first-party Android app for running Facebook and Instagram ad campaigns: creating and editing drafts, watching spend and results, managing billing and getting alerts when an account needs attention. Its data API is a signed-in, first-party GraphQL surface: every screen issues a named, persisted query document over one gateway — the home screen loads a flat campaign list, the performance tab reads per-object insights and weekly account charts, billing reads balance and stored payment methods, and draft edits land through a create-draft mutation. Requests carry the logged-in advertiser's OAuth access token plus a persisted-document id and an operation name, and the wire model keeps names such as campaign_group_id, adset_name, spend, impressions, reach, cpm, actions, purchase_roas, credential_id and restriction_type. The endpoints shown here are an illustrative, generalized map of that surface.
Screenshots
API surface
List ad-account campaigns
POST
/v1/ads/campaignsopendataLoads the flat campaign list for the selected ad account that fills the app's home screen.
Auth: OAuth access token from the logged-in advertiser session + persisted-document id (doc_id) and a generic operation name.
- account_id
- account_status
- campaign_group_id
- campaign_group_name
- objective
- daily_budget
- spend
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/ads/campaigns HTTP/1.1 Content-Type: application/x-www-form-urlencoded access_token=<advertiser_session_token>&doc_id=<persisted_doc_id>&operation_name=CampaignList&variables={"account_id":"act_1234567890","first":50,"filter":"ALL"}{ "data": { "ad_account": { "account_id": "1234567890", "account_status": "ACTIVE", "campaign_groups": { "edges": [ {"node": {"campaign_group_id": "23850123456789", "campaign_group_name": "Spring Sale — Conversions", "objective": "OUTCOME_SALES", "daily_budget": "5000", "spend": "123.45"}} ] } } } }Derived from the app's interface; endpoint details are illustrative, not a live capture.
Reconstructed from the app's campaign-list home screen.Matches the campaign rows (name, objective, budget, spend) shown in the account overview.
Fetch ad-object insights
POST
/v1/ads/insightsopendataReads performance metrics (spend, impressions, clicks, conversions, ROAS) for one campaign, ad set or ad over a chosen date preset.
Auth: OAuth access token from the logged-in advertiser session + persisted-document id (doc_id) and a generic operation name.
- spend
- impressions
- reach
- clicks
- cpm
- frequency
- actions
- action_values
- purchase_roas
- results
- date_preset
- time_increment
- breakdowns
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/ads/insights HTTP/1.1 Content-Type: application/x-www-form-urlencoded access_token=<advertiser_session_token>&doc_id=<persisted_doc_id>&operation_name=AdObjectInsights&variables={"ad_object_id":"23850123456789","date_preset":"last_7d","time_increment":1}{ "data": { "ad_object": { "insights": { "spend": "412.10", "impressions": "58230", "reach": "41102", "clicks": "1987", "cpm": "7.08", "frequency": "1.42", "actions": [{"action_type": "offsite_conversion", "value": "63"}], "action_values": [{"action_type": "offsite_conversion", "value": "2415.30"}], "purchase_roas": [{"action_type": "omni_purchase", "value": "5.86"}], "results": [{"indicator": "actions:offsite_conversion", "value": "63"}] } } } }Derived from the app's interface; endpoint details are illustrative, not a live capture.
Reconstructed from the campaign / ad-set / ad performance screen.Mirrors the metrics table shown for a selected date preset.
Weekly account performance charts
POST
/v1/ads/performance-chartopendataPowers the weekly-summary charts on the account home tab with daily spend/impressions/results series.
Auth: OAuth access token from the logged-in advertiser session + persisted-document id (doc_id) and a generic operation name.
- account_id
- performance_chart
- timestamp
- spend
- impressions
- results
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/ads/performance-chart HTTP/1.1 Content-Type: application/x-www-form-urlencoded access_token=<advertiser_session_token>&doc_id=<persisted_doc_id>&operation_name=WeeklyAccountPerformanceChart&variables={"account_id":"act_1234567890"}{ "data": { "ad_account": { "account_id": "1234567890", "performance_chart": { "series": [ {"metric": "spend", "points": [{"timestamp": 1758153600, "value": "58.20"}]}, {"metric": "impressions", "points": [{"timestamp": 1758153600, "value": "9102"}]}, {"metric": "results", "points": [{"timestamp": 1758153600, "value": "11"}]} ] } } } }Derived from the app's interface; endpoint details are illustrative, not a live capture.
Reconstructed from the weekly-summary charts on the account home tab.
Read billing account information
POST
/v1/billing/accountopenfinanceLoads the ad account's billing screen: outstanding balance, spending limit and stored payment methods.
Auth: OAuth access token from the logged-in advertiser session + persisted-document id (doc_id) and a generic operation name.
- current_balance
- currency
- account_spending_limit
- payment_methods
- credential_id
- credential_type
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/billing/account HTTP/1.1 Content-Type: application/x-www-form-urlencoded access_token=<advertiser_session_token>&doc_id=<persisted_doc_id>&operation_name=BillingAccountInfo&variables={"account_id":"act_1234567890"}{ "data": { "billing": { "current_balance": {"amount": "87.42", "currency": "USD"}, "account_spending_limit": "1000.00", "payment_methods": [ {"credential_id": "pm_9001", "credential_type": "CREDIT_CARD", "display": "Visa •••• 4242", "is_primary": true} ] } } }Derived from the app's interface; endpoint details are illustrative, not a live capture.
Reconstructed from the app's billing settings screen (balance, spending limit, payment methods).
Create ad draft
POST
/v1/ads/draftsopendataCreates a server-side ad draft so edits made on the phone persist and sync to Ads Manager on desktop.
Auth: OAuth access token from the logged-in advertiser session + persisted-document id (doc_id) and a generic operation name.
- draft_id
- ad_draft
- account_id
- objective
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/ads/drafts HTTP/1.1 Content-Type: application/x-www-form-urlencoded access_token=<advertiser_session_token>&doc_id=<persisted_doc_id>&operation_name=CreateAdDraft&variables={"input":{"account_id":"act_1234567890","ad_draft":{"name":"Weekend push — lookalike 1%","objective":"OUTCOME_TRAFFIC"}}}{ "data": { "create_ad_draft": { "draft_id": "99001234567890", "ad_draft": {"name": "Weekend push — lookalike 1%", "objective": "OUTCOME_TRAFFIC", "status": "DRAFT"} } } }Derived from the app's interface; endpoint details are illustrative, not a live capture.
Reconstructed from the ad-draft creation and edit flow.
Check ad-account compliance standing
POST
/v1/ads/account-standingosintReads the ad account's standing — whether it is active, restricted or disabled — behind the app's warning banners.
Auth: OAuth access token from the logged-in advertiser session + persisted-document id (doc_id) and a generic operation name.
- account_id
- account_status
- restriction_type
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/ads/account-standing HTTP/1.1 Content-Type: application/x-www-form-urlencoded access_token=<advertiser_session_token>&doc_id=<persisted_doc_id>&operation_name=AccountComplianceStatus&variables={"account_id":"act_1234567890"}{ "data": { "ad_account": { "account_id": "1234567890", "account_status": "ACTIVE", "restrictions": [ {"restriction_type": "AD_ACCOUNT_SPEND_LIMIT", "appeal_eligible": true} ] } } }Derived from the app's interface; endpoint details are illustrative, not a live capture.
Reconstructed from the account-standing warnings shown when an ad account is restricted.
Data categories
- campaigns
- ad-insights
- performance-charts
- billing
- payment-methods
- ad-drafts
- account-standing
Where teams use this data
Cross-platform spend dashboards
Agency reporting tools pull per-campaign spend, impressions, reach, clicks, cpm and purchase_roas on a daily time_increment, joining Meta results with other channels so clients see one blended cost-per-result instead of three separate dashboards.
Budget-pacing alerts
Finance automation reads the campaign list with daily_budget and lifetime-to-date spend, then flags campaigns pacing above plan — the same data behind the app's weekly-summary performance charts.
Ad-account health monitoring
Multi-account operators poll account_status and restriction_type across every client account and page on-call the moment an account is restricted, instead of waiting for an advertiser to notice the in-app banhammer banner.
Billing reconciliation
Accounting pipelines read current_balance, currency, account_spending_limit and the stored payment_methods (credential_id, credential_type) to reconcile Meta ad invoices against the corporate card statement each month.
Frequently asked questions
What data API does the Meta Ads Manager app use?
The app talks to Meta's GraphQL API over a single signed-in gateway: each screen issues a named, persisted query document — a campaign-list query for the home screen, an insights query for per-object metrics, and a billing query for balance and payment methods. The endpoints shown here are an illustrative, generalized map of that surface rather than live captures.
How is the Meta Ads Manager API authenticated?
Calls are authenticated with the advertiser's OAuth access token issued when they sign in with their Facebook account inside the app. The token rides as a form parameter alongside a persisted-document id and the variables payload; there is no public developer key — these are first-party calls scoped to the ad accounts the signed-in user administers.
Which performance metrics does the app expose?
The insights surface returns spend, impressions, reach, clicks, cpm, frequency, actions, action_values, purchase_roas and results, filterable by date preset (for example last_7d), time range, time increment and breakdowns — the same rows that fill the campaign, ad-set and ad detail screens.
Can I read billing and account-standing data from the app?
Yes — the billing screens load current_balance, currency, account_spending_limit and stored payment_methods (credential_id, credential_type), while the account-standing surface returns account_status plus restriction_type entries, which is what drives the in-app warnings when an ad account is restricted or disabled.
Topics
- meta ads manager api
- facebook ads api endpoints
- ads insights fields
- spend impressions roas
- meta graphql persisted queries
- ad account billing api
Need this app's data API integrated?
We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.