contact-to-email
npx skills add https://github.com/getaero-io/gtm-eng-skills --skill contact-to-email
Agent 安装分布
Skill 文档
Contact â Email
Three workflows depending on what you already have. Always validate at the end.
Which workflow to use?
| Starting data | Use |
|---|---|
| First name + last name + company | Workflow A |
| LinkedIn profile URL | Workflow B |
| First name + last name + domain | Workflow C |
Workflow A: Name + Company
Tries Apollo â Crustdata â PDL in order, stops at first match:
deepline enrich --input leads.csv --in-place --rows 0:1 \
--with-waterfall "email" \
--type email \
--result-getters '["data.email","email","data.0.email"]' \
--with 'apollo=apollo_people_match:{"first_name":"{{First Name}}","last_name":"{{Last Name}}","organization_name":"{{Company}}"}' \
--with 'crustdata=crustdata_person_enrichment:{"linkedinProfileUrl":"{{LinkedIn}}","fields":["email","current_employers"],"enrichRealtime":true}' \
--with 'pdl=peopledatalabs_enrich_contact:{"first_name":"{{First Name}}","last_name":"{{Last Name}}","domain":"{{Company Domain}}"}' \
--end-waterfall \
--with 'validation=leadmagic_email_validation:{"email":"{{email}}"}'
Required columns: First Name, Last Name, Company
Optional columns: LinkedIn, Company Domain (improves match rate)
Workflow B: LinkedIn URL
When you have LinkedIn profile URLs but no email:
deepline enrich --input leads.csv --in-place --rows 0:1 \
--with-waterfall "email" \
--type email \
--result-getters '["data.0.email","data.email","emails.0.address"]' \
--with 'apollo=apollo_people_match:{"first_name":"{{First Name}}","last_name":"{{Last Name}}","organization_name":"{{Company}}","domain":"{{Company Domain}}"}' \
--with 'crustdata=crustdata_person_enrichment:{"linkedinProfileUrl":"{{LinkedIn URL}}","fields":["email","current_employers"],"enrichRealtime":true}' \
--with 'pdl=peopledatalabs_enrich_contact:{"linkedin_url":"{{LinkedIn URL}}","first_name":"{{First Name}}","last_name":"{{Last Name}}","domain":"{{Company Domain}}"}' \
--end-waterfall \
--with 'validation=leadmagic_email_validation:{"email":"{{email}}"}'
Required columns: LinkedIn URL
Optional columns: First Name, Last Name, Company, Company Domain
Workflow C: Pattern matching
When you have name + domain but no LinkedIn. Generates common email patterns (first.last, flast, etc.) and validates each. Most cost-effective for bulk lists:
deepline enrich --input leads.csv --in-place --rows 0:1 \
--with 'patterns=run_javascript:{"code":"const f=(row[\"First Name\"]||\"\").trim().toLowerCase(); const l=(row[\"Last Name\"]||\"\").trim().toLowerCase(); const d=(row[\"Domain\"]||\"\").trim().toLowerCase(); if(!f||!l||!d) return {}; return {p1:`${f}.${l}@${d}`,p2:`${f[0]}${l}@${d}`,p3:`${f}${l[0]}@${d}`,p4:`${f}@${d}`};"}' \
--with-waterfall "email" \
--type email \
--result-getters '["data.email","email","data.0.email"]' \
--with 'v1=leadmagic_email_validation:{"email":"{{patterns.p1}}"}' \
--with 'v2=leadmagic_email_validation:{"email":"{{patterns.p2}}"}' \
--with 'v3=leadmagic_email_validation:{"email":"{{patterns.p3}}"}' \
--with 'v4=leadmagic_email_validation:{"email":"{{patterns.p4}}"}' \
--with 'apollo=apollo_people_match:{"first_name":"{{First Name}}","last_name":"{{Last Name}}","organization_name":"{{Company}}","domain":"{{Domain}}"}' \
--end-waterfall \
--with 'final_validation=leadmagic_email_validation:{"email":"{{email}}"}'
Required columns: First Name, Last Name, Domain
Understanding validation results
After validation, check validation.data.email_status:
| Status | Meaning | Action |
|---|---|---|
valid |
Deliverable | Use for outreach |
catch_all |
Domain accepts all â inconclusive | Use with caution |
invalid |
Not deliverable | Skip or try another workflow |
unknown |
Could not verify | Try pattern matching as backup |
Note:
catch_allis not a failure â many business domains use catch-all. Continue with outreach, just expect slightly higher bounce rates.
Scale after pilot
# After reviewing --rows 0:1 output, run remaining rows:
deepline enrich --input leads.csv --in-place --rows 1: \
# ... same flags as pilot
Get started
Sign up and get your API key at code.deepline.com.
npm install -g @deepline/cli
deepline auth login