call_disposition_report
Aggregate call dispositions across sub-accounts with breakdowns by status, source, duration, and campaign, replacing manual paging through calls.
Instructions
Aggregate call outcomes/dispositions across sub-accounts in one call.
Only queries active sub-accounts by default. Pass account_status="archived", "canceled", "paused", or "all" to query other sub-accounts.
Paginates the calls-list endpoint server-side (concurrently, not one page at a time) and returns pre-aggregated counts — call_status/dial_status breakdown, the logged disposition breakdown (CTM's 'sale.name' outcome field, e.g. "wrong number", "no message", "offering services"), duration stats, top marketing sources (which doubles as "breakdown by source" for whatever duration range you asked for), top ad-platform campaigns and keywords (from CTM's per-call "paid" attribution object — real Google/Bing/Meta campaign & keyword data, distinct from the CTM tracking-source label used for "source" above), and call volume by day of week.
Note on campaign/keyword data: Google withholds keyword-level text for some Search traffic even when the call is clearly attributable, so "(not provided)" keywords are expected, not a bug. campaign_id is far more reliably populated than the human-readable campaign name — if campaign names come back mostly blank, use call_crosstab with rows="campaign_id" (or "ad_group_id") for a reliable grouping.
Pass min_duration/max_duration (seconds) to scope everything — including the source/disposition/status breakdowns — to calls in that duration range, e.g. min_duration=60 for "calls over a minute by source". This replaces manually paging through search_calls and grouping raw records by hand.
Pass status (matches call_status/status/dial_status, exact, case-insensitive) and/or source (substring match against the marketing source name, case-insensitive) to scope the whole report further, e.g. status="answered", source="Google". NOTE: like search_calls, this is applied client-side after fetching — the CTM calls-list API's own status filter does not reliably work, so filtering happens here instead, on the full fetched set (not just one page), which is more reliable than filtering via search_calls.
Use this instead of paging through search_calls or looping get_call — this is the tool to reach for when asked to analyze calls/dispositions over a date range; it replaces what would otherwise take one get_call round-trip per call, or a full manual page-by-page scan for a duration/source/status cut.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| top_n | No | ||
| source | No | ||
| status | No | ||
| end_date | No | ||
| max_calls | No | ||
| start_date | No | ||
| account_ids | No | ||
| max_duration | No | ||
| min_duration | No | ||
| account_status | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |