---
name: enrich-contact
description: Use this skill whenever the user has one or more LinkedIn URLs and wants to get contact information — business email, personal email, or mobile phone.
---

# Enrich Contact

Retrieve contact data for one or many LinkedIn profiles using `MoltSets:enrich_email`, `MoltSets:enrich_personal_email`, and `MoltSets:enrich_phone`.

## Triggers

"get the email for [LinkedIn URL]", "find their phone number", "enrich this profile", "enrich these profiles", "I have a list of LinkedIn URLs", "bulk enrich", "get contact info for all of these", or when a LinkedIn URL has just been confirmed via the find-person skill. Works for a single profile or up to 100 at once. Do NOT use this skill if the user does not yet have LinkedIn URLs — use find-person first.

## API rules

- **Singular**: pass `linkedin_url` (string)
- **Batch**: pass `linkedin_urls` (array, max 100). Do NOT include `linkedin_url` when using batch mode — they cannot be combined.
- Credits are 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. One line is enough.

Facts to work with (scale to batch size and tools selected):
- Single profile: 1–3 calls, a few seconds
- 2–10 profiles: up to 30 calls, ~10–20 seconds
- 11–50 profiles: up to 150 calls, ~20–45 seconds
- 51–100 profiles: up to 300 calls, up to a minute

Always include the count and what's being fetched (email / phone / everything).

## Step 1 — Determine what to retrieve

| User says... | Run... |
|---|---|
| "business email" / "work email" / "company email" | `enrich_email` only |
| "personal email" / "home email" | `enrich_personal_email` only |
| "phone" / "mobile" / "number" | `enrich_phone` only |
| "everything" / "all contact info" / no preference stated | All three |

When in doubt, run all three in parallel — credits are only charged on hits.

## Step 2 — Detect singular vs. batch

**Singular (1 URL):**
- Call the relevant tool(s) with `linkedin_url`
- Present as a contact block (see format below)

**Batch (2–100 URLs):**
- Confirm count with the user before running: "I have X profiles — enriching now for [email / phone / everything]."
- Call the relevant tool(s) with `linkedin_urls` array
- If the list exceeds 100, tell the user the limit is 100 per call and ask how they'd like to split it
- Present results as a table (see format below)

## Accepting bulk input

Users may provide multiple URLs in various formats:
- Line-separated paste
- Comma-separated list
- Uploaded CSV (extract the LinkedIn URL column)

Parse and deduplicate before passing to the tool.

## Output formats

**Singular — contact block:**
```
Business email: jane@acmecorp.com (validated 2024-11-03)
Personal email: jane.smith@gmail.com (validated 2024-09-17)
Mobile: +1 415 555 0192
```
Show `Not found` for any field where the lookup returned nothing.

**Batch — table:**

| LinkedIn URL | Business Email | Personal Email | Mobile |
|---|---|---|---|
| linkedin.com/in/janesmith | jane@acmecorp.com | Not found | +1 415 555 0192 |
| linkedin.com/in/johndoe | Not found | john@gmail.com | Not found |

After the table, summarise hit rates: e.g. "Found business emails for 34 of 50 profiles, phone numbers for 21."

## Edge cases

- If a URL looks malformed or is just a slug (e.g. `janesmith`), construct the full URL: `https://www.linkedin.com/in/janesmith`
- If no data is found for any field across the entire batch, tell the user and suggest verifying the URLs are correct and profiles are active
- Do not fabricate contact data — only surface what the API returns
