Your Meta ads' spend, impressions, clicks, conversions
meta-ads.insightsGet spend, impressions, clicks and conversions for your Meta ads
- Price
- freeAt provider cost
- Success rate
- —No success-rate data yetNo success-rate data yet
- Latency p50
- ——
- Last verified
- Jul 28, 2026Verified working
GEThttps://toolswitch.dev/v1/tools/meta-ads.insights?limit=2&date_preset=last_7dPreview- Uses platform quota
- Synchronous response
- Reads public data
Parameters
conversions are NOT top-level fields: they arrive inside `actions` as [{action_type, value}] and you pick the action_type that matches the campaign's objective (purchase, lead, link_click). Attribution defaults to the ad account's setting unless action_attribution_windows is passed. A large request answers with a report_run_id for async polling instead of data
| Parameter | Type | Required | Description | Example |
|---|---|---|---|---|
| Path parameters | ||||
object_id | string | Required | ANY level of the hierarchy: act_… for the whole account, or a campaign / ad set / ad id to scope it down | act_1234567890 |
| Query parameters | ||||
level | string | Optional | account | campaign | adset | ad — the granularity of the ROWS returned, independent of object_id | campaign |
limit | integer | Optional | 100 | |
fields | string | Required | comma-separated metrics | spend,impressions,clicks,ctr,cpc,cpm,reach,frequency,actions,action_values |
breakdowns | string | Optional | e.g. age,gender or publisher_platform — not every breakdown combines with every metric | publisher_platform |
time_range | string | Optional | JSON as a string: {"since":"2026-07-01","until":"2026-07-28"} | |
date_preset | string | Optional | today | yesterday | last_7d | last_14d | last_30d | this_month | maximum — mutually exclusive with time_range | last_30d |
time_increment | string | Optional | 1 for a daily series; omit for one aggregate row | 1 |
- Path parameters
object_idstringRequiredANY level of the hierarchy: act_… for the whole account, or a campaign / ad set / ad id to scope it down
Example:
act_1234567890- Query parameters
levelstringOptionalaccount | campaign | adset | ad — the granularity of the ROWS returned, independent of object_id
Example:
campaignlimitintegerOptionalExample:
100fieldsstringRequiredcomma-separated metrics
Example:
spend,impressions,clicks,ctr,cpc,cpm,reach,frequency,actions,action_valuesbreakdownsstringOptionale.g. age,gender or publisher_platform — not every breakdown combines with every metric
Example:
publisher_platformtime_rangestringOptionalJSON as a string: {"since":"2026-07-01","until":"2026-07-28"}
date_presetstringOptionaltoday | yesterday | last_7d | last_14d | last_30d | this_month | maximum — mutually exclusive with time_range
Example:
last_30dtime_incrementstringOptional1 for a daily series; omit for one aggregate row
Example:
1
Code samples
Replace $TOOLSWITCH_KEY with the key you created in the console.
curl -X GET 'https://toolswitch.dev/v1/tools/meta-ads.insights?limit=2&date_preset=last_7d' \
-H "X-Toolswitch-Key: $TOOLSWITCH_KEY"import os
import requests
response = requests.request(
"GET",
"https://toolswitch.dev/v1/tools/meta-ads.insights?limit=2&date_preset=last_7d",
headers={"X-Toolswitch-Key": os.environ["TOOLSWITCH_KEY"]},
)
response.raise_for_status()
print(response.text)const response = await fetch("https://toolswitch.dev/v1/tools/meta-ads.insights?limit=2&date_preset=last_7d", {
method: "GET",
headers: {
"X-Toolswitch-Key": process.env.TOOLSWITCH_KEY ?? "",
},
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
console.log(await response.text());This gateway API is in preview; its URL and authentication may change. The example parameters are sample data. Calls are billed at free, including the service fee.