---
name: find-and-enrich
description: Use this skill whenever the user wants to go from names (and optionally companies) directly to contact information — without LinkedIn URLs already in hand.
---

# Find and Enrich

End-to-end workflow: search for people by name and company domain, then retrieve their contact data. Works for one person or a bulk list.

Uses `MoltSets:linkedin_slug_search` to find profiles, then `MoltSets:enrich_email`, `MoltSets:enrich_personal_email`, and/or `MoltSets:enrich_phone` to retrieve contact data.

## Triggers

"find the email for [Name] at [Company]", "get contact info for [Name]", "I have a list of names and companies, enrich them", "look up and enrich these people", or any request combining finding people AND getting their contact details in one go. Works for a single person or a bulk list of names. Use this instead of running find-person and enrich-contact separately when the intent is clearly to end up with contact data.

## What linkedin_slug_search accepts

- `name` — full name, parsed into first/last automatically. OR use `first_name` + `last_name` separately.
- `company` or `company_domain` — must be a **domain** (e.g. `acme.com`), not a company name. URLs normalised automatically.
- `count_only` — boolean. Free, no credits. Returns result count only.

**No job title parameter. No batch mode for search** — each person requires a separate `linkedin_slug_search` call.

## API rules for enrichment tools

- **Singular**: pass `linkedin_url` (string)
- **Batch**: pass `linkedin_urls` (array, max 100). Do NOT combine with `linkedin_url`.
- Credits only charged when data is found.

---

## Set Expectations

Before firing any calls, give the user a brief, dry heads-up. Deadpan over enthusiastic — no filler, no corporate speak.

Facts to work with:
- Single person: 3–5 calls (count check → search → enrich), ~10–15 seconds
- Bulk: no batch search API — each person is a separate search call, then one enrichment batch at the end. For N people: roughly N × 2–3 seconds for the search phase, plus enrichment on top
- For 10+ people, flag that this runs sequentially and will take a moment

## Single person workflow

### Step 1 — Resolve company domain
If the user gives a company name rather than a domain:
- Infer confidently for well-known companies (HubSpot → `hubspot.com`)
- For unfamiliar companies, ask the user for the domain

### Step 2 — count_only check (free)
Call `linkedin_slug_search` with `count_only: true`:
- **0** → loosen parameters (drop domain, recheck name spelling). Report what you tried.
- **1** → proceed to full search
- **2+** → tighten if possible (add domain), then run full search

### Step 3 — Confirm the match
- **Unambiguous single match**: proceed directly to enrichment. Say: "Found Jane Smith, Head of Marketing at Acme Corp — pulling her contact info now..."
- **Multiple results**: present as a numbered list (Name | Title | Company | LinkedIn URL) and ask the user to pick one

### Step 4 — Enrich and present
Run the appropriate enrichment tools (see what-to-run table below). Present as a contact block:

```
Jane Smith — Head of Marketing, Acme Corp
LinkedIn: https://www.linkedin.com/in/janesmith

Business email: jane@acmecorp.com (validated 2024-11-03)
Personal email: Not found
Mobile: +1 415 555 0192
```

---

## Bulk workflow (list of names)

When the user provides multiple names (pasted list, CSV, etc.):

### Step 1 — Parse the input
Extract rows into: Name | Company (or domain). Infer domains for well-known companies. Flag any rows where the company is unknown and you can't infer a domain — ask the user to fill these in, or skip them.

### Step 2 — Confirm before running
Tell the user: "I have X people to look up. I'll search for each one, auto-select the best match, and enrich. This may take a moment." Wait for confirmation before proceeding.

### Step 3 — Search sequentially
For each person:
1. Run `count_only: true` first
2. If count = 1, run full search and take that result
3. If count = 0, mark as "Not found" and move on
4. If count = 2+, run full search and take the top result (closest name + domain match). Note it as "auto-selected" in the output.

Do not pause on individual matches during bulk processing — resolve automatically and flag anything uncertain in the final output.

### Step 4 — Bulk enrich
Once all LinkedIn URLs are resolved, call the enrichment tools with `linkedin_urls` (array). Run in parallel where possible.

### Step 5 — Present results as a table

| Name | Company | LinkedIn URL | Business Email | Personal Email | Mobile |
|---|---|---|---|---|---|
| Jane Smith | Acme Corp | linkedin.com/in/janesmith | jane@acme.com | Not found | +1 415 555 0192 |
| John Doe | Initech | Not found | — | — | — |

Flag auto-selected rows. Summarise at the end: "Found LinkedIn profiles for X of Y people. Retrieved emails for X, phone numbers for X."

---

## What to retrieve

| User says... | Run... |
|---|---|
| "email" (unspecified) | `enrich_email` only |
| "business email" / "work email" | `enrich_email` only |
| "personal email" | `enrich_personal_email` only |
| "phone" / "mobile" | `enrich_phone` only |
| "contact info" / "everything" / no preference | All three |

## Edge cases

- If the user provides LinkedIn URLs directly (not names), skip to enrichment via the enrich-contact skill
- Bulk search has no batch API — it loops. For large lists (50+), set expectations that it will take time
- Never fabricate data — only surface what the API returns
