Authenticate with a user or system user access token with ads_read permission on the ad account.
For large or complex reports, create an async job by POSTing to /act_AD_ACCOUNT_ID/insights with desired fields, breakdowns, date_preset or time_range, and level (account, campaign, adset, or ad).
Capture the report_run_id from the response and poll GET /{REPORT_RUN_ID} until async_status is 'Job Completed'.
Fetch the results by sending GET /{REPORT_RUN_ID}/insights with pagination parameters (limit, after cursor).
For synchronous small reports, GET directly on /act_AD_ACCOUNT_ID/insights or /{CAMPAIGN_ID}/insights with fields as a comma-separated query parameter.
Use the date_preset (e.g. last_30d) or explicit time_range to control the reporting window; apply breakdowns like age, gender, or publisher_platform to segment results.
Known gotchas
Insights data has a processing lag; very recent data (within the last few hours) may be incomplete — use date ranges ending the previous day for stable numbers.
Some field and breakdown combinations are incompatible and will return an error; consult the field compatibility matrix in Meta's documentation.
Rate limits on the Insights API are separate from general Marketing API limits and are based on ad account tier; async jobs are strongly preferred for large date ranges.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp