# Fivos Contact Sourcing

> Use this skill after fivos-account-enrichment has produced an enriched account CSV and contacts need to be pulled at each account. It finds decision-makers, champions, and users at the sourced accounts using AI Ark and Clay only (per the TAM 2026 plan). Trigger when the user says 'find the contacts', 'pull people at these accounts', or 'stack contacts on the list'.

- **Type:** Skill
- **Install:** `agentstack add skill-fivosaresti-workflows-outbound-skills-contact-sourcing`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [fivosaresti](https://agentstack.voostack.com/s/fivosaresti)
- **Installs:** 0
- **Category:** [Data & Analytics](https://agentstack.voostack.com/c/data-and-analytics)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [fivosaresti](https://github.com/fivosaresti)
- **Source:** https://github.com/fivosaresti/workflows-outbound-skills/tree/main/contact-sourcing

## Install

```sh
agentstack add skill-fivosaresti-workflows-outbound-skills-contact-sourcing
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# Fivos Contact Sourcing

Contact-level sourcing at already-sourced accounts. Runs after account-level work is done.

## Hard rules

- **AI Ark and Clay are the only contact sources.** Per the TAM Mapping and Contact Sourcing Plan - 2026. No Apollo, no PDL, no Hunter, no Crustdata for contact *discovery* (they are still used for enrichment in the next step).
- **Persona spec is required before any provider is called.** No "go find some execs" runs - the engineer provides target titles, seniority, departments.
- **Contacts-per-account caps are enforced.** The strategist decided this number per play shape. Do not exceed it.

## Inputs

- **Enriched account CSV** from `fivos-account-enrichment` (required).
- **Persona spec** (required):
  - `target_titles` - specific titles (e.g. `"VP of Revenue Operations"`, `"Head of Data"`).
  - `seniority` - `{c-suite, vp, director, manager, ic}` filter.
  - `departments` - `{sales, marketing, rev-ops, data, engineering, ...}`.
  - `exclude_titles` - optional exclusion list (e.g. `"intern"`, `"recruiter"`).
- **Contacts per account** (required, from `fivos-campaign-strategist` - usually 1 for static plays, 2-3 for ABM).
- **Client tag** + **campaign tag** (required for DB tagging).

## Outputs

1. Contact CSV with columns: `contact_id, company_domain, first_name, last_name, full_name, title, seniority, department, linkedin_url, country, region, city, source, sourced_at, client, campaign`.
2. Account foreign-key column linking back to the account CSV.
3. Coverage report - contacts found vs target, per account.
4. Spend ledger.

## Workflow

### Step 1 - Translate persona to filters

Render the persona spec into AI Ark + Clay filter shapes.

**AI Ark people filter:**
```json
{
  "account": { "domains": ["", "", ...] },
  "contact": {
    "titles_any": ["VP of Revenue Operations", "Head of RevOps", "Director of RevOps"],
    "seniority_any": ["vp", "director"],
    "departments_any": ["sales", "rev-ops"],
    "exclude_titles_any": ["intern", "recruiter"]
  },
  "page": 0,
  "size": 100
}
```

**Clay:** drive contact-finding via a Clay table that ingests the enriched account CSV and calls AI Ark Contact Search + Clay's native People Finder in parallel. See handoff below.

### Step 2 - Estimate + Gate 1

For each provider, run the count endpoint first:
- AI Ark: `mcp__ai_ark__people_count` (free).
- Clay: estimate from `mcp__claude_ai_Clay__get-credits-available` plus historical hit rates (no free count endpoint).

Output:
```
Contact sourcing estimate -  / 

Accounts in scope: N
Target contacts per account: K
Expected unique contacts: ~N*K (after dedup)

Providers + cost:
  - AI Ark People Search: $X (0.5 credits/result)
  - Clay People Finder: $X (per-credit)
Total: $X

Proceed? Manager approval required.
```

### Step 3 - Run AI Ark first

AI Ark is the lower-cost primary path. Call the MCP directly:

```
mcp__ai_ark__people_search({
  account: { domains: ["", "", ...] },
  contact: {
    titles_any: ["VP of Revenue Operations", "Head of RevOps", "Director of RevOps"],
    seniority_any: ["vp", "director"],
    departments_any: ["sales", "rev-ops"],
    exclude_titles_any: ["intern", "recruiter"]
  },
  page: 0,
  size: 100
})
```

Paginate until you hit `contacts_per_account` for each domain, or exhaust AI Ark's returns.

**MCP status:** `mcp__ai_ark__*` is being connected. Until then, fall back to AI Ark REST (`POST /people/search` with `X-TOKEN` header).

### Step 4 - Top up with Clay

For accounts where AI Ark fell short of `contacts_per_account`, hand the remaining domains to Clay:

```
mcp__claude_ai_Clay__find-and-enrich-contacts-at-company({
  companies: [ { domain: "", target_contacts:  }, ... ],
  persona: {
    titles: [...],
    seniority: [...],
    departments: [...]
  },
  table_name: "__contacts"
})
```

Clay's strength is persona matching on fuzzy titles and department inference - use it for the residual where AI Ark's exact-title filters missed.

### Step 5 - Dedup

Dedup on `linkedin_url` first, then `email` (when present), then `full_name + domain` as a fallback.

When a contact appears from both sources, prefer AI Ark for `title` and `seniority` (its taxonomy is tighter) and prefer Clay for `department` (its department inference is stronger).

### Step 6 - Coverage report

```
Coverage report -  / 

Accounts: N
Contacts found: M
Mean contacts/account: M/N
Accounts at target (>= K contacts): P
Accounts short (: 0 contacts (reason: no titles matched the persona)
  - ...
```

If >15% of accounts are under-covered, flag for engineer review before handoff - usually the persona spec is too narrow.

### Step 7 - Upload to internal DB + handoff

Upload the contact CSV to the Workflows DB, tagged with client + campaign + "contacts sourced ".

Hand off to `fivos-contact-enrichment` to waterfall email + phone.

## Why only AI Ark + Clay

Decision from the TAM 2026 plan:
- Consolidating spend to two providers keeps vendor sprawl down.
- AI Ark covers 80% of cases cheaply with structured filters.
- Clay covers the residual with fuzzy-matching and the native Clay workflow engineers already use.

Other contact-discovery providers (Apollo, PDL, Hunter) are **not** used here. Their enrichment capabilities are still used in `fivos-contact-enrichment` - they just aren't used to *find* contacts at this step.

## References

- `~/.agents/skills/gtm-meta-skill/provider-playbooks/ai_ark.md` - People Search endpoint schema.
- `~/.agents/skills/gtm-meta-skill/finding-companies-and-contacts.md` - discovery-order rules.
- TAM Mapping and Contact Sourcing Plan - 2026 (Google Doc).

## Source & license

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

- **Author:** [fivosaresti](https://github.com/fivosaresti)
- **Source:** [fivosaresti/workflows-outbound-skills](https://github.com/fivosaresti/workflows-outbound-skills)
- **License:** MIT

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

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-fivosaresti-workflows-outbound-skills-contact-sourcing
- Seller: https://agentstack.voostack.com/s/fivosaresti
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
