---
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

## Risk scores - confirm before enriching

Every email MoltSets returns carries a deliverability risk score - a grade from A to F. Ask which grades to keep before running anything:

> "MoltSets grades email deliverability risk from A (best) to F (no data). Which grades should I keep? I'd recommend **A, B, C and F** - and dropping **D**, since D is a confirmed bounce, complaint or spam trap."

| Grade | Meaning | Best practice |
| --- | --- | --- |
| A | Strongest engagement signal available | Safe to send immediately |
| B | Solid | Fine in regular sends; on a new or warming domain, send a smaller batch before scaling |
| C | Deliverability can't be confirmed | Segment separately from A/B, warm at low volume, watch engagement, suppress non-responders after 1-2 attempts |
| D | Confirmed bounce, complaint or spam trap | Never send - fastest way to trip spam traps and damage sender reputation for the whole list |
| F | No data - unknown risk, not "safe" | Re-verify before sending, or treat like C |

Use whatever set the user confirms. Treat the grade as a filter, not a guarantee - it lowers risk, it doesn't remove it. Pair it with the user's own sending domain reputation and list hygiene.

## 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 | Risk | Personal Email | Risk | Mobile |
|---|---|---|---|---|---|---|---|
| Jane Smith | Acme Corp | jane@acme.com | jane@acme.com | A | jane.smith@gmail.com | B | +1 415 555 0192 |
| Sam Lee | Oldco | - | sam@oldco.com | D (held) | Not found | - | Not found |
| John Doe | Initech | - | Not found | - | john.d@gmail.com | C | Not found |

- `RB2B Email` = the `WorkEmail` value from the original CSV (show `-` if empty)
- `Risk` = the A-F deliverability grade MoltSets returned for the email in the column to its left
- Show `Not found` for any MoltSets lookup that returned nothing

Show the risk score on every row that has an email, including grades outside the accepted set - flag those rather than dropping them silently, so the user can see what was filtered and why.

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

Email risk scores:
  A: X   B: X   C: X   D: X   F: X
  kept (accepted grades):  X
  filtered (excluded):     X
```

Do not fabricate data.
