# CRM Data Enrichment Agent (`yellowdream/crm-data-enrichment-agent`) Actor

Automatically gather missing customer and lead information to complete CRM records. Fill data gaps with job titles, social profiles, company details, and contact information from online sources. Built for sales teams needing accurate customer data without manual research.

- **URL**: https://apify.com/yellowdream/crm-data-enrichment-agent.md
- **Developed by:** [Robert Lee](https://apify.com/yellowdream) (community)
- **Categories:** Lead generation, Agents, Automation
- **Stats:** 2 total users, 0 monthly users, 0.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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 Data Enrichment Agent

Automatically gather missing customer and lead information to complete CRM records. Fill data gaps with job titles, social profiles, company details, and contact information from online sources. Built for sales teams needing accurate customer data without manual research.

### Features

- **Job Title Enrichment**: Automatically find and add job titles for contacts
- **Social Profile Discovery**: Find LinkedIn, Twitter/X, and GitHub profiles
- **Company Details**: Gather company websites, industry, size, and descriptions
- **Contact Information**: Search for missing email addresses and phone numbers
- **Location Data**: Enrich geographic location information
- **Configurable Enrichment**: Enable or disable specific enrichment types
- **Concurrent Processing**: Process multiple records in parallel for efficiency
- **Error Handling**: Gracefully handles failures and continues with partial enrichment

### Installation

```bash
npm install
````

### Usage

#### Input Schema

The actor accepts the following input:

```json
{
  "crmRecords": [
    {
      "name": "John Doe",
      "email": "john.doe@example.com",
      "company": "Acme Corp",
      "jobTitle": "Software Engineer",
      "phone": "+1-555-123-4567",
      "linkedinUrl": "https://linkedin.com/in/johndoe",
      "location": "San Francisco, CA"
    }
  ],
  "enrichmentOptions": {
    "enrichJobTitle": true,
    "enrichSocialProfiles": true,
    "enrichCompanyDetails": true,
    "enrichContactInfo": true,
    "enrichLocation": true
  },
  "maxConcurrency": 5,
  "maxResultsPerRecord": 1
}
```

#### Input Fields

##### `crmRecords` (required)

Array of CRM records to enrich. Each record should contain at least one of:

- `name`: Full name of the person
- `email`: Email address
- `company`: Company name

Optional fields that will be enriched if missing:

- `jobTitle`: Current job title
- `phone`: Phone number
- `linkedinUrl`: LinkedIn profile URL
- `twitterUrl`: Twitter/X profile URL
- `companyWebsite`: Company website URL
- `location`: Geographic location

##### `enrichmentOptions` (optional)

Object to configure which fields to enrich:

- `enrichJobTitle` (default: `true`): Search for job titles
- `enrichSocialProfiles` (default: `true`): Find social media profiles
- `enrichCompanyDetails` (default: `true`): Gather company information
- `enrichContactInfo` (default: `true`): Search for contact information
- `enrichLocation` (default: `true`): Find location data

##### `maxConcurrency` (optional)

Maximum number of concurrent enrichment requests (default: `5`, range: 1-20)

##### `maxResultsPerRecord` (optional)

Maximum number of results to return per CRM record (default: `1`, range: 1-10)

#### Output

The actor outputs enriched records to the Apify dataset. Each output record contains:

- All original fields from the input record
- Newly enriched fields (if found)
- `_metadata` object with:
  - `originalRecord`: The original input record
  - `enrichmentSuccess`: Boolean indicating if enrichment succeeded
  - `enrichmentError`: Error message if enrichment failed
  - `enrichedAt`: ISO timestamp of when enrichment occurred

#### Example Output

```json
{
  "name": "John Doe",
  "email": "john.doe@example.com",
  "company": "Acme Corp",
  "jobTitle": "Senior Software Engineer",
  "linkedinUrl": "https://linkedin.com/in/johndoe",
  "twitterUrl": "https://twitter.com/johndoe",
  "companyWebsite": "https://acmecorp.com",
  "companyIndustry": "Technology",
  "location": "San Francisco, CA",
  "_metadata": {
    "originalRecord": { ... },
    "enrichmentSuccess": true,
    "enrichmentError": null,
    "enrichedAt": "2024-01-15T10:30:00.000Z"
  }
}
```

### Local Development

```bash
## Install dependencies
npm install

## Run the actor locally
npm start
```

### How It Works

1. **Input Validation**: Validates input records and configuration
2. **Parallel Processing**: Processes records in batches based on `maxConcurrency`
3. **Multi-Source Enrichment**: Each enrichment module searches multiple online sources:
   - **Job Titles**: LinkedIn profiles, Google search
   - **Social Profiles**: Google search for LinkedIn, Twitter, GitHub
   - **Company Details**: Company websites, Google search, knowledge panels
   - **Contact Info**: Google search, website scraping
   - **Location**: LinkedIn profiles, Google search
4. **Data Aggregation**: Combines results from multiple sources
5. **Output**: Saves enriched records to Apify dataset

### Best Practices

- **Provide Complete Initial Data**: The more information you provide (name, email, company), the better the enrichment results
- **Use Appropriate Concurrency**: Higher concurrency speeds up processing but may trigger rate limits
- **Handle Errors Gracefully**: The actor continues processing even if some records fail
- **Review Results**: Always review enriched data for accuracy before importing to CRM

### Limitations

- Web scraping may be blocked by some websites
- Search results depend on publicly available information
- Rate limiting may affect large batches
- Some data sources may require authentication (not implemented)

### License

ISC

# Actor input Schema

## `crmRecords` (type: `array`):

Array of CRM records to enrich. Each record should contain at least a name or email.

## `enrichmentOptions` (type: `object`):

Configure which fields to enrich

## `maxConcurrency` (type: `integer`):

Maximum number of concurrent enrichment requests

## `maxResultsPerRecord` (type: `integer`):

Maximum number of results to return per CRM record

## Actor input object example

```json
{
  "crmRecords": [],
  "enrichmentOptions": {},
  "maxConcurrency": 5,
  "maxResultsPerRecord": 1
}
```

# Actor output Schema

## `results` (type: `string`):

All enriched CRM records stored in the default dataset. Each item combines the original CRM record with any enriched fields (jobTitle, social profiles, company details, contact info, location) and a \_metadata block.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("yellowdream/crm-data-enrichment-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("yellowdream/crm-data-enrichment-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 '{}' |
apify call yellowdream/crm-data-enrichment-agent --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "CRM Data Enrichment Agent",
        "description": "Automatically gather missing customer and lead information to complete CRM records. Fill data gaps with job titles, social profiles, company details, and contact information from online sources. Built for sales teams needing accurate customer data without manual research.",
        "version": "1.0",
        "x-build-id": "LCQ25VDuQVXVFSbCk"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/yellowdream~crm-data-enrichment-agent/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-yellowdream-crm-data-enrichment-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/yellowdream~crm-data-enrichment-agent/runs": {
            "post": {
                "operationId": "runs-sync-yellowdream-crm-data-enrichment-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/yellowdream~crm-data-enrichment-agent/run-sync": {
            "post": {
                "operationId": "run-sync-yellowdream-crm-data-enrichment-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",
                "required": [
                    "crmRecords"
                ],
                "properties": {
                    "crmRecords": {
                        "title": "CRM Records",
                        "type": "array",
                        "description": "Array of CRM records to enrich. Each record should contain at least a name or email.",
                        "items": {
                            "type": "object",
                            "properties": {
                                "name": {
                                    "title": "Name",
                                    "type": "string",
                                    "description": "Full name of the person",
                                    "example": "John Doe"
                                },
                                "email": {
                                    "title": "Email",
                                    "type": "string",
                                    "description": "Email address",
                                    "example": "john.doe@example.com"
                                },
                                "company": {
                                    "title": "Company",
                                    "type": "string",
                                    "description": "Company name",
                                    "example": "Acme Corp"
                                },
                                "jobTitle": {
                                    "title": "Job Title",
                                    "type": "string",
                                    "description": "Current job title",
                                    "example": "Software Engineer"
                                },
                                "phone": {
                                    "title": "Phone",
                                    "type": "string",
                                    "description": "Phone number"
                                },
                                "linkedinUrl": {
                                    "title": "LinkedIn URL",
                                    "type": "string",
                                    "description": "LinkedIn profile URL"
                                },
                                "twitterUrl": {
                                    "title": "Twitter URL",
                                    "type": "string",
                                    "description": "Twitter/X profile URL"
                                },
                                "companyWebsite": {
                                    "title": "Company Website",
                                    "type": "string",
                                    "description": "Company website URL"
                                },
                                "location": {
                                    "title": "Location",
                                    "type": "string",
                                    "description": "Geographic location"
                                }
                            }
                        },
                        "default": []
                    },
                    "enrichmentOptions": {
                        "title": "Enrichment Options",
                        "type": "object",
                        "description": "Configure which fields to enrich",
                        "properties": {
                            "enrichJobTitle": {
                                "title": "Enrich Job Title",
                                "type": "boolean",
                                "description": "Search for and enrich job title information",
                                "default": true
                            },
                            "enrichSocialProfiles": {
                                "title": "Enrich Social Profiles",
                                "type": "boolean",
                                "description": "Search for LinkedIn, Twitter, and other social profiles",
                                "default": true
                            },
                            "enrichCompanyDetails": {
                                "title": "Enrich Company Details",
                                "type": "boolean",
                                "description": "Gather company information, website, industry, etc.",
                                "default": true
                            },
                            "enrichContactInfo": {
                                "title": "Enrich Contact Information",
                                "type": "boolean",
                                "description": "Search for phone numbers and email addresses",
                                "default": true
                            },
                            "enrichLocation": {
                                "title": "Enrich Location",
                                "type": "boolean",
                                "description": "Search for geographic location information",
                                "default": true
                            }
                        },
                        "default": {}
                    },
                    "maxConcurrency": {
                        "title": "Max Concurrency",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Maximum number of concurrent enrichment requests",
                        "default": 5
                    },
                    "maxResultsPerRecord": {
                        "title": "Max Results Per Record",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Maximum number of results to return per CRM record",
                        "default": 1
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
