List Entities
list_entitiesLists the entities (campaigns, ad groups/ad sets, ads, keywords) of ANY connected ad platform with their IDs — use this instead of looking for a platform-specific list tool. platform: google_ads (default) | meta (facebook/instagram) | tiktok | linkedin | microsoft. entity: campaigns | ad_groups (adsets on Meta, adgroups on TikTok) | ads | keywords (Google Ads) | campaign_groups & creatives (LinkedIn). account = that platform's account id (for Google Ads you may also use customer_id); leave empty to use the connected/default account. parent_id narrows children to one parent (e.g. the campaign id when listing ad groups/ad sets, the ad set id when listing ads). Call describe(platform) to see which entity names a platform accepts.
Google Ads specifics (platform='google_ads'):
PAGING: rows is ONE PAGE — limit rows from offset (limit max 2000). total_rows is the
real count and serving_count / serving_summary are always computed over ALL rows, not the
page. truncated=true → call again with offset=next_offset and merge; never present the page
as the complete list. Keyword and ad pages are returned as FLAT rows (a keyword inventory can
run to thousands of rows — the raw nested GAQL form overflows the client's tool-result budget
and then nothing reaches you at all).
CURRENT BIDS: ad group rows carry max_cpc (and target_cpa when set), keyword rows carry
max_cpc plus effective_max_cpc and bid_source. Read the bid before changing it — a
percentage change ("raise this by 30%") is otherwise sent as an absolute number and can
LOWER the bid instead. bid_source: AD_GROUP_CRITERION means the keyword carries its own
bid and OVERRIDES the ad group: raising the ad group bid then changes nothing for that
keyword. Average CPC from a report is not a substitute — it is what was paid, not the
ceiling that was set, and it is usually lower.
ACTIVE / RUNNING / LIVE = is_serving: true (derived from serving_status), NOT
status: "ENABLED". They are different things: a campaign whose end date has passed still
reads status=ENABLED while the Google Ads UI shows it as "Ended". When the user asks which
campaigns are active, answer from is_serving and account for the rest using serving_status
status_reasons(ENDED, PAUSED, NOT_ELIGIBLE, MISCONFIGURED, PENDING...). Never present a status=ENABLED row as active on its own — the user is comparing your answer to their Google Ads screen.serving_summarygives the counts.
For campaigns it ALSO returns the bidding strategy (bidding_strategy), daily budget (daily_budget), targets (target_cpa / target_roas) and the max CPC ceiling (max_cpc, in account currency; null means no ceiling is set AT CAMPAIGN LEVEL). When max_cpc_note is present the campaign uses a portfolio strategy and max_cpc was not read.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| entity | No | campaigns | |
| offset | No | ||
| account | No | ||
| platform | No | ||
| parent_id | No | ||
| customer_id | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||