Find-and-enrich-contacts-at-companyCLAY_MCP_FIND_AND_ENRICH_CONTACTS_AT_COMPANY
Search for contacts at a company by role, title, name, or department.
## Quick Reference
- **This tool**: Find TYPES of people (e.g., "engineers at Stripe", "VPs at OpenAI") or search by name (e.g., "someone named Urmanov at Allstate")
- **find-and-enrich-list-of-contacts**: Find SPECIFIC named people (e.g., "John Smith at Stripe")
- **Follow-ups**: ALWAYS re-call this tool—never filter results in chat. When ambiguous, ask the user.
## Parameters
### companyIdentifier (required)
Domain (e.g., "stripe.com") or LinkedIn company URL. Company names alone will fail.
- Convert known companies: "Stripe" → "stripe.com"
- If ambiguous (e.g., "Delta"), ask the user to clarify
### contactFilters (optional)
Narrow results. Only add filters the user explicitly requests.
**Rules:**
- Filters combine with AND; values within arrays combine with OR
- Keep compound titles as ONE string: "VP Finance" → ["VP Finance"], NOT ["VP", "Finance"]
- Use specific terms to avoid false matches:
- ✓ "Software Engineer" not "Engineer" (matches Sales Engineer, etc.)
- ✓ "Product Manager" not "Manager" (matches Account Manager, etc.)
**Available filters:**
| Filter | Type | Description |
|--------|------|-------------|
| names | string[] | Search by name — can be first name, last name, or full name (e.g., ["Smith"], ["John Smith"]) |
| job_title_keywords | string[] | Titles to include |
| job_title_exclude_keywords | string[] | Titles to exclude (e.g., ["Intern"]) |
| profile_keywords | string[] | Keywords anywhere in the LinkedIn profile (headline, about, experience, etc.). Use for broad keyword searches, e.g. ["AI", "machine learning"] or ["founder", "co-founder"] |
| certification_keywords | string[] | Certifications (e.g., ["AWS", "CPA"]) |
| languages | string[] | Profile languages |
| school_names | string[] | Schools attended |
| current_role_min_months_since_start_date | number | Min months in role (tenured) |
| current_role_max_months_since_start_date | number | Max months in role (new hires) |
| locations | string[] | Locations to include (use formal names: "United States", "California") |
| locations_exclude | string[] | Locations to exclude |
### dataPoints (optional)
Enrich contacts/companies when creating a NEW search. For existing searches, use add-contact-data-points or add-company-data-points instead.
**⚠️ CRITICAL: NEVER add data points unless the user EXPLICITLY asks for them.**
Enrichments cost credits. Only include data points when the user's message specifically requests that data.
- "Find engineers at Stripe" → NO data points
- "Find engineers at Stripe and get their emails" → add Email (user explicitly asked)
- "Tell me about OpenAI" → NO data points
- Do NOT add Headcount Growth, Recent News, or any other data point "to be helpful" — only what the user asked for
**Structure:** { contactDataPoints?: DataPoint[], companyDataPoints?: DataPoint[] }
**DataPoint format:**
- Standard: { type: "<DataPointType>" }
- Custom: { type: "Custom", customDataPoint: "<brief description>" }
**Important:** Only include `customDataPoint` field when type is "Custom"
**Available contactDataPoints:** Email, Summarize Work History, Find Thought Leadership
**Available companyDataPoints:** Headcount Growth, Recent News, Investors, Company Competitors, Company Customers, Tech Stack, Website Traffic, Open Jobs, Revenue Model, Annual Revenue, Latest Funding
**Examples:**
| User request | dataPoints |
|--------------|------------|
| "engineers at Stripe" | NONE — user did not ask for enrichments |
| "engineers at Stripe with emails" | { contactDataPoints: [{type: "Email"}] } |
| "Canva's competitors and funding" | { companyDataPoints: [{type: "Company Competitors"}, {type: "Latest Funding"}] } |
| "VPs at Figma with emails + company tech stack" | { contactDataPoints: [{type: "Email"}], companyDataPoints: [{type: "Tech Stack"}] } |
| "Notion's product roadmap" (custom) | { companyDataPoints: [{type: "Custom", customDataPoint: "product roadmap"}] } |
## Examples
| User says | Parameters |
|-----------|------------|
| "Find people at OpenAI" | companyIdentifier: "openai.com" |
| "VP Finance at HubSpot" | companyIdentifier: "hubspot.com", contactFilters: { job_title_keywords: ["VP Finance"] } |
| "VPs and Directors in California at HubSpot" | companyIdentifier: "hubspot.com", contactFilters: { job_title_keywords: ["VP", "Director"], locations: ["California"] } |
| "Marketing managers outside the US at Salesforce" | companyIdentifier: "salesforce.com", contactFilters: { job_title_keywords: ["Marketing Manager"], locations_exclude: ["United States"] } |
| "New hires at Stripe (last 3 months)" | companyIdentifier: "stripe.com", contactFilters: { current_role_max_months_since_start_date: 3 } |
| "Find people mentioning AI at OpenAI" | companyIdentifier: "openai.com", contactFilters: { profile_keywords: ["AI", "artificial intelligence", "machine learning"] } |
| "Find founders at YC companies" | companyIdentifier: "ycombinator.com", contactFilters: { profile_keywords: ["founder", "co-founder"] } |
| "Find someone named Urmanov at Allstate" | companyIdentifier: "allstate.com", contactFilters: { names: ["Urmanov"] } |
## Handling Follow-ups
ANY search modification requires re-calling this tool. Never filter in chat.
**Interpret user intent:**
- "also/too/as well" → ADD to existing filters
- "only/just" → NARROW within current context (e.g., "VPs only" after Finance search → "VP Finance")
- "actually/instead/switch" → REPLACE filters entirely
- **When ambiguous, ask the user** rather than guessing
**Examples:**
1. User: "Find SDRs at Verkada" → { job_title_keywords: ["SDR", "Sales Development"] }
User: "Get AEs too" → ADD: { job_title_keywords: ["SDR", "Sales Development", "Account Executive"] }
2. User: "Find Finance people at Ramp" → { job_title_keywords: ["Finance"] }
User: "Make it VPs only" → NARROW: { job_title_keywords: ["VP Finance"] }
3. User: "Find Finance people at Ramp" → { job_title_keywords: ["Finance"] }
User: "Actually show me all VPs" → REPLACE: { job_title_keywords: ["VP"] }
## Response Behavior
- Summarize the search briefly (e.g., "Found 20 engineers at OpenAI").
- The tool returns a taskId for use with add-contact-data-points, add-company-data-points, custom functions, or get-task-context.
- For emails, use add-contact-data-points with the taskId.
Clay may render results in a widget in hosts that support MCP Apps, such as ChatGPT, claude.ai, and Cursor.
Other terminal/coding-agent hosts such as Codex, Claude Code, Windsurf, and CLI environments do not show the widget.
If you are unsure whether the widget is visible, assume it is not visible.
- If a widget is visible, avoid repeating the full widget contents unless the user asks for full contents; then call get-task-context with the taskId and answer inline.
- In terminal/coding-agent environments, when no widget is visible, or when the user asks for actual values/results, call get-task-context with the taskId and answer inline.
- **NEVER tell the user that data was not found, not returned, or unavailable without first calling get-task-context.** The initial search/tool response only includes base fields — enrichment results (emails, X/Twitter profiles, work history, custom data points, etc.) are only available via get-task-context.
- **When the user asks about a specific value** (e.g. "what's Patrick's email?", "what X profiles did you get?"), call get-task-context FIRST to check if the data has already been enriched — the user may have triggered enrichments through the widget. Only call add-contact-data-points / add-company-data-points if get-task-context shows the enrichment hasn't been run yet.
- Use get-task-context to poll until async results complete; if values are still in-progress, wait and retry rather than answering with missing values.
- If get-task-context is not available, fall back to get-task.
## Zero Results
Suggest broadening in order:
1. Remove or broaden title keywords (e.g., "Software Engineer" → "Engineer")
2. Remove location filter
3. Remove tenure filter
4. Verify company domain is correct