POST /v2/search/waterfall-icp-keyword) is designed to solve one specific problem: Finding the single best decision-maker at a target company without manual sorting.

The “Smart Routing” Concept
Most APIs return a list of 50 employees and leave you to filter them. BlitzAPI works differently. You define a Hierarchy of Preference (a Cascade), and our engine executes a sequential search logic. It attempts to find your “Dream Contact.” If, and only if, that fails, it moves to your “Plan B.”Priority 1: The Decision Maker
“I want the CMO.”The API scans the company. If a CMO is found, the search stops immediately. You get the top-ranked result.
Priority 2: The Deputy
“If no CMO, give me the Marketing Manager.”If Priority 1 yielded no results, the engine automatically triggers the second level of your cascade.
Real-World Example: The “Marketing First” Strategy
Let’s look at a complex query. Here, we want to target Welcome to the Jungle, but we have a very specific preference order. The Strategy:- Tier 1: Get the Marketing Director/CMO (Global).
- Tier 2: If missing, get a Growth Manager (Global).
- Tier 3: If missing, get a Brand/Comms Director (Global).
- Tier 4: If missing, try a broader keyword search in North America only.
- Tier 5: If all else fails, get the CEO.
Why this query is powerful
- Precision: By using
exclude_title, we focus the results on senior profiles and avoid matching interns or assistants who aren’t decision-makers. - Flexibility: In step 4, we switch
include_headline_searchtotrue. This allows us to catch people who write “Helping companies grow” in their bio, even if their job title isn’t exactly “Growth Manager”. - Safety Net: The final step ensures that if the Marketing team is invisible, we still capture the CEO to start a top-down conversation.
Endpoint
POST /v2/search/waterfall-icp-keyword
Queries BlitzAPI’s proprietary dataset to deliver results instantly.
- Paid plans: Unlimited (included in Unlimited Leads+)
- Latency: < 600ms
Request Parameters
Top-Level Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
company_linkedin_url | string | Yes | The full LinkedIn URL of the target company (e.g., "https://www.linkedin.com/company/openai"). |
cascade | array | Yes | Ordered array of search tiers (up to 8 levels). The engine tries each tier until max_results is reached. |
max_results | integer | No | Maximum number of people to return across all tiers. Default: 1. Max: 25. |
Cascade Object Parameters (per tier)
| Parameter | Type | Required | Description |
|---|---|---|---|
include_title | array | Yes | Job titles to match (e.g., ["CEO", "CTO"]). Partial matching — "VP Sales" matches "VP of Sales". |
exclude_title | array | No | Titles to exclude. Use to filter out ["Assistant", "Intern", "Junior"]. |
location | array | No | LinkedIn Country Codes (e.g., ["US", "FR"]). Use ["WORLD"] for global. Default: ["WORLD"]. |
include_headline_search | boolean | No | If true, keywords match against the user’s LinkedIn bio/headline, not just their formal job title. |
Country Codes: Use 2-letter ISO codes as used by LinkedIn (e.g.,
US, GB, FR). See the Country Codes reference for the full list.Response Schema
A successful request returns a JSON object with the following structure:Top-Level Fields
| Field | Type | Description |
|---|---|---|
results_length | integer | Total number of results returned. 0 if no match found. |
results | array | Array of matched people, ordered by cascade priority then relevance. |
Result Fields (results[])
| Field | Type | Description |
|---|---|---|
icp | integer | Cascade tier that matched this person. 1 = highest priority (Tier 1), 2 = Tier 2, etc. |
ranking | integer | Overall relevance rank within the company (1 = most relevant). Use to adapt outreach strategy. |
what_matched | array | Which filter criteria matched. Each entry has key (e.g., "include_title") and value. |
person | object | Full person profile. Pass person.linkedin_url to enrichment endpoints for email/phone. |
Person Object (results[].person)
| Field | Type | Description |
|---|---|---|
first_name | string | null | First name. |
last_name | string | null | Last name. |
full_name | string | null | Full display name. |
headline | string | null | LinkedIn headline. |
about_me | string | null | LinkedIn “About” section. |
location | object | Location with city, state_code, country_code, continent. |
linkedin_url | string | Person LinkedIn URL — use this as input for /v2/enrichment/email and /v2/enrichment/phone. |
connections_count | number | null | LinkedIn connections count. |
profile_picture_url | string | null | URL to profile picture. |
experiences | array | Work history. Each entry: job_title, company_linkedin_url, job_start_date, job_end_date, job_is_current, job_location. |
education | array | Education history. Each entry: degree, organization, start_date, end_date. |
skills | array | List of skills (strings). |
certifications | array | List of certifications. Each entry: name, authority, url. |
icp vs ranking — how to use both:icptells you which tier matched: route ICP 1–2 to your AE team, ICP 3–5 to SDR.rankingtells you position within the company: apply multichannel (email+LinkedIn+call) to ranking 1–3, calling-only to 4–10, and nurturing sequences to 11+.

