Skip to main content
Glama

estimate_reach

Preview how broad an audience a custom_audience filter describes — FREE: no model calls, no wallet debit, returns in under a second. Call it before a run that uses custom_audience to check the spec is valid and to see how tight the cut is.

A small audience is NOT a blocked one. Every panel is delivered at the population_size you request, with every respondent satisfying your filter. So never refuse or abandon a run because this returns audience_size 'small' — run it, and tell the user the audience is narrow. The band tells you how much natural variety sits behind the panel: a small audience's results carry an audience_note (incidence 'low', or 'very_low' for the rarest) saying they reflect a narrower range of perspectives, which is a reason to suggest widening the filter, not to stop.

Returns: { audience_size ('small' | 'medium' | 'large'), narrowed_by (the single filter cutting hardest — age, gender, geo, income, ethnicity, religion, interests or exclusions; null if nothing is narrowing it), narrowing_filters (every narrowing filter, strongest first; narrowed_by is its first entry), preset_key, and — with include_by_dimension=true — by_dimension as percentage shares }.

Note on interests: respondents each carry a handful of tags from a ~200-topic taxonomy, so ANY single tag describes only a small slice of a market. Pass several related tags (they are OR-matched) when you want a broader cut — e.g. 'Stock Trading' plus 'Day Trading' and 'Personal Investing' rather than 'Stock Trading' alone.

The market is preset_key; demographic_preset, the name the run tools use, is accepted too (both at once must name the same market).

An impossible spec (unknown country, gender, heritage value, currency code or income_match; an interest that is not a taxonomy tag; a city or region the market does not have; an unknown market; a heritage cut on a market without that axis; an income range no band on the market's ladder falls inside) returns audience_size=null plus spec_errors (human strings) and spec_error_details [{code, field, values, allowed, message}] — the same stable codes a run would reject with (422, before any charge) — so fix the spec here, for free.

Input Schema

NameRequiredDescriptionDefault
targetingYesOptional filter narrowing the panel INSIDE the market preset. Keys (all optional): countries, regions, cities (each market's own vocabulary), age_min / age_max, genders ('all' | 'men' | 'women' | 'non_binary'), interests / interest_exclusions (taxonomy tags), income_min_tier / income_max_tier (affluence ladder 0-7, 7 = top), income_currency + income_min_amount / income_max_amount (REAL annual household amounts in a named ISO currency — currency is required with amounts; e.g. {'income_currency': 'USD', 'income_min_amount': 100000}), income_match ('position' = the equivalent affluence standing within each market's own income ladder, the default; 'absolute' = actual earnings at indicative FX), ethnicities / religions (multi-ethnic markets only). Preview a custom_audience with the free estimate_reach tool before paying for a run — it reports the audience size and which constraint cuts hardest. A 'small' audience is not a blocker: the panel is still delivered at the population_size you ask for, with every respondent matching the filter, and its age and gender mix follows the market's profile within the filter's age, gender, place, income and heritage terms (interest tags pick who within each group, not how many of each). Results carry panel_check (the panel's age, gender and region mix against that profile) and, for an uncommon audience, audience_note. Guide: https://crowdos.ai/mcp.
preset_keyNoMarket preset to sample. Use list_demographic_presets for the roster. Default: us_general_population.
sample_sizeNoHow much evidence the size band rests on. Default 500. Snapped up to the nearest of 100/250/500/1000/2500/5000/10000. An input only — it is not echoed in the response.
demographic_presetNoThe same market under the name the run tools use. Send this or preset_key; if both are sent they must name the same market.
include_by_dimensionNoAlso return the matched sample's composition by age band / gender / region / income.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / targeting / description
      Previous value: -"Optional filter narrowing the panel INSIDE the market preset. Keys (all optional): countries, regions, cities (each market's own vocabulary), age_min / age_max, genders ('all' | 'men' | 'women' | 'non_binary'), interests / interest_exclusions (taxonomy tags), income_min_tier / income_max_tier (affluence ladder 0-7, 7 = top), income_currency + income_min_amount / income_max_amount (REAL annual household amounts in a named ISO currency — currency is required with amounts; e.g. {'income_currency': 'USD', 'income_min_amount': 100000}), income_match ('position' = the equivalent affluence standing within each market's own income ladder, the default; 'absolute' = actual earnings at indicative FX), ethnicities / religions (multi-ethnic markets only). Preview a custom_audience with the free estimate_reach tool before paying for a run — it reports the audience size and which constraint cuts hardest. A 'small' audience is not a blocker: the panel is still delivered at the population_size you ask for, with every respondent matching the filter. Guide: https://crowdos.ai/mcp."New value: +"Optional filter narrowing the panel INSIDE the market preset. Keys (all optional): countries, regions, cities (each market's own vocabulary), age_min / age_max, genders ('all' | 'men' | 'women' | 'non_binary'), interests / interest_exclusions (taxonomy tags), income_min_tier / income_max_tier (affluence ladder 0-7, 7 = top), income_currency + income_min_amount / income_max_amount (REAL annual household amounts in a named ISO currency — currency is required with amounts; e.g. {'income_currency': 'USD', 'income_min_amount': 100000}), income_match ('position' = the equivalent affluence standing within each market's own income ladder, the default; 'absolute' = actual earnings at indicative FX), ethnicities / religions (multi-ethnic markets only). Preview a custom_audience with the free estimate_reach tool before paying for a run — it reports the audience size and which constraint cuts hardest. A 'small' audience is not a blocker: the panel is still delivered at the population_size you ask for, with every respondent matching the filter, and its age and gender mix follows the market's profile within the filter's age, gender, place, income and heritage terms (interest tags pick who within each group, not how many of each). Results carry panel_check (the panel's age, gender and region mix against that profile) and, for an uncommon audience, audience_note. Guide: https://crowdos.ai/mcp."
  2. First observed

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so: it discloses cost behavior (no model calls, no wallet debit), latency (under a second), the error contract (audience_size=null plus spec_errors/spec_error_details with the same stable codes a run would reject with at 422, before any charge), and the return shape including audience_note/incidence semantics. It also pre-empts a likely agent misread — that 'small' means blocked — which is exactly the non-obvious behavior an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the free/sub-second hook, then the small-audience caveat, then the returns block and error contract — a sensible order. It is long and partly duplicates the targeting schema's prose about small audiences, but nearly every sentence carries decision-relevant information, so the bulk is defensible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description supplies an explicit Returns block (audience_size, narrowed_by, narrowing_filters, preset_key, optional by_dimension) and the full failure surface with error codes. Combined with nested-object targeting params, an agent has everything needed to call it, interpret results, and act on failures without guessing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3, but the description adds real meaning: the preset_key/demographic_preset aliasing rule (send either; both must name the same market), and the critical interest-tag guidance that a ~200-topic taxonomy means a single tag is a narrow slice and several tags are OR-matched. It does not explain sample_size or include_by_dimension's cost/effect beyond the schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — preview how broad an audience a `custom_audience` filter describes — and immediately scopes it as a free, sub-second validation step distinct from a paid run. An agent can distinguish it from `crowd_sample`, `preview_cost` and the run tools without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit timing is given: 'Call it before a run that uses custom_audience to check the spec is valid and to see how tight the cut is,' plus a strong when-not: never abandon a run because the band returns 'small'. It routes to sibling concepts ('the run tools', fix the spec here before a 422) but never names `preview_cost` or `list_demographic_presets` as alternatives, leaving some inference about which free pre-flight check to pick.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources