AgentStack
SKILL verified MIT Self-run

Fivos Contact Enrichment

skill-fivosaresti-workflows-outbound-skills-contact-enrichment · by fivosaresti

Use this skill after fivos-contact-sourcing has produced a contact CSV and emails + phones are needed. It runs waterfall email + phone enrichment through Find Email MCP and BetterContact MCP directly - self-sufficient, does not delegate to other skills. Trigger when the user says 'enrich the contacts', 'find emails', 'waterfall these contacts', 'pull phones', or 'run the email finder'.

No reviews yet
0 installs
5 views
0.0% view→install

Install

$ agentstack add skill-fivosaresti-workflows-outbound-skills-contact-enrichment

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access Used
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Fivos Contact Enrichment? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Fivos Contact Enrichment

Contact-level enrichment. Self-sufficient - every provider call happens inside this skill, no delegation to other skills.

Hard rules

  • Self-sufficient. This skill calls Find Email MCP and BetterContact MCP directly. It does NOT call bettercontact-phone or any other skill. Every external call here is its own MCP invocation.
  • Email first, phone only when requested. Phone enrichment is ~10x the cost - do not run by default. Only if the play shape (from fivos-campaign-strategist) includes a phone channel.
  • Verification is mandatory on every email before it reaches the copywriter. Undeliverable and catch-all-not-safe are dropped.
  • Stop on deliverable. Once a contact has a deliverable or catch-all-safe email, downstream providers are not called on that contact. Saves 50%+ of waterfall spend.
  • Per-column provenance is written to the CSV for every enriched field.

Inputs

  • Contact CSV from fivos-contact-sourcing (required).
  • Enrichment columns requested - typically email, optionally phone.
  • Budget ceiling (optional).
  • Tier column (optional) - if present, allow different waterfall aggression by tier (A runs full waterfall, B/C cut off earlier).

Outputs

  1. Contact CSV with added columns: email, email_status, email_source, email_verified_at, phone, phone_source, phone_verified_at.
  2. Verification status per email (deliverable, catch_all_safe, catch_all_not_safe, undeliverable, unknown).
  3. Per-contact cost ledger.
  4. Coverage report.

Providers + MCPs

| Provider | MCP prefix | Status | |---|---|---| | Find Email (Findymail) | mcp__findymail__* | To be wired | | BetterContact | mcp__bettercontact__* | To be wired | | Zerobounce (verification) | mcp__zerobounce__* | To be wired |

Until the MCPs are registered, fall back to each provider's REST API via Bash + curl with API keys in env (FINDYMAIL_API_KEY, BETTERCONTACT_API_KEY, ZEROBOUNCE_API_KEY).

Workflow

Step 1 - Cost estimate + Gate

Contact enrichment estimate -  / 

Contacts: N
Columns: email, [phone]
Waterfall depth:
  - Tier A: full (Find Email → BetterContact bulk)
  - Tier B: Find Email only
  - Tier C: Find Email only (single pass, no fallback)

Projected cost (assuming typical hit-rate cascade):
  - Email: $X
  - Phone: $Y (if requested)
Total: $X+Y

Proceed? Manager approval required if over budget.

Step 2 - Email waterfall

See [waterfall.md](waterfall.md) for canonical order, stop-conditions, and per-provider batch sizes. High-level:

  1. Find Email MCP first (cheapest, highest pre-verified hit rate).
mcp__findymail__find_emails({
  contacts: [
    { full_name: "", domain: "" },
    ...
  ]
})
  1. BetterContact bulk for any contact that Find Email missed. BetterContact is async - poll until done.
mcp__bettercontact__bulk_enrich({
  contacts: [
    { full_name: "", domain: "", linkedin_url: "" },
    ...
  ],
  enrich_phone_number: false
})
# returns { id }

mcp__bettercontact__get_result({ request_id:  })
# poll every 30s until state == "done", typically 30-120s (up to 10min)

Stop on deliverable or catch_all_safe per contact.

Step 3 - Verify every email

Run Zerobounce on every email returned that isn't already pre-verified by the source.

mcp__zerobounce__validate_email({ email: "" })

Drop undeliverable and catch_all_not_safe. Keep deliverable and catch_all_safe (only for domains on the client's safe catch-all allow-list).

Update email_status per contact. Only rows with deliverable or catch_all_safe flow to the copywriter.

Step 4 - Phone waterfall (only if requested)

Same self-sufficient pattern. Gate explicitly on approval before running - phone is expensive.

mcp__bettercontact__bulk_enrich({
  contacts: [...],
  enrich_phone_number: true
})

See [waterfall.md](waterfall.md) for phone provider order.

Step 5 - Coverage report

Email coverage -  / 

Contacts in: N
Deliverable: X (X%)
Catch-all safe: Y (Y%)
Undeliverable / dropped: Z (Z%)

By tier:
  - Tier A: X% deliverable, Y% catch-all-safe
  - Tier B: ...
  - Tier C: ...

Phone coverage (if requested):
  - Mobile found: X (X%)
  - Landline only: Y
  - None: Z

If Tier A email coverage is below 70%, investigate before handing off - usually a persona / domain issue from upstream.

Step 6 - Upload + handoff

Write enriched contacts to the internal DB with full provenance. Hand off to fivos-lead-scoring (if not already scored at account level) or directly to fivos-copywriter.

Cost controls

  • Always stop on deliverable. Do not run later providers "for comparison" - it wastes credits.
  • Skip verification when the provider returns a pre-verified email. Providers that return verification: verified do not need a Zerobounce pass.
  • Cap waterfall depth by tier. Tier C contacts do not justify a full waterfall.

Sub-files

  • [waterfall.md](waterfall.md) - canonical order, stop conditions, per-provider cost + quirks, MCP call syntax per step.

References

  • ~/.agents/skills/gtm-meta-skill/provider-playbooks/bettercontact.md
  • ~/.agents/skills/gtm-meta-skill/provider-playbooks/zerobounce.md

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.