Real code that runs. Six frameworks. Each under 50 lines. Set your API key, copy the snippet, ship in under five minutes.
No dependencies. Just bash + jq. Demonstrates enrich, find-email, find-decision-maker, signals, and the sales-deck bundle.
#!/usr/bin/env bash # AgentEnrich. Pure curl quickstart. : "${AGENTENRICH_API_KEY:?Set AGENTENRICH_API_KEY first}" BASE="${AGENTENRICH_BASE_URL:-https://api.agentenrich.com}" H_AUTH="Authorization: Bearer ${AGENTENRICH_API_KEY}" H_JSON="Content-Type: application/json" # 1. Enrich a LinkedIn URL curl -sS -X POST "${BASE}/v1/enrich" -H "${H_AUTH}" -H "${H_JSON}" \ -d '{"kind":"linkedin","linkedinUrl":"https://www.linkedin.com/in/satyanadella"}' \ | jq '{name: .person.fullName, title: .person.title}' # 2. Find a verified email curl -sS -X POST "${BASE}/v1/find-email" -H "${H_AUTH}" -H "${H_JSON}" \ -d '{"kind":"linkedin","linkedinUrl":"https://www.linkedin.com/in/satyanadella"}' \ | jq '{email, email_verified, mx_found}' # 3. Find the head of growth at a company curl -sS -X POST "${BASE}/v1/find-decision-maker" -H "${H_AUTH}" -H "${H_JSON}" \ -d '{"company_domain":"stripe.com","role":"Head of Growth"}' \ | jq '.results[] | {name: .fullName, title: .title}' # 4. Live job-change feed curl -sS "${BASE}/v1/signals?kind=job-change&limit=5" -H "${H_AUTH}" \ | jq '.data[] | {who: .personName, new_role: .newRole, at: .companyName}' # 5. Full account brief in one call curl -sS -X POST "${BASE}/v1/bundles/sales-deck" -H "${H_AUTH}" -H "${H_JSON}" \ -d '{"company_domain":"stripe.com","target_role":"VP Engineering"}' \ | jq '{company: .company.name, dm: .decision_maker.fullName}'
No pip install needed. Builds a target account list, finds the VP Sales at each, verifies their email, prints CSV-ready outbound.
import json, os, urllib.request API_KEY = os.environ["AGENTENRICH_API_KEY"] BASE = "https://api.agentenrich.com" HEADERS = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"} def call(path, body=None): data = json.dumps(body).encode() if body else None req = urllib.request.Request(f"{BASE}{path}", data=data, headers=HEADERS, method="POST") with urllib.request.urlopen(req) as r: return json.loads(r.read()) # Target accounts domains = ["stripe.com", "plaid.com", "ramp.com"] print("domain,name,title,email,verified") for domain in domains: dm = call("/v1/find-decision-maker", {"company_domain": domain, "role": "VP of Sales"}) if not dm.get("results"): continue person = dm["results"][0] email_info = call("/v1/find-email", {"kind": "linkedin", "linkedinUrl": person["linkedinUrl"]}) print(f"{domain},{person.get('fullName')},{person.get('title')},{email_info.get('email')},{'yes' if email_info.get('email_verified') else 'no'}")
Pulls funding signals, finds the VP of Sales at each, drafts personalized outreach. Needs npm i ai @ai-sdk/anthropic zod.
import { generateText, tool } from "ai"; import { anthropic } from "@ai-sdk/anthropic"; import { z } from "zod"; const AE = "https://api.agentenrich.com"; const H = { Authorization: `Bearer ${process.env.AGENTENRICH_API_KEY}`, "Content-Type": "application/json" }; const tools = { list_funding: tool({ description: "Recent funding signals. Included on Pro+.", parameters: z.object({ limit: z.number().default(10) }), execute: async ({ limit }) => (await fetch(`${AE}/v1/signals?kind=funding&limit=${limit}`, { headers: H }).then(r => r.json())).data, }), find_dm: tool({ description: "Top buyer at a company by role. 4cr per resolved.", parameters: z.object({ company_domain: z.string(), role: z.string() }), execute: async (a) => (await fetch(`${AE}/v1/find-decision-maker`, { method: "POST", headers: H, body: JSON.stringify(a) }).then(r => r.json())).results?.[0], }), prospect_package: tool({ description: "Email, phone, peers, hooks. 12 credits.", parameters: z.object({ linkedinUrl: z.string() }), execute: async (a) => fetch(`${AE}/v1/prospect-package`, { method: "POST", headers: H, body: JSON.stringify(a) }).then(r => r.json()), }), }; const { text } = await generateText({ model: anthropic("claude-sonnet-4-6"), tools, maxSteps: 8, system: "You are an AI SDR. Find 3 recently funded B2B companies, get the VP Sales at each, run prospect_package, draft personalized outreach. Output JSON.", prompt: "Run the loop.", }); console.log(text);
Given a competitor domain, maps their leadership, finds lookalike companies, drills into the top one. Needs npm i langchain @langchain/anthropic @langchain/core zod.
import { ChatAnthropic } from "@langchain/anthropic"; import { tool } from "@langchain/core/tools"; import { createReactAgent } from "langchain/agents"; import { z } from "zod"; const AE = "https://api.agentenrich.com"; const H = { Authorization: `Bearer ${process.env.AGENTENRICH_API_KEY}`, "Content-Type": "application/json" }; const competitiveIntel = tool( async ({ competitor_domain }) => JSON.stringify(await (await fetch(`${AE}/v1/bundles/competitive-intel`, { method: "POST", headers: H, body: JSON.stringify({ competitor_domain }) })).json()), { name: "competitive_intel", description: "Leadership + recent moves + tech + lookalike TAM. 25 cr.", schema: z.object({ competitor_domain: z.string() }) } ); const salesDeck = tool( async (a) => JSON.stringify(await (await fetch(`${AE}/v1/bundles/sales-deck`, { method: "POST", headers: H, body: JSON.stringify(a) })).json()), { name: "sales_deck", description: "Full account brief. 25 cr.", schema: z.object({ company_domain: z.string(), target_role: z.string() }) } ); const agent = await createReactAgent({ llm: new ChatAnthropic({ model: "claude-sonnet-4-6" }), tools: [competitiveIntel, salesDeck], }); const out = await agent.invoke({ input: "Competitor is segment.com. Find the best lookalike and brief me on it." }); console.log(out);
Sourcer finds 10 lookalike candidates. Outreach agent writes personalized intros. Needs pip install crewai requests.
import json, os, requests from crewai import Agent, Task, Crew from crewai.tools import tool AE = "https://api.agentenrich.com" H = {"Authorization": f"Bearer {os.environ['AGENTENRICH_API_KEY']}", "Content-Type": "application/json"} @tool("Find similar candidates") def find_similar(linkedin_url: str) -> str: r = requests.post(f"{AE}/v1/find-similar-people", headers=H, json={"linkedinUrl": linkedin_url, "limit": 10}).json() return json.dumps(r.get("similar_people", [])) @tool("Get prospect package") def prospect_pack(linkedin_url: str) -> str: return json.dumps(requests.post(f"{AE}/v1/prospect-package", headers=H, json={"linkedinUrl": linkedin_url}).json()) sourcer = Agent(role="Talent sourcer", goal="Find 10 candidates similar to seed", backstory="Veteran sourcer", tools=[find_similar]) outreach = Agent(role="Outreach copywriter", goal="Draft personalized intros", backstory="Writes like a human", tools=[prospect_pack]) seed = "https://www.linkedin.com/in/some-engineer" source_task = Task(description=f"Find 10 candidates similar to {seed}", expected_output="JSON list", agent=sourcer) write_task = Task(description="For each: prospect_pack + 4-line intro email referencing their work", expected_output="JSON list", agent=outreach, context=[source_task]) result = Crew(agents=[sourcer, outreach], tasks=[source_task, write_task]).kickoff() print(result)
Paste this into your MCP config. Restart Claude Desktop. Your agent gets 12 enrichment tools instantly.
{
"mcpServers": {
"agentenrich": {
"command": "npx",
"args": ["-y", "@agentenrich/mcp"],
"env": { "AGENTENRICH_API_KEY": "ae_live_PASTE_YOUR_KEY_HERE" }
}
}
}
On Mac: ~/Library/Application Support/Claude/claude_desktop_config.json
On Windows: %APPDATA%\Claude\claude_desktop_config.json
Email [email protected] with a working agent template that uses AgentEnrich. We'll feature it on this page, credit you in the docs, and drop 5,000 credits in your account. That's $100 of API usage on us.
Frameworks we'd love to add: Mastra, Pydantic AI, n8n, Pipedream, Make, Zapier, Inngest, Composio, Cline, Continue, Aider.