Skip to Content
CoursesMCP courseCRM enrichment

Module 03 · Get contact details

Outcome: a verified work email for a profile, and a clear rule for when a 12-credit phone number is worth buying.

Surface
MCP server
Level
Beginner
Uses
enrich_personfind_work_emailfind_personal_emailverify_emailfind_mobile_numberfind_work_phonevalidate_whatsapp
Credits
~30 for all seven, or ~6 if you skip the two phone tools
Prerequisite
Module 02, or any LinkedIn profile URL

Tools in this module

ToolCostRequired inputUse it when
verify_email0.3emailAlways, before sending
enrich_person1Any one identifierYou have a name, email, URL or company and want the record
find_work_email1linkedin_urlThe default contact tool
find_personal_email3linkedin_urlWork address bounced, or they are between jobs
validate_whatsapp1mobileBefore a WhatsApp touch
find_mobile_number12linkedin_urlLate-stage, named accounts only
find_work_phone12linkedin_urlLate-stage, named accounts only

Read that table top to bottom. It is also the order you should run them in — cheapest first, and each step decides whether the next one fires.

The two phone tools are 12 credits each, 40× the cost of a verification. Never run them across a list. Run them on a named account after an email has already failed.


Example prompts

find_work_email — the default

Use find_work_email with: - linkedin_url "https://linkedin.com/in/janedoe" - first_name "Jane" - last_name "Doe" - organization_name "Stripe" Do not guess an email pattern. If nothing comes back, say so and stop.

The optional name and company fields are not decoration — they disambiguate common names and lift the hit rate on the same 1 credit.

verify_email — always

Use verify_email on "jane.doe@stripe.com" and tell me the deliverability status. If it is not deliverable, do not use it.

enrich_person — when you have something other than a URL

Any one of first_name + last_name, email, linkedin_url, or organization_name is enough. More identifiers, better match.

Use enrich_person with first_name "Jane", last_name "Doe", organization_name "Stripe". Return title, company, location and linkedin_url.

find_personal_email — the fallback

Use find_personal_email with linkedin_url "https://linkedin.com/in/janedoe", organization_name "Stripe". Only run this because the work email came back undeliverable.

find_mobile_number — 12 credits, one person

Use find_mobile_number with linkedin_url "https://linkedin.com/in/janedoe", first_name "Jane", last_name "Doe", organization_name "Stripe". This is one person only. Do not run it on any other row.

find_work_phone — 12 credits, one person

Use find_work_phone with linkedin_url "https://linkedin.com/in/janedoe", organization_name "Stripe". Return the number and extension if there is one. One person only.

validate_whatsapp — before the touch

Use validate_whatsapp with mobile "+14155552671". Include the country code. Tell me yes or no.

The chain that costs ~2.3 credits

Find the email

find_work_email on the LinkedIn URL — 1 credit.

Verify it

verify_email on whatever came back — 0.3 credits. Undeliverable stops the row.

Fill the record

linkedin_profile_enrich or enrich_person for title, company and history — 1 credit.

Stop

Phones only if the email failed and the account is worth 12 credits.

Run it as one message:

For this profile: https://linkedin.com/in/janedoe 1. find_work_email — pass organization_name "Stripe". 2. verify_email on the result. If undeliverable, stop and tell me. 3. enrich_person to fill in title and company. Return one row: name, title, company, email, verification status. Report credits used.

Workflow prompts

This is the module that plugs into everything else. SyncGTM finds and verifies; your CRM or sequencer holds the result.

HubSpot — fill the contacts missing an email

  • pull all contacts missing emails
  • use SyncGTM MCP to find work emails
  • verify before writing
  • update the records in HubSpot
1. Pull every HubSpot contact with an empty email that has a LinkedIn URL on the record. Tell me how many there are before doing anything else. 2. For the first 50: find_work_email using the LinkedIn URL, passing first_name, last_name and the company name from the record. Do not guess an email pattern. 3. verify_email on every result. Drop anything undeliverable — do not write it. 4. Show me the table: contact, LinkedIn, found email, status. Wait for my go. 5. On my go-ahead, update each HubSpot contact with the verified address and set a note with the verification status and today's date. Never overwrite an email that already exists.

Swap HubSpot for Salesforce, Attio or Close — the shape does not change, only the system that holds the record.

Attio — repair records that have decayed

  • find contacts whose title or company looks stale
  • re-enrich the person from their LinkedIn profile
  • review the diff, write only what changed
1. Pull Attio people records not updated in 12 months that have a LinkedIn URL. 2. For each: enrich_person with the LinkedIn URL to get current title and company. 3. Compare against what Attio holds. Build a diff table: field, old value, new value. Only include rows where something actually changed. 4. Show me the diff. Do not write anything yet. 5. On my go-ahead, update only the changed fields. Leave everything else alone.

Instantly — verify a list before it touches a campaign

  • take the list about to be sequenced
  • verify every address
  • load only the deliverable ones
1. Take this list of email addresses. 2. verify_email on each — 0.3 credits, so <N> addresses is about <N × 0.3>. Confirm the total with me before starting. 3. Split into three groups: deliverable, undeliverable, accept-all/risky. 4. Add ONLY the deliverable group to the Instantly campaign "Q3 RevOps". 5. Give me the undeliverable and risky lists separately so I can decide what to do with them.

Escalate to a phone, one person at a time

  • confirm the email path has failed
  • name the account
  • buy exactly one number
This is for ONE person: <LinkedIn URL>. Their work email came back undeliverable and this is a named target account. 1. find_personal_email first — 3 credits. If that works, stop there. 2. Only if it returns nothing, find_mobile_number — 12 credits. 3. If a mobile comes back, validate_whatsapp on it with the country code. Do not run any of this on anyone else. Report exactly what was spent.

Best prompting practices

  • Pass the optional fields. first_name, last_name and organization_name cost nothing and raise the hit rate.
  • Say “do not guess.” A model with no result will happily invent first.last@domain.com. Undeliverable addresses hurt your sending domain.
  • Verify before you send, not before you store. 0.3 credits is the cheapest insurance on the server.
  • Gate the expensive tools in the prompt. “Only if the email failed” is a condition the model will honour if you write it.
  • Include the country code for validate_whatsapp+14155552671, not 4155552671.

Where this breaks

“Get me everyone’s phone number” against a 40-row list is 480 credits and the model will run it. State the row count and the tool in the same sentence, every time.

Waterfall tools only bill when a provider returns a result, so a run on a well-known segment costs less than the same run on a long tail. Budget on hit rate, not on row count.


Further automation

MCP Contact Enricher  is this module as a skill file — /mcp-contact-enricher runs the stack cheapest-first and keeps the 12-credit phone tools behind an explicit yes.

Contact Finder goes further: a company list in, verified decision-maker contacts out.

Browse all GTM agents →


Next module

04 — Profiles and person signals, reading what someone posted, reacted to and commented on before you use the address you just bought.

Reference: Find Work Email · Verify Email · Enrich Person · Find Personal Email · Find Mobile Number · Find Work Phone · Validate WhatsApp · Waterfall Enrichment