Contact sourcing
Build a reusable on-demand tool that sources stakeholders at supplied accounts, qualifies their responsibilities, and returns all or up to N ranked by contact fit, with optional verified work email and phone enrichment.
Set up the contact-sourcing cookbook in this project.
1. If the Cargo CLI is not installed yet, follow every step in https://api.getcargo.io/INSTALL.md
2. From the Cargo project, run: cargo-ai project add cookbook/contact-sourcing
3. Then follow .claude/skills/contact-sourcing/SKILL.md. Stop for my approval before any paid call, and stop at "cargo-ai project plan" before deploying anything.$cargo-ai project add cookbook/contact-sourcingSay this to your agent
Build a tool that finds up to three people responsible for capital-project schedules at each account, starting with bridgeworks.example. I only need their profiles and fit scores.
Illustrative output #
Fictional records, to show the shape of what comes back.
| Rank | Person | Current title | Fit / 10 | Supporting evidence |
|---|---|---|---|---|
| 1 | Morgan Vale | Project Controls Manager | 9 | Owns schedule-risk reviews across capital projects |
| 2 | Alex Rowan | Senior Planner | 8 | Maintains construction schedules and evaluates delay risk |
Two qualified people returned from 12 candidates; the maximum is three. Profile evidence accompanies each result. No email or phone lookup was requested.
What you will be asked #
| Input | Why | |
|---|---|---|
| existing_context_and_connections | Looked up | Prevents repeated research and duplicate resources; a CRM is optional |
| provider_contract_and_costs | Looked up | Prevents guessed filters and hidden page or verification charges |
| seller_and_personas | Asked | The tool ranks fit for this seller rather than generic seniority |
| company_input | Asked | An upstream ID skips paid resolution; extra identifiers must agree |
| output_and_scope | Asked | Count and enrichment are separate; provider choice preserves the schema |
| sample_and_calibration | Asked | Static checks cannot prove provider coverage or qualification quality |
Done when #
- Approved seller criteria retain source URLs, observed evidence, inferences, exclusions, persona IDs, provider filters and prompt version in consumer context.
- The operator’s closed-won research choice is recorded; website-only setup works.
- The operator confirmed the exact title Boolean derived from context or seller research, the slightly broader search and its cost, and the provider/billing choice.
- The compiled graph contains only selected input/output paths and no implicit play.
- Live provider schemas and existing tool output mappings have been checked.
- Unresolved companies cannot source; stable identity deduplication precedes spend.
- Qualifications preserve profile evidence, current employment, uncertainty and a numeric fit score; the returned contacts have deterministic ranks.
- The operator chose all or up to N independently of enrichment; the sorted qualified ranking is sliced before any requested lookups, returning fewer when needed. Three is only a starting suggestion; the chosen N has no fixed ceiling.
- Only selected people receive requested email/phone enrichment; verified data can be reused; failures remain visible without backfill or a repeated profile lookup.
- The adapted executable contracts, project type generation, check and plan pass.
- The operator approved deployment, then the exact paid sample and maximum cost.
- The sample shows coverage, ranked evidence and actual stage costs; corrections update reusable criteria and affected examples are retested as authorized.
- The final handoff identifies unperformed live checks and any pending approval evidence, including this build’s requested fresh demo and two implementations.
What it costs #
Read current salesNavigator, linkedin, the chosen LLM provider/agent and selected enrichment tool
and verification metadata immediately before a preview. Record lookup time,
CLI version, action slugs, units, cache assumptions and model settings.
Separate company resolution, people sourcing, profile retrieval, AI qualification,
email lookup/verification and phone lookup. Sales Navigator pages contain 25
records: the compiled provider limit is ceil(searchLimit / 25) * 25, while
profile/qualification work is capped at searchLimit. Recommend a page multiple
when it suits the account and explain any paid excess. Reaching the cap means
limited coverage, even if every retrieved person is qualified.
Use the formula and approval procedure in run.md. Do not invent fixed prices, free-cache guarantees or a universal relevance threshold.
Build an on-demand Cargo tool that returns the stakeholders most relevant to a
seller’s product at each supplied account. Choose all qualified people or up to
N per company, independently of optional verified work email and phone enrichment.
Three is only a suggested starting value, never a fixed ceiling. The operator
can choose top 3, top 5, top 10, any positive N, or all qualified people (null).
Enterprise accounts may call for a larger shortlist.
The workflow resolves a company only when needed, searches current employees, deduplicates stable identities, retrieves profiles, qualifies responsibilities, and sorts numerically with stable ties. A configured N slices the qualified ranking before optional contact lookup; fewer qualifying people means fewer results. It preserves profile evidence and rank even when enrichment fails.
Optional email and phone enrichment #
Email and phone enrichment are included in the tool. During setup, ask whether to return verified work email, phone, both, or profiles and scores only. Reuse the workspace’s existing enrichment tools and confirm their input/output contracts; configure.md describes the bindings.
Enrich only the selected qualified people, using the operator’s chosen N or all. This avoids lookup spend on people outside the returned shortlist. Keep each selected person when a lookup fails, with an explicit missing/failed status; never backfill with lower-ranked people just to reach N. An email is marked verified only with matching verification evidence.
Setup and validation #
SKILL.md guides a practical building session: research the seller, propose and
approve personas, choose input/count/enrichment and search coverage, review the graph,
deploy with approval, and calibrate an explicitly priced sample. Closed-won
customer intelligence is optional. A CRM, model and play are unnecessary.
| Path | Purpose |
|---|---|
SKILL.md | Installer procedure, decisions and invariants |
infra/index.ts | One adaptation surface; selected native graph and exact runtime scripts |
references/audit.md | Seller evidence, optional customer intelligence and criteria approval |
references/configure.md | Input/output choices, provider mappings and returned contract |
references/run.md | Sample budget, calibration, feedback and optional play |
evals/acceptance.md | Fresh-workspace blind test and approval evidence |
evals/contract.mjs | Offline execution of emitted graphs with fictional external responses |
The checked configuration is ID → up to three, no enrichment, using a fictional capital-
project scheduling seller. buildContactSourcing also emits URL, domain and
multiple-input variants. Each supports all or up to N results, with no enrichment,
email-only, phone-only or both. topN: null means all; a positive integer caps
results. The email/phone flags select enrichment without an outputMode. Change
only the consumer’s configuration and audited output mappings. It declares one
tool, its folder and three adopted connectors; it declares no recurring trigger.
The optional agent backend adds a one-step qualification agent and its folder,
using the operator’s chosen OpenAI or Anthropic connection and the same schema.
Setup confirms the title Boolean from existing context or seller research,
recommends slightly broader titles for subsequent scoring, and asks about an
existing API key versus Cargo credits without collecting secrets in chat.
See the workflow diagram in SKILL.md and the exact output contract in
references/configure.md.
The live metadata and three supplied saved workflow references were inspected
read-only on 2026-09-09 using Cargo CLI 1.0.91. Draft references contain incomplete
routes and older outreach instructions, so the approved behavior in this skill
controls the example. Current metadata confirms current-company/title filters,
profile fields, page rounding and openAi.instruct structured output. The email
reference returns only email; this example therefore explicitly verifies a newly
looked-up address. A consumer tool that exposes equivalent verifier evidence can
reuse that result after its output contract is audited.
The LLM metadata and agent contract were rechecked read-only on 2026-09-30 with
CLI 1.0.102; provider changes still require sample calibration.
No paid provider run, deployment or fresh-workspace installation was performed for this build. Static contracts do not prove live coverage, classification quality, engine failure envelopes, or enrichment deliverability. State remains to-be-approved until a fresh demo and two customer or partner implementations supply the evidence requested for this build.
Migration from the historical example #
contact-sourcing was removed from the tree before it had a customer skill.
The historical source-contacts play matched accounts, enriched everyone and
upserted verified contacts into HubSpot by email. This implementation restores the
same directory name with the approved on-demand behavior. There is no current-main
installation to migrate automatically.
For a consumer still using that historical code, keep its existing state and
resources while reviewing a migration. Replace the play’s embedded sourcing with
a call to contact_sourcing, read contacts instead of the old { sourced: true }
output, and explicitly decide whether the play or tool owns selection/enrichment.
Any CRM write remains in the consumer’s play and needs a reviewed mapping and
identity policy. Do not delete or prune the historical play automatically.
The live reference output best_persona is not the new contract. Consumers using
that field must map to contacts and its nested qualification; outreach strategy
and triangulation fields have no counterpart. No live reference UUID or private
customer data is a dependency of this example.