---
name: moltsets-enrich-rb2b-visitors
description: Use this skill when the user has an RB2B visitor export and wants to enrich the identified people with business email, personal email, and/or mobile phone numbers.
---

# Enrich RB2B Visitors

Enrich identified website visitors from an RB2B CSV export with additional contact data using MoltSets.

## Triggers

"enrich my RB2B visitors", "add email and phone to my RB2B export", "get contact info for people who visited my site", "enrich these website visitors", or when a user uploads/pastes an RB2B CSV and wants contact enrichment.

## CSV parsing

Read the uploaded or pasted CSV. Columns that matter:
- `LinkedInUrl` - person LinkedIn URL (required for enrichment)
- `ProfileType` - filter to `Person` rows only; skip `Company` rows
- `FirstName`, `LastName`, `CompanyName` - for display
- `WorkEmail` - RB2B-supplied email (may be empty); preserve in output

Report: "Found X identified visitors (ProfileType = Person). Skipping Y company-level rows."

## 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 (scale to list size):
- Emails are one call per URL (fired in parallel); phone is a single batch call taking up to 100 URLs at once
- Up to 3 lookups per person (business email + personal email + phone) - run in parallel
- Credits only charged on hits - RB2B's `WorkEmail` is free, MoltSets charges on new finds only

## Step 1 - Determine what to enrich

| User says | Run |
|---|---|
| "email only" / "just email" | `linkedin_to_business_email` + `linkedin_to_personal_email` |
| "business email only" | `linkedin_to_business_email` only |
| "phone only" | `linkedin_to_mobile_phone` only |
| "everything" / no preference | All three in parallel |

When in doubt, run all three - credits only charged on hits.

## Step 2 - Credit check

Call `MoltSets:get_billing` (free). Estimate based on list size and tools selected.

## Step 3 - Plan the calls

- **Emails** (`linkedin_to_business_email`, `linkedin_to_personal_email`): one call per URL - there is no batch array. Fire these single calls in parallel, in batches sized to a sensible concurrency limit.
- **Phone** (`linkedin_to_mobile_phone`): a single call accepts up to 100 URLs via `linkedin_urls`. Chunk the list into groups of 100 for this tool only.

## Step 4 - Run enrichment (parallel)

Run the selected lookups in parallel:
- `MoltSets:linkedin_to_business_email` - one call per URL, `linkedin_url: "[URL]"`
- `MoltSets:linkedin_to_personal_email` - one call per URL, `linkedin_url: "[URL]"`
- `MoltSets:linkedin_to_mobile_phone` - one call per chunk, `linkedin_urls: [array]` (max 100)

## Step 5 - Output

| Name | Company | RB2B Email | Business Email | Personal Email | Mobile |
|---|---|---|---|---|---|
| Jane Smith | Acme Corp | jane@acme.com | jane@acme.com | jane.smith@gmail.com | +1 415 555 0192 |
| John Doe | Initech | - | Not found | john.d@gmail.com | Not found |

- `RB2B Email` = the `WorkEmail` value from the original CSV (show `-` if empty)
- Show `Not found` for any MoltSets lookup that returned nothing

Summary:
```
Visitors processed:   X
Business emails:      X/N (XX%)
Personal emails:      X/N (XX%)
Mobile numbers:       X/N (XX%)
```

Do not fabricate data.
