# CRM Account Research Agent (`trovevault/crm-account-research-agent`) Actor

Enriches CRM accounts with firmographics, signals, fit scores, evidence URLs, and account briefs. Export data, run via API, schedule and monitor runs, or integrate with other tools.

- **URL**: https://apify.com/trovevault/crm-account-research-agent.md
- **Developed by:** [Trove Vault](https://apify.com/trovevault) (community)
- **Categories:** Agents, Lead generation, Integrations
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.70 / 1,000 leads

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## CRM Account Research Agent

CRM Account Research Agent turns account names, domains, LinkedIn URLs, CRM IDs, and notes into structured, evidence-backed account briefs. It is built for sales teams, RevOps, account-based marketing, partnerships, and research workflows where a team already has target accounts but needs faster context before outreach, planning, or prioritization.

Give the actor a simple account list. It visits public company pages when a domain is available, extracts compact evidence, classifies account signals, scores fit and urgency, and writes one dataset row per account with `companyName`, `domain`, `industry`, `shortDescription`, `buyingSignals`, `fitScore`, `urgencyScore`, `recommendedAngle`, `outreachHooks`, `evidenceUrls`, and `validationWarnings`.

### Why use this actor

- Enrich CRM accounts from public web evidence without logging into a CRM.
- Produce consistent account briefs for sales, RevOps, partnerships, and ABM workflows.
- Keep `evidenceUrls` and warnings so claims can be reviewed before outreach.
- Score `fitScore` and `urgencyScore` for prioritization.
- Generate outreach hooks and next-best actions from observable company messaging.
- Append output into an existing Apify dataset with `datasetId` and preserve pipeline context with `runId`.

### What it produces

| Output | Meaning |
| --- | --- |
| `crmAccountId` | Optional CRM/account identifier derived from input when available. |
| `companyName` | Account name. |
| `domain` / `canonicalUrl` | Supplied or resolved public website. |
| `researchGoal` | Goal used to shape the brief. |
| `industry`, `shortDescription`, `productsServices` | Public firmographic and positioning signals. |
| `growthSignals`, `buyingSignals`, `riskSignals` | Observable account-level signals. |
| `fitScore` / `urgencyScore` | Prioritization scores for review. |
| `researchConfidence` | Confidence label based on source coverage and evidence strength. |
| `recommendedAngle` | Suggested account angle for the selected workflow. |
| `outreachHooks`, `openQuestions`, `nextBestActions` | Practical follow-up guidance. |
| `evidenceUrls`, `validationWarnings` | Audit trail and warnings when evidence is thin. |

### Use cases

- **Sales outreach:** prepare account-specific opening angles before prospecting.
- **Account planning:** summarize public company context before QBRs or territory reviews.
- **RevOps enrichment:** turn a CSV of target accounts into structured fields for scoring and routing.
- **Partnership research:** identify fit signals, product overlap, and open questions before partner outreach.
- **Risk review:** flag thin evidence, ambiguous account identity, or weak confidence before using account claims.

### How to use it

1. Paste one account per line in `accountList`.
2. Use the format `Company | domain | notes` when possible.
3. Choose a `researchGoal`: `sales_outreach`, `account_planning`, `partnership_research`, or `risk_review`.
4. Add `marketContext` if you want the actor to evaluate fit against your ICP, campaign, or offer.
5. Review `researchConfidence`, `evidenceUrls`, and `validationWarnings` before copying claims into CRM notes.

### Input example

```json
{
  "accountList": "Apify | apify.com | Developer platform account. Interested in web data, automation, and AI agent workflows.
OpenAI | openai.com | AI platform account for developer and enterprise workflows.",
  "researchGoal": "sales_outreach",
  "marketContext": "B2B software teams evaluating web data and automation workflows.",
  "maxAccounts": 5,
  "runId": "q3-target-account-research"
}
```

#### Input reference

| Field | Required | Description |
| --- | --- | --- |
| `accountList` | Yes | One account per line. Use `Company | domain | notes` when possible. CSV and tab-separated rows are also accepted. |
| `researchGoal` | No | Brief angle: sales outreach, account planning, partnership research, or risk review. |
| `marketContext` | No | ICP, product, geography, campaign, or offer context. |
| `maxAccounts` | No | Cost and runtime cap for accounts researched in one run. |
| `datasetId` | No | Existing dataset to append rows into. |
| `runId` | No | Pipeline identifier copied into output rows or run metadata. |

### Output example

```json
{
  "crmAccountId": "demo-apify",
  "companyName": "Apify",
  "domain": "apify.com",
  "canonicalUrl": "https://apify.com/",
  "researchGoal": "sales_outreach",
  "industry": "Artificial intelligence and automation",
  "shortDescription": "Apify is a platform for web scraping, browser automation, and web data workflows.",
  "productsServices": ["APIs and developer workflows", "Data products or analytics"],
  "growthSignals": ["Product or platform expansion mentioned"],
  "buyingSignals": ["Public messaging mentions data, automation, workflow, API, or integration themes."],
  "riskSignals": null,
  "fitScore": 80,
  "urgencyScore": 55,
  "researchConfidence": "high",
  "recommendedAngle": "Lead with a practical operational improvement for Apify in artificial intelligence and automation.",
  "outreachHooks": ["Reference public evidence: Apify helps developers build reliable web data pipelines."],
  "openQuestions": ["What internal CRM context, opportunity stage, or last-touch note should shape the next action?"],
  "nextBestActions": ["Review the evidence URLs before copying claims into CRM notes or customer messaging."],
  "evidenceUrls": ["https://apify.com/"],
  "validationWarnings": null,
  "error": false
}
```

### API usage

```bash
curl -X POST "https://api.apify.com/v2/acts/trovevault~crm-account-research-agent/runs" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "accountList": "Apify | apify.com | Developer platform account",
    "researchGoal": "sales_outreach",
    "marketContext": "B2B software teams evaluating web data workflows.",
    "maxAccounts": 1
  }'
```

### How to read the result

Use `fitScore`, `urgencyScore`, and `researchConfidence` for prioritization. Use `recommendedAngle`, `outreachHooks`, and `nextBestActions` for workflow planning. Use `evidenceUrls` and `validationWarnings` to audit claims before sending them to prospects or customers.

This actor does not write back to Salesforce, HubSpot, or another CRM in v1. Use dataset exports, the Apify API, webhooks, or `datasetId` append mode to connect the output to your own CRM workflow.

### Limitations

- Results depend on public website availability and may be weaker for blocked, sparse, or newly launched sites.
- Company location, employee count, industry, and company type are returned only when observable or reasonably supported by public text.
- The actor does not authenticate into private CRM systems.
- The actor does not use paid enrichment providers in v1.
- It is a research accelerator, not a legal, financial, or compliance-grade source of truth.
- Review important claims before using them in customer-facing messages or high-stakes account decisions.

### Troubleshooting

| Problem | What to try |
| --- | --- |
| Brief is thin | Add a domain and richer notes in `accountList`. Sparse account names alone provide weak evidence. |
| Wrong company matched | Include the official domain and any CRM ID or location context. |
| Low confidence | Check `evidenceUrls`, source coverage, and `validationWarnings`; rerun with clearer input if needed. |
| Too many accounts skipped | Lower `maxAccounts` for testing and confirm each line follows `Company | domain | notes`. |
| Need CRM writeback | Export the dataset or call the Apify API from your CRM automation. Direct writeback is not included in v1. |

### FAQ

**Does it log into my CRM?**\
No. It reads pasted account input and public web pages only.

**Can I paste CRM IDs?**\
Yes. Include IDs in the account line or notes so they can be preserved for joins.

**Which research goal should I choose?**\
Use `sales_outreach` for messaging, `account_planning` for internal reviews, `partnership_research` for partner fit, and `risk_review` for caution-oriented briefs.

**Why is research confidence low?**\
The website may be sparse, blocked, ambiguous, or unrelated to the supplied name.

**Can I run this on hundreds of accounts?**\
Yes, but test with a small list first and use `maxAccounts` to control runtime.

**Does it invent missing firmographics?**\
No. Weak or missing evidence is surfaced through nulls, confidence labels, and validation warnings.

**Can this feed outbound tools?**\
Yes, but review evidence before copying generated angles into outbound sequences.

### Related actors

- Job Posting Age Anomaly Detector for hiring-pressure signals.
- Buying Committee Mapper for stakeholder research.
- Competitor Intelligence Scraper for market and funnel context.

### Changelog

- 0.1: Initial TroveVault release with account-list input, public-web evidence, fit and urgency scoring, account briefs, `datasetId`, and `runId` support.

### Feedback and support

Open an issue on the actor page with the input line, run ID, expected company, and a short explanation of the mismatch or missing field.

# Actor input Schema

## `accountList` (type: `string`):

Paste one account per line. Use `Company | domain | notes`, for example `Apify | apify.com | Developer platform account`. The domain and notes are optional, but adding a domain improves research quality.

## `researchGoal` (type: `string`):

Business goal for the account brief. This changes the recommended angle, hooks, and next actions.

## `marketContext` (type: `string`):

Optional ICP, product, geography, campaign, or market context. Add this when the brief should evaluate fit against a specific offer or segment.

## `maxAccounts` (type: `integer`):

Maximum number of account records to research in this run. Lower values keep test runs fast and cheap.

## `datasetId` (type: `string`):

ID of an existing Apify dataset to append account briefs to, in addition to the default run dataset. Leave blank to use only the default run dataset.

## `runId` (type: `string`):

Pipeline run ID to copy into output rows for downstream traceability. Leave blank for standalone runs.

## Actor input object example

```json
{
  "accountList": "Apify | apify.com | Developer platform account. Interested in web data, automation, and AI agent workflows.\nOpenAI | openai.com | AI platform account for developer and enterprise workflows.",
  "researchGoal": "sales_outreach",
  "maxAccounts": 5
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `report` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "accountList": `Apify | apify.com | Developer platform account. Interested in web data, automation, and AI agent workflows.
OpenAI | openai.com | AI platform account for developer and enterprise workflows.`
};

// Run the Actor and wait for it to finish
const run = await client.actor("trovevault/crm-account-research-agent").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "accountList": """Apify | apify.com | Developer platform account. Interested in web data, automation, and AI agent workflows.
OpenAI | openai.com | AI platform account for developer and enterprise workflows.""" }

# Run the Actor and wait for it to finish
run = client.actor("trovevault/crm-account-research-agent").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "accountList": "Apify | apify.com | Developer platform account. Interested in web data, automation, and AI agent workflows.\\nOpenAI | openai.com | AI platform account for developer and enterprise workflows."
}' |
apify call trovevault/crm-account-research-agent --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=trovevault/crm-account-research-agent",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/QXHcZyXchFImCQMgv/builds/FpFjikzOpcRAbi9FP/openapi.json
