email-campaign
When To Use
Use when the user wants to assemble a targeted, verified outreach list end-to-end: discover target companies, pull emails for a domain, find a specific person's email, verify deliverability, enrich the lead for personalization, and pull company brand context. Every step is paid per-call through MPP merchants and via the SELAT Router — no API keys to manage.
Workflow
- Install:
selat skill install email-campaign
- Run:
selat skill run email-campaign --domain stripe.com --email john@stripe.com [--industry SaaS] [--firstName John] [--lastName Doe] [--company Stripe]
- The CLI compiles each step into a
selat-pay call (one MPP on Tempo payment per step), runs them in order, and prints a per-step status + summary.
Steps (in order):
- Step 1 — Fiber
POST /v1/company-search — find target companies by industry and headcount.
- Step 2 — Hunter
POST /hunter/domain-search — all emails found for the target domain.
- Step 3 — Hunter
POST /hunter/email-finder — a specific person's email at that domain.
- Step 4 — Hunter
POST /hunter/email-verifier — deliverability check for a single email.
- Step 5 — Hunter
POST /hunter/email-verifier — second-pass bounce-risk check (Hunter's verdict covers catch-all domains; drop this step if one verification is enough).
- Step 6 — Apollo
POST /apollo/people-enrichment — enrich the lead with contact + company details for personalization.
- Step 7 — Abstract Company Enrichment
POST /abstract-company-enrichment/lookup — industry, description, size, and location for the company (no logo/color brand assets).
Inputs And Outputs
| Param |
Required |
Default |
Description |
industry |
no |
SaaS |
Industry filter for the Fiber company-search step |
domain |
yes |
stripe.com |
Target domain for Hunter domain-search, email-finder, and the Abstract Company Enrichment lookup |
firstName |
no |
John |
First name for Hunter email-finder and Apollo people-enrichment |
lastName |
no |
Doe |
Last name for Hunter email-finder and Apollo people-enrichment |
company |
no |
Stripe |
Company name (sent as organization_name) for the Apollo people-enrichment step |
email |
yes |
john@stripe.com |
Email to verify and bounce-check (both Hunter email-verifier) |
Outputs: Hunter returns email lists / verification verdicts (deliverability + bounce/catch-all); Fiber returns matching companies; Apollo returns enriched lead fields; Abstract Company Enrichment returns company firmographics (industry, description, size, location — not logos/colors).
Gotchas
- All seven steps are via the SELAT Router MPP payments — the run needs
SELAT_ROUTER_URL configured and the router reachable; every step settles through the SELAT Router.
- The MPP on Tempo Hunter endpoints are POST with a JSON body (
{domain}, {email}, {domain,first_name,last_name}) — not the GET/query form from the upstream Hunter docs.
- Per-step live prices (probe-verified 2026-07-10): $0.10815 + $0.01365 + $0.0084 + $0.0084 + $0.0084 + $0.0063 ≈ $0.1533 for a full manifest run; per-step
maxAmount caps are ~10x each live price ($0.10–$1.00; top-level fallback $1.00) — a ceiling, not the price.
- Hunter
domain-search is the most expensive step ($0.10815) — drop it if you already know your target person and only need find + verify + enrich.
- The bounce check (step 5) is a second pass through the same Hunter
email-verifier endpoint as step 4 — Hunter's verdict already covers bounce risk and catch-all domains, so drop one of the two if a single verification is enough.
- Steps run independently: a later step can succeed even if an earlier one fails; always read the per-step summary.
- Every manifest step is POST with a JSON body — no query-string endpoints remain.
Validation
--chain base in the probe commands below is only the flag selat-pay requires today — a probe reads a free, chain-independent quote and never settles. A real paid run resolves the settlement chain from your funded Circle Gateway balance, not the manifest.
Probe each endpoint for a free 402 challenge (no payment sent) with --probe-only:
selat-pay POST "https://api.fiber.ai/v1/company-search" --body '{"searchParams":{"industries":["SaaS"],"employee_count_min":50,"employee_count_max":500}}' --chain base --probe-only
selat-pay POST "https://hunter.io/hunter/domain-search" --body '{"domain":"stripe.com"}' --chain base --probe-only
selat-pay POST "https://hunter.io/hunter/email-finder" --body '{"domain":"stripe.com","first_name":"John","last_name":"Doe"}' --chain base --probe-only
selat-pay POST "https://hunter.io/hunter/email-verifier" --body '{"email":"john@stripe.com"}' --chain base --probe-only
selat-pay POST "https://hunter.mpp.paywithlocus.com/hunter/email-verifier" --body '{"email":"john@stripe.com"}' --chain base --probe-only (bounce check — same endpoint as the deliverability step)
selat-pay POST "https://apollo.mpp.paywithlocus.com/apollo/people-enrichment" --body '{"first_name":"John","last_name":"Doe","organization_name":"Stripe"}' --chain base --probe-only
selat-pay POST "https://abstract-company-enrichment.mpp.paywithlocus.com/abstract-company-enrichment/lookup" --body '{"domain":"stripe.com"}' --chain base --probe-only
A probe returns the merchant's 402 payment requirements without charging. A successful paid run prints status=200 and a ✓ for each step.
References
1---2name: email-campaign3description: Use this skill when the user wants to build a verified cold-email or outreach list — e.g. "build an email campaign", "find and verify emails for a domain", "find someone's work email", "verify these emails before I send", "enrich a lead for personalized outreach", "get company brand context for outreach". Runs a 7-step pipeline across MPP merchants (Fiber company search, Hunter domain/email lookup + verification + bounce check, Apollo lead enrichment, Abstract Company Enrichment company context), all through the SELAT Router.4license: Apache-2.05---67# email-campaign89## When To Use1011Use when the user wants to assemble a targeted, verified outreach list end-to-end: discover target companies, pull emails for a domain, find a specific person's email, verify deliverability, enrich the lead for personalization, and pull company brand context. Every step is paid per-call through MPP merchants and via the SELAT Router — no API keys to manage.1213## Workflow14151. Install: `selat skill install email-campaign`162. Run: `selat skill run email-campaign --domain stripe.com --email john@stripe.com [--industry SaaS] [--firstName John] [--lastName Doe] [--company Stripe]`173. The CLI compiles each step into a `selat-pay` call (one MPP on Tempo payment per step), runs them in order, and prints a per-step status + summary.1819Steps (in order):2021- **Step 1 — Fiber** `POST /v1/company-search` — find target companies by industry and headcount.22- **Step 2 — Hunter** `POST /hunter/domain-search` — all emails found for the target domain.23- **Step 3 — Hunter** `POST /hunter/email-finder` — a specific person's email at that domain.24- **Step 4 — Hunter** `POST /hunter/email-verifier` — deliverability check for a single email.25- **Step 5 — Hunter** `POST /hunter/email-verifier` — second-pass bounce-risk check (Hunter's verdict covers catch-all domains; drop this step if one verification is enough).26- **Step 6 — Apollo** `POST /apollo/people-enrichment` — enrich the lead with contact + company details for personalization.27- **Step 7 — Abstract Company Enrichment** `POST /abstract-company-enrichment/lookup` — industry, description, size, and location for the company (no logo/color brand assets).2829## Inputs And Outputs3031| Param | Required | Default | Description |32|---|---|---|---|33| `industry` | no | `SaaS` | Industry filter for the Fiber company-search step |34| `domain` | yes | `stripe.com` | Target domain for Hunter domain-search, email-finder, and the Abstract Company Enrichment lookup |35| `firstName` | no | `John` | First name for Hunter email-finder and Apollo people-enrichment |36| `lastName` | no | `Doe` | Last name for Hunter email-finder and Apollo people-enrichment |37| `company` | no | `Stripe` | Company name (sent as `organization_name`) for the Apollo people-enrichment step |38| `email` | yes | `john@stripe.com` | Email to verify and bounce-check (both Hunter email-verifier) |3940Outputs: Hunter returns email lists / verification verdicts (deliverability + bounce/catch-all); Fiber returns matching companies; Apollo returns enriched lead fields; Abstract Company Enrichment returns company firmographics (industry, description, size, location — not logos/colors).4142## Gotchas4344- All seven steps are **via the SELAT Router** MPP payments — the run needs `SELAT_ROUTER_URL` configured and the router reachable; every step settles through the SELAT Router.45- The MPP on Tempo Hunter endpoints are **POST** with a JSON body (`{domain}`, `{email}`, `{domain,first_name,last_name}`) — not the GET/query form from the upstream Hunter docs.46- Per-step live prices (probe-verified 2026-07-10): $0.10815 + $0.01365 + $0.0084 + $0.0084 + $0.0084 + $0.0063 ≈ **$0.1533** for a full manifest run; per-step `maxAmount` caps are ~10x each live price ($0.10–$1.00; top-level fallback $1.00) — a ceiling, not the price.47- Hunter `domain-search` is the most expensive step ($0.10815) — drop it if you already know your target person and only need find + verify + enrich.48- The bounce check (step 5) is a second pass through the same Hunter `email-verifier` endpoint as step 4 — Hunter's verdict already covers bounce risk and catch-all domains, so drop one of the two if a single verification is enough.49- Steps run independently: a later step can succeed even if an earlier one fails; always read the per-step summary.50- Every manifest step is POST with a JSON body — no query-string endpoints remain.5152## Validation5354> `--chain base` in the probe commands below is only the flag `selat-pay` requires today — a probe reads a free, chain-independent quote and never settles. A real paid run resolves the settlement chain from your funded Circle Gateway balance, not the manifest.5556Probe each endpoint for a free 402 challenge (no payment sent) with `--probe-only`:5758- `selat-pay POST "https://api.fiber.ai/v1/company-search" --body '{"searchParams":{"industries":["SaaS"],"employee_count_min":50,"employee_count_max":500}}' --chain base --probe-only`59- `selat-pay POST "https://hunter.io/hunter/domain-search" --body '{"domain":"stripe.com"}' --chain base --probe-only`60- `selat-pay POST "https://hunter.io/hunter/email-finder" --body '{"domain":"stripe.com","first_name":"John","last_name":"Doe"}' --chain base --probe-only`61- `selat-pay POST "https://hunter.io/hunter/email-verifier" --body '{"email":"john@stripe.com"}' --chain base --probe-only`62- `selat-pay POST "https://hunter.mpp.paywithlocus.com/hunter/email-verifier" --body '{"email":"john@stripe.com"}' --chain base --probe-only` (bounce check — same endpoint as the deliverability step)63- `selat-pay POST "https://apollo.mpp.paywithlocus.com/apollo/people-enrichment" --body '{"first_name":"John","last_name":"Doe","organization_name":"Stripe"}' --chain base --probe-only`64- `selat-pay POST "https://abstract-company-enrichment.mpp.paywithlocus.com/abstract-company-enrichment/lookup" --body '{"domain":"stripe.com"}' --chain base --probe-only`6566A probe returns the merchant's 402 payment requirements without charging. A successful paid run prints `status=200` and a ✓ for each step.6768## References6970- `manifest.json` — the machine-readable payment recipe this skill runs.71- [`references/endpoints.md`](references/endpoints.md) — the MPP endpoints, methods, and prices this skill calls.72- [`references/agent-skill-authoring-sop.md`](../../references/agent-skill-authoring-sop.md) — authoring standard.73- selat-pay — https://github.com/SELAT-AI/selat-pay