# 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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 enriches account records into structured, evidence-backed account briefs. It is built for sales, RevOps, partnerships, account-based marketing, and research workflows where a team already has a list of target accounts but needs faster context before outreach or planning.

The actor reads account names, domains, LinkedIn URLs, CRM IDs, and optional CRM notes. It visits public company web pages when a domain is available, extracts compact evidence, classifies account signals, scores fit and urgency, and writes one structured brief per account to the Apify dataset.

### What it gives you

- Account identity fields for CRM joins
- Public website evidence URLs and snippets
- Firmographic hints such as industry, company type, location, and employee range when observable
- Products and services inferred from public messaging
- Growth, buying, and risk signals
- Fit and urgency scores
- Outreach hooks, open questions, and next-best actions
- Validation warnings when evidence is thin or confidence is low

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

### Input

Paste one account per line. Use this simple format:

```text
Company | domain | notes
````

The domain and notes are optional, but a domain improves public web research quality.

```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",
  "marketContext": "B2B software teams evaluating web data and automation workflows.",
  "maxAccounts": 5
}
```

#### Input fields

- `accountList` - One account per line. Use `Company | domain | notes`. You can also paste comma-separated or tab-separated rows.
- `researchGoal` - Changes the brief angle and recommendations. Supported values are `sales_outreach`, `account_planning`, `partnership_research`, and `risk_review`.
- `marketContext` - Optional ICP, product, geography, campaign, or offer context.
- `maxAccounts` - Cost and runtime cap for the number of account records researched in one run.
- `datasetId` - Optional existing Apify dataset to append results to.
- `runId` - Optional pipeline ID copied to output rows.

### Output

The actor writes one dataset row per account.

```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
}
```

### How to use the result

Use the `Account Briefs` view for sales or account planning. Sort by `fitScore`, `urgencyScore`, and `researchConfidence` to prioritize accounts.

Use the `Prioritization` view to compare growth, buying, and risk signals across a target list.

Use the `Evidence & Warnings` view when you need to audit the source URLs, snippets, and warnings before copying claims into CRM notes or outbound messaging.

### API example

```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",
    "maxAccounts": 1
  }'
```

### Evidence and confidence

Public web content can be incomplete, blocked, outdated, or ambiguous. The actor therefore exposes:

- `evidenceUrls` and `evidenceSnippets` so users can audit claims
- `sourceCoverage` to show which pages were used
- `researchConfidence` to separate strong briefs from thin ones
- `validationWarnings` when source coverage is weak, the website cannot be fetched, or the supplied account identity is not strongly confirmed

The actor should not be treated as a legal, financial, or compliance-grade source of truth. It is a research accelerator for CRM workflows. Review important claims before sending them to customers or using them in high-stakes account decisions.

### Limitations

- v1 does not authenticate into private CRM systems.
- v1 does not use paid enrichment providers.
- Results depend on public website availability and may be weaker for blocked, sparse, or newly launched sites.
- Company location, employee count, and company type are only returned when observable from available text.
- The actor avoids dumping raw HTML and instead keeps compact evidence for auditability.

# 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

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "CRM Account Research Agent",
        "description": "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.",
        "version": "0.1",
        "x-build-id": "zABd2Xuld20LsZoVk"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/trovevault~crm-account-research-agent/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-trovevault-crm-account-research-agent",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/trovevault~crm-account-research-agent/runs": {
            "post": {
                "operationId": "runs-sync-trovevault-crm-account-research-agent",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/trovevault~crm-account-research-agent/run-sync": {
            "post": {
                "operationId": "run-sync-trovevault-crm-account-research-agent",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "accountList": {
                        "title": "Account List",
                        "type": "string",
                        "description": "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": {
                        "title": "Research Goal",
                        "enum": [
                            "sales_outreach",
                            "account_planning",
                            "partnership_research",
                            "risk_review"
                        ],
                        "type": "string",
                        "description": "Business goal for the account brief. This changes the recommended angle, hooks, and next actions.",
                        "default": "sales_outreach"
                    },
                    "marketContext": {
                        "title": "Market Context",
                        "type": "string",
                        "description": "Optional ICP, product, geography, campaign, or market context. Add this when the brief should evaluate fit against a specific offer or segment."
                    },
                    "maxAccounts": {
                        "title": "Max Accounts",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum number of account records to research in this run. Lower values keep test runs fast and cheap.",
                        "default": 5
                    },
                    "datasetId": {
                        "title": "Dataset ID (optional)",
                        "type": "string",
                        "description": "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": {
                        "title": "Run ID (optional)",
                        "type": "string",
                        "description": "Pipeline run ID to copy into output rows for downstream traceability. Leave blank for standalone runs."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
