---
name: agent-account-research
description: Connect the Exa and Apollo MCP servers to an AI client and have it write a sourced account brief onto the CRM record in Attio. Use when the user wants agent-driven account research, pre-call briefs, or asks whether MCP can replace a pipeline build.
---

# Agent-driven account research

> Generated from https://frontal.so/gtm-apis/stack-agent-research
> Every price and limit below was read from the vendor's own pricing page or docs. Hit rates are modeled, and labeled where they appear.

**Tools in this stack:** Exa, Apollo API, Attio API.
**Build effort:** Hours.
**What it costs:** $0.09 per account brief, $8.98 per 100 accounts.

## What you are building

Not a pipeline. Two MCP servers connected to an AI client, plus one reusable prompt. The model reads the open web for what changed, pulls structured facts from the data provider, and writes a short brief into fields you defined on the CRM record.

## Use this shape only where a person asked for it

An MCP call happens because somebody asked. That is the wrong shape for a nightly job over 40,000 accounts with retries and a warehouse write. This is for the top couple of hundred accounts a human will actually read before a call. Anything larger belongs on the REST APIs, where the same work is cheaper and more predictable.

## Prerequisites

| What | Where to get it | Notes |
|---|---|---|
| Exa API key | https://exa.ai/ | $4/1k searches. $10 of credits every month |
| Apollo API key | https://www.apollo.io/ | $49/seat/mo. Free plan with API access, 900 credits per seat per year granted monthly, so 75 a month |
| Attio API key | https://attio.com/ | $44/user/mo. Free plan with full API access, 100 seat credits a month |
| An MCP-capable client | Claude Desktop, Claude Code, Cursor, or any client with remote MCP support | Confirm model training is off before connecting a data provider that prohibits it |
| CRM fields designed for the brief | Your CRM schema | trigger_event, why_now, opener and source_url, so the brief lands in fields rather than a notes blob |

## The tools, and how to call them

### Exa

- **Docs:** https://docs.exa.ai/
- **Auth:** Bearer token, or OAuth through the MCP server
- **Rate limits:** 10 search QPS free, up to 25 on pay as you go. 50 agent concurrency on both.
- **Entry price:** $4/1k searches. Free tier: $10 of credits every month
- **Unit cost:** $0.007 per auto search
- **MCP server:** `https://mcp.exa.ai/mcp`

Endpoint paths are not reproduced here because we have not verified them from this vendor's docs. Read the docs link above before writing the call.

Prices, limits and auth read from the vendor's own pages on 2026-10-19.

### Apollo API

- **Docs:** https://docs.apollo.io/
- **Auth:** API key in the x-api-key header
- **Rate limits:** 200 req/min, 2,000/day on Basic. Enrichment gets 1,000/min with no daily cap.
- **Entry price:** $49/seat/mo. Free tier: Free plan with API access, 900 credits per seat per year granted monthly, so 75 a month
- **Unit cost:** $0.0196 per credit
- **MCP server:** `https://mcp.apollo.io/mcp`

| Call | What it does |
|---|---|
| `POST https://api.apollo.io/api/v1/people/match` | Person enrichment from an email, name plus domain, or LinkedIn URL. 1 credit, or 9 when a mobile is revealed. |

Prices, limits and auth read from the vendor's own pages on 2026-10-19.

### Attio API

- **Docs:** https://developers.attio.com/
- **Auth:** Bearer token or OAuth 2.0
- **Rate limits:** 100 requests/s for reads, 25/s for writes, across the whole API
- **Entry price:** $44/user/mo. Free tier: Free plan with full API access, 100 seat credits a month
- **Unit cost:** Not sold by the unit
- **MCP server:** Part of the Attio developer platform

Endpoint paths are not reproduced here because we have not verified them from this vendor's docs. Read the docs link above before writing the call.

Prices, limits and auth read from the vendor's own pages on 2026-10-08.

## Build it

### 1. Connect the web research server first and test it alone

Three searches and roughly five page fetches per account is the shape that works, returning clean content rather than links. Run it on two accounts you already know well and read what comes back before you connect anything that costs credits.

### 2. Connect the data provider, and check the training setting

The structured facts should come from the data provider: headcount, industry, technology, open roles, recent news. Apollo prohibits model training on data pulled through its MCP and asks you to confirm training is off in your client first. That is an obligation on you with no technical enforcement behind it, so check it, and check it again whenever anyone changes client.

### 3. Define the CRM fields before the first run

A brief written into a notes blob cannot be filtered, reported on or trusted. Define the fields first, including a source URL field, so every factual claim has somewhere to put its evidence.

### 4. Split the work by tool in the prompt

Anything countable comes from the data provider, anything narrative comes from web research, and every claim carries a source URL. This split removes most of the hallucination surface, because the two tools fail in opposite directions: one invents structure, the other knows nothing about last Tuesday.

### 5. Cap the credits and use a separate key

A failed enrichment retried two hundred times overnight is the first week of most teams' experience. Cap the workspace budget before connecting anything and keep this key separate from the one your production pipeline uses.

### The prompt

```text
For each domain in the list:
1. Use apollo to get headcount, industry, tech stack,
   open roles and recent news. Anything countable
   comes from apollo, never from a web page.
2. Use exa to find what changed in the last 90 days.
   Every claim needs a source URL. If you cannot
   find a source, write "no recent signal found".
3. Write into attio:
   - trigger_event   (one sentence, with source_url)
   - why_now         (two sentences, our product)
   - opener          (under 40 words, no adjectives)
Do not enrich individual people. Do not send anything.
Stop after 20 accounts and show me the first three.
```

## Gotchas

- The agent retries and empties a balance. This is the most common way to lose money on MCP.
- Confident prose with nothing behind it. Left alone the model will write a plausible brief about a funding round that did not happen.
- Model training quietly enabled in the client, against a provider that prohibits it.
- Treating it as production infrastructure. It is on-demand research, not a scheduled pipeline.
- Budgeting for the APIs and forgetting the model. Your client's own token usage is the largest line in this stack.

## How to verify it works

- Spot-check ten accounts in every hundred against the source URLs in the brief.
- Confirm every countable fact came from the data provider rather than from a page the model read.
- Check the explicit stop worked: the run should pause after the stated number of accounts.
- Confirm the credit cap is set and the key is separate from the production pipeline key.
- Re-check the model training setting after anyone switches client.

## What this costs to run

| Measure | Figure |
|---|---|
| per account brief | $0.09 |
| per 100 accounts | $8.98 |
| Exa entry | $4/1k searches |
| Apollo entry | $49/seat/mo |
| Attio entry | $44/user/mo |

Rates are the providers' published entry-plan prices. Where a workload is modeled, the hit rates behind it are assumptions, not promises: no provider in this category publishes a match rate you can hold them to. Measure your own on 500 rows before you plan against these numbers.

## Sources

- Exa: https://docs.exa.ai/
- Apollo API: https://docs.apollo.io/
- Attio API: https://developers.attio.com/
- This stack, with the arithmetic and the reasoning behind each step: https://frontal.so/gtm-apis/stack-agent-research

---

*Published by Frontal, the go-to-market partner for B2B tech companies past product-market fit.
Where a vendor publishes no public rate, this file says so rather than estimating.*
