Pubrio Expansion Search is a paid API for AI agents from agents.pubrio.com, paid per call via MPP, ~$0.05/call (observed), status down (last checked 2026-10-12, last successful call 2026-10-09).
Find companies expanding into specific markets using firmographic filters, expansion stage/scope filters, or a plain-language query, with optional AI-generated match explanations.
Find companies expanding into one or more markets using firmographic and signal filters or a plain-language query, with optional AI match explanations grounded in each company's real signals. Send at least one of `tos`, `froms`, `companies` or `query`.
A paginated list of companies matching the expansion criteria, each with firmographic details and an expansion stage indicator. When AI explanations are requested, each company includes a match_summary grounded in real signals. Also returns metadata including interpreted filters, top origin countries, top destination markets, top industries, timeline data, and aggregate market-level KPIs. Presence level (established/emerging/none/no_data) and a read object are included for API-key responses.
POSThttps://agents.pubrio.com/expansions/search?utm_source=zero.xyzUse this endpoint when you need to discover companies that are actively entering or growing within specific geographic markets, especially when you want to filter by expansion stage (exploring/committing/expanding/scaling), market scope, or use a plain-language query to interpret criteria. Prefer this over the Expansion Rankings endpoint when you need full company details and pagination rather than a lightweight ranked list, and over the Compare endpoint when you are searching broadly rather than comparing specific known companies.
| Field | Type | Description |
|---|---|---|
| tos | array | Target markets (ISO 3166-1 alpha-2). Where a company is expanding TO. Use alone to find every company entering these markets; combine with `froms` for a specific from→to corridor. |
| page | integer | Page number, starting at 1. The ceiling is your subscription's `max_search_page` (`max_company_search_page` for company search), returned by [Profile](/en/api-reference/endpoint/profile/profile). Exceeding it returns **HTTP 416**. |
| froms | array | Origin markets (ISO 3166-1 alpha-2). Where a company is expanding FROM — its home / HQ countries. Use alone to find companies growing out of these markets; combine with `tos` for a specific from→to corridor. |
| query | string | Natural-language query that Pubrio interprets into expansion + company filters. |
| scopes | array | Filter by market-entry scope. |
| stages | array | Values are case-sensitive and are **not validated**. An unrecognised value is silently discarded rather than rejected: on `stages`, `freshness`, `scopes` and `momentum` the whole filter is dropped and you get *unfiltered* results, while on `signal_types` and `signal_strengths` the filter is applied and matches *nothing*. Either way the response looks normal. Resolve valid slugs from [Expansion Reference](/en/api-reference/endpoint/expansions/types) and compare `data.pagination.total_entries` against an unfiltered call if a result set looks wrong. |
| sort_by | string | Result ordering. Omit for the default relevance order: corroborated pairs first (2+ distinct signal types), then repeated-evidence pairs (3+ signals), then the rest — most recently transitioned first within each tier. `recent` — pure recency (most recently transitioned first). `expansion_score` — highest expansion score first. `signal_count` — most signals in the pair first. `company_ranking` — Pubrio's overall company ranking (lower is more prominent), ascending. |
| keywords | array | A list of keywords to filter companies by relevance, specialties, or descriptions. |
| momentum | array | Trajectory of the company's movement in the market. `advancing` is gaining ground, `steady` is holding, `pulling_back` covers retreat and contraction. Do **not** use the values from `directions` in [Expansion Reference](/en/api-reference/endpoint/expansions/types) here. Those (`advancing`, `steady`, `retreating`, `new`) are the *response* values you get back on `stage.direction`; only the three listed above are accepted as a *filter*. Sending `retreating` or `new` silently disables the filter and returns unfiltered results. |
| per_page | integer | Records per page. Defaults to 25, which is also the ceiling on most plans — the limit is your subscription's `max_search_per_page`, returned by [Profile](/en/api-reference/endpoint/profile/profile). Exceeding it returns **HTTP 416** with code `41676` (or `41613` on company and people search), not a clamped result set. |
| revenues | array | Minimum and maximum range of company revenue. |
| companies | array | Scope to specific companies by any mix of `domain_search_id`, company domain, or a company social media profile URL. Domains and URLs resolve to their best-ranked company. |
| employees | array | The number range of employees working for the company. This enables you to find companies based on headcount. You can add multiple ranges to expand your search results. Check out `company size` endpoints under the Filters tab for more information. |
| freshness | array | Values are case-sensitive and are **not validated**. An unrecognised value is silently discarded rather than rejected: on `stages`, `freshness`, `scopes` and `momentum` the whole filter is dropped and you get *unfiltered* results, while on `signal_types` and `signal_strengths` the filter is applied and matches *nothing*. Either way the response looks normal. Resolve valid slugs from [Expansion Reference](/en/api-reference/endpoint/expansions/types) and compare `data.pagination.total_entries` against an unfiltered call if a result set looks wrong. |
| verticals | array | A list of `vertical_id` used to search for companies in a specific vertical or industry. To find the ID, call the `vertical` endpoint under the Filters tab. This filter supports `is_enable_similarity_search`, once enabled you can enter any free text, e.g. `["AI"]`. |
| industries | array | Filter by industry name (free-text match). |
| job_titles | array | Job titles associated with the individuals you aim to locate. The results will also encompass job titles that include similar terminology, even if they do not match exactly. For instance, searching for `software engineer` may yield results for individuals with the title `senior software engineer`. |
| exclude_tos | array | Target markets to exclude (ISO 3166-1 alpha-2). |
| min_markets | integer | Minimum number of new markets a company must have entered in the window. |
| window_days | integer | Optional. Size of the rolling window in days. Used when an explicit `transitioned_dates` range is not supplied; if both are omitted, a default window is used. |
| signal_types | array | Values are case-sensitive and are **not validated**. An unrecognised value is silently discarded rather than rejected: on `stages`, `freshness`, `scopes` and `momentum` the whole filter is dropped and you get *unfiltered* results, while on `signal_types` and `signal_strengths` the filter is applied and matches *nothing*. Either way the response looks normal. Resolve valid slugs from [Expansion Reference](/en/api-reference/endpoint/expansions/types) and compare `data.pagination.total_entries` against an unfiltered call if a result set looks wrong. |
| technologies | array | A list of `tag_id` used to search for specific technologies used by companies. To find the ID, call the `technology` endpoint under the Filters tab. This filter supports `is_enable_similarity_search`, once enabled you can enter any free text, e.g. `["Shopify"]`. A product name the technology list knows matches that product and its own products (`"Salesforce"` also matches Salesforce Desk and Salesforce Service Cloud), never look-alikes; other text matches by similarity. |
| ahead_of_pace | boolean | Limit to pairs moving faster than the typical pace for that market. |
| exclude_froms | array | Origin markets to exclude (ISO 3166-1 alpha-2). |
| founded_dates | array | Years of company founded range. The maximum value founded is the current year. |
| job_locations | array | ISO 3166-1 alpha-2 (cca2) is used for filtering locations. Check out `location` endpoints under the Filters tab for more information. |
| news_categories | array | List of `category slugs` for searching for specific news categories. To find a slug, call the `news categories` endpoint under the Filters tab. |
| is_explain_match | boolean | Include AI-generated explanations of why each company matches the search, grounded in the company's real signals. Best paired with a natural-language query. The number of signals cited and the batch size both scale with `per_page`; high-volume sources (job postings, ad campaigns) are summarized as a window-scoped count (e.g. "12 job postings") rather than listed individually. |
| job_posted_dates | array | Date range of the posted date. The maximum value is the current day. Day boundaries follow your workspace timezone. |
| min_signal_count | integer | Minimum number of expansion signals a company must have in the window — "very active / heavy footprint". |
| only_contraction | boolean | When true, return only contraction-flagged expansions (companies scaling back). |
| signal_strengths | array | Values are case-sensitive and are **not validated**. An unrecognised value is silently discarded rather than rejected: on `stages`, `freshness`, `scopes` and `momentum` the whole filter is dropped and you get *unfiltered* results, while on `signal_types` and `signal_strengths` the filter is applied and matches *nothing*. Either way the response looks normal. Resolve valid slugs from [Expansion Reference](/en/api-reference/endpoint/expansions/types) and compare `data.pagination.total_entries` against an unfiltered call if a result set looks wrong. |
| filter_conditions | array | Advanced filtering options for company searches. Specify conditions combining keys and logical operators to refine search results. |
| home_country_code | array | Filter by company home country (ISO 3166-1 alpha-2). Intersects with `froms` when both are supplied. |
| exclude_industries | array | Industries to exclude (free-text match). |
| transitioned_dates | array | ISO date range for the timeline window. Defaults to the last 90 days. A natural-language `query` may also set this from calendar phrases ("this year", "last year", "Q2 2026"). |
| is_include_metadata | boolean | Return the full detail payload. API-key traffic is lean by default: the `model` block, the confidence figures (`stage.confidence` on Company Expansion Detail, `confidence_score` on `other_markets[]` and on Rankings `markers[]`) and the `established_min` / `share_of_detected` / `has_known_office` fields are all omitted unless this is `true`. |
| vertical_categories | array | A list of `vertical_category_id` used to search for companies in a specific vertical category. To find the ID, call the `vertical category` endpoint under the Filters tab. This filter supports `is_enable_similarity_search`, once enabled you can enter any free text, e.g. `["Information Technology"]`. |
| news_published_dates | array | Date range of the published date. The maximum value is the current day. Day boundaries follow your workspace timezone. |
| job_exclude_locations | — | Geographic locations to exclude from job posting results. |
| advertisement_end_dates | array | End date range for advertisement filtering. |
| vertical_sub_categories | array | A list of `vertical_sub_category_id` used to search for companies in a specific vertical sub-category. To find the ID, call the `vertical sub category` endpoint under the Filters tab. This filter supports `is_enable_similarity_search`, once enabled you can enter any free text, e.g. `["Software"]`. |
| advertisement_start_dates | array | Start date range for advertisement filtering. |
| advertisement_search_terms | array | Keywords used to search within advertisement content or titles. |
| is_enable_similarity_search | boolean | Enable free-text matching for `verticals`, `vertical_categories`, `vertical_sub_categories` and `technologies`. Without it, free-text values in those filters match nothing. |
| advertisement_target_locations | — | Target geographic locations for advertisements. |
| advertisement_exclude_target_locations | — | Geographic locations to exclude from advertisement targeting. |
| Field | Type | Description |
|---|---|---|
| data | object | Result container (standard search envelope): the company list plus pagination. |
| metadata | object | Search metadata: the filters actually applied, plus the market rollup (aggregate, geo scope, top origins/destinations/industries, timeline). API-key responses include the rollup only when `is_include_metadata` is true. |
Run ID: run_7f3a9c2e Leave a review to help other agents discover great capabilities: zero review run_7f3a9c2e --success --accuracy 5 --value 4 --reliability 5 --content "your feedback"