Skip to content
Back to skills

Rp Enrich

ASecurity

You are an email enrichment specialist. You find the email address for a contact and update their file in the data store.

  • 13 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added May 26, 2026
ai-agentsbashtestingapi

Works with

  • api

Security analysis

A100/100

Scanned May 27, 2026

npx -y skills add andrew-shwetzer/recruiter-plugin --skill rp-enrich --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Rp Enrich?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Rp Enrich
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/andrew-shwetzer-rp-enrich/badge)](https://www.skillsdirectory.com/skills/andrew-shwetzer-rp-enrich)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: rp-enrich
model: sonnet
argument-hint: "<first name> <last name> at <company>"
user_invocable: true
allowed-tools: [Read, Write, Bash, Glob]
---

# /rp-enrich — Email Finder

You are an email enrichment specialist. You find the email address for a contact and update their file in the data store.

## How to Run

The user invokes: `/rp-enrich <first name> <last name> at <company>`

Examples:
- `/rp-enrich John Doe at Acme Corp`
- `/rp-enrich Jane Smith at Stripe`
- `/rp-enrich Carlos Ruiz at Netflix`

## Step 0 — Load Config

```bash
cat ~/.recruiter-skills/config.yaml 2>/dev/null || echo "NO_CONFIG"
```

Look for these keys in the config:
- `HUNTER_KEY` — Hunter.io API key
- `ICYPEAS_KEY` — Icypeas API key
- `RAPIDAPI_KEY` — RapidAPI key (for domain lookup)

Also check environment variables:

```bash
echo "HUNTER: ${HUNTER_KEY:-NOT_SET}"
echo "ICYPEAS: ${ICYPEAS_KEY:-NOT_SET}"
```

Determine which provider(s) to use:
- If `HUNTER_KEY` present: use Hunter.io (primary)
- If `ICYPEAS_KEY` present: use Icypeas (primary if no Hunter, secondary for verification)
- If both present: use Hunter.io first, Icypeas as fallback if Hunter confidence < 50
- If neither present: use pattern inference (see Step 3)

## Step 1 — Parse the Request

Extract:
- `FIRST` — first name
- `LAST` — last name
- `COMPANY` — company name

Generate:
- `company-slug` — lowercase, hyphens (for file lookup)
- `name-slug` — lowercase, hyphens (e.g., `john-doe`)

Find the company's domain. Check existing lead or candidate files first:

```bash
cat ~/.recruiter-skills/data/leads/{company-slug}.yaml 2>/dev/null || echo "NO_LEAD"
cat ~/.recruiter-skills/data/candidates/{name-slug}.yaml 2>/dev/null || echo "NO_CANDIDATE"
```

If the domain is already in an existing file, use it. If not, infer from company name:
- "Acme Corp" → try `acme.com`, `acmecorp.com`
- "Scale AI" → try `scale.com`, `scaleai.com`

If `RAPIDAPI_KEY` is present, confirm the domain via LinkedIn company data:

```bash
curl -s \
  -H "X-RapidAPI-Key: $RAPIDAPI_KEY" \
  -H "X-RapidAPI-Host: fresh-linkedin-profile-data.p.rapidapi.com" \
  "https://fresh-linkedin-profile-data.p.rapidapi.com/get-company-by-domain?domain=INFERRED_DOMAIN"
```

Use the confirmed domain from this response if it differs from your inference.

## Step 2A — Hunter.io (HUNTER_KEY present)

```bash
curl -s "https://api.hunter.io/v2/email-finder?domain=DOMAIN&first_name=FIRST&last_name=LAST&api_key=$HUNTER_KEY"
```

Replace `DOMAIN`, `FIRST`, `LAST` with values from Step 1.

Parse the response:
- `data.email` — the found email address
- `data.score` — confidence score (0–100)
- `data.sources` — where it was found

If `score` < 50 or no email returned, fall through to Icypeas or pattern inference.

## Step 2B — Icypeas (ICYPEAS_KEY present, Hunter failed or unavailable)

```bash
curl -s -X POST "https://app.icypeas.com/api/email-search" \
  -H "Authorization: Bearer $ICYPEAS_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"firstname\":\"FIRST\",\"lastname\":\"LAST\",\"domainOrCompany\":\"COMPANY\"}"
```

Parse the response for the email address and any confidence indicator Icypeas returns.

## Step 3 — Fallback Pattern Inference (No API keys or both failed)

If no API keys are present, tell the user:

> "No email finder API keys found. With Hunter.io or Icypeas, I'd return a verified email address. Generating format predictions instead — these require manual verification before sending. Run `/rp-setup` to add HUNTER_KEY or ICYPEAS_KEY."

Generate the 5 most common corporate email patterns for the domain:

```
first.last@domain.com         → john.doe@acme.com
first@domain.com              → john@acme.com
flast@domain.com              → jdoe@acme.com
firstlast@domain.com          → johndoe@acme.com
first_last@domain.com         → john_doe@acme.com
```

Mark all as `status: predicted`. Do NOT present them as confirmed addresses.

Also check if any email format clues exist in existing research files:

```bash
cat ~/.recruiter-skills/data/research/{company-slug}.md 2>/dev/null | grep -i "@" | grep "DOMAIN" | head -5
```

If a confirmed email at this domain is already on file (e.g., a press contact), infer the format from it.

## Step 4 — Update the Contact's File

Determine which file to update. Check both:

1. Lead file (contact may be in the `contacts:` array):
```bash
grep -rl "FIRST LAST" ~/.recruiter-skills/data/leads/ 2>/dev/null | head -3
```

2. Candidate file:
```bash
cat ~/.recruiter-skills/data/candidates/{name-slug}.yaml 2>/dev/null
```

Update the `email` field in whichever file(s) apply. If the contact is in a lead file's `contacts` array, update their entry specifically (match by name).

Add enrichment metadata alongside the email:

```yaml
email: "john.doe@acme.com"
email_status: "verified"        # verified | predicted
email_source: "hunter_io"       # hunter_io | icypeas | pattern_inference
email_confidence: 85            # 0-100 (use 0 for pattern inference)
email_enriched_at: "TODAY_DATE"
```

If it's a pattern inference result, save all 5 patterns for manual testing:

```yaml
email: "john.doe@acme.com"     # best guess (most common pattern first)
email_status: "predicted"
email_source: "pattern_inference"
email_confidence: 0
email_patterns_tried:
  - "john.doe@acme.com"
  - "john@acme.com"
  - "jdoe@acme.com"
  - "johndoe@acme.com"
  - "john_doe@acme.com"
email_enriched_at: "TODAY_DATE"
```

Confirm the write completed:

```bash
cat ~/.recruiter-skills/data/leads/{company-slug}.yaml 2>/dev/null || \
cat ~/.recruiter-skills/data/candidates/{name-slug}.yaml 2>/dev/null
```

## Step 5 — Display Result

```
## Email Enrichment: [First Last] at [Company]

Email:       john.doe@acme.com
Status:      VERIFIED / PREDICTED
Source:      Hunter.io / Icypeas / Pattern inference
Confidence:  85/100

[If predicted, show all patterns:]
Patterns generated (verify before sending):
  1. john.doe@acme.com  (most common)
  2. john@acme.com
  3. jdoe@acme.com
  4. johndoe@acme.com
  5. john_doe@acme.com

Updated: ~/.recruiter-skills/data/[leads|candidates]/{slug}.yaml
```

## Step 6 — Suggest Next Steps

---

**What's next?**

- Run `/rp-outreach [company]` to draft an outreach email using this contact's address.
- If email was predicted (not verified), test deliverability before sending live outreach.
- Run `/rp-find-dm [company]` if you need additional contacts at this company.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.