# Agency Lead Aggregator & Contact Enrichment (`xavier_rx/agency-lead-aggregator`) Actor

Combine Sortlist and SuperbCompanies agency leads into one deduplicated, contact-enriched and quality-scored dataset.

- **URL**: https://apify.com/xavier\_rx/agency-lead-aggregator.md
- **Developed by:** [Xavier](https://apify.com/xavier_rx) (community)
- **Categories:** Lead generation, Business, Automation
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 unique agency leads

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

### Agency Lead Aggregator & Contact Enrichment

Build one clean agency prospect list from Sortlist and SuperbCompanies. The Actor runs the selected Xavier source Actors, normalizes their different schemas, deduplicates agencies by website domain, merges evidence and ranks every final record with a transparent quality score.

### What you get

- Agency name, website, domain and location
- Services, specialties and industries
- Public business emails and phones
- LinkedIn and other public social profiles
- Website technology signals
- Marketplace rating and review evidence
- Source profile URLs for verification
- Multi-source deduplication by domain
- A transparent quality score and score reasons

### Example input

```json
{
  "sources": ["sortlist", "superbcompanies"],
  "sortlistStartUrls": [
    { "url": "https://www.sortlist.com/web-development/united-states-us" }
  ],
  "superbcompaniesStartUrls": [
    { "url": "https://superbcompanies.com/categories/software-development-companies/" }
  ],
  "countries": ["United States"],
  "services": ["software", "web"],
  "keywords": [],
  "maxResultsPerSource": 100,
  "maxPagesPerSource": 3,
  "enrichContacts": true,
  "maxContactPages": 3,
  "onlyWithEmail": false
}
```

### Example output

```json
{
  "agencyName": "Acme Digital",
  "domain": "acme.com",
  "websiteUrl": "https://acme.com/",
  "location": "New York, United States",
  "services": ["Web Development", "Software Development"],
  "emails": ["hello@acme.com"],
  "phones": ["+1 212 555 0100"],
  "linkedinUrl": "https://linkedin.com/company/acme",
  "technologies": ["HubSpot", "Google Tag Manager"],
  "rating": 4.8,
  "reviewCount": 12,
  "qualityScore": 91,
  "qualityReasons": [
    "Official website available",
    "1 public business email",
    "LinkedIn profile available",
    "Confirmed by multiple sources"
  ],
  "sources": ["sortlist", "superbcompanies"],
  "sourceProfileUrls": [
    "https://www.sortlist.com/agency/acme",
    "https://superbcompanies.com/acme"
  ]
}
```

### Pricing transparency

This Actor orchestrates the public Xavier source Actors. Their current source-result charges apply to their child runs, and this Actor charges `enriched-agency` only for unique final records that pass the selected filters. The combined design avoids charging the aggregator event for duplicates.

For the smallest possible source cost, reduce `maxResultsPerSource`, disable website enrichment or select only one source.

### Responsible use

The underlying Actors collect public business information from public marketplace profiles and company websites. Use results lawfully, respect privacy and marketing regulations, and do not use the data for spam or harassment.

# Actor input Schema

## `sources` (type: `array`):

Agency marketplaces to include.

## `sortlistStartUrls` (type: `array`):

Public Sortlist category and location result pages.

## `superbcompaniesStartUrls` (type: `array`):

Public SuperbCompanies category result pages.

## `countries` (type: `array`):

Optional case-insensitive location keywords.

## `services` (type: `array`):

Optional services or specialties that must appear in the agency record.

## `keywords` (type: `array`):

Optional keywords matched against company name, description, services and location.

## `maxResultsPerSource` (type: `integer`):

Maximum raw agencies requested from each selected source.

## `maxPagesPerSource` (type: `integer`):

Maximum category pages requested from each source URL.

## `enrichContacts` (type: `boolean`):

Ask source Actors to inspect public company websites for contacts and technologies.

## `maxContactPages` (type: `integer`):

Maximum public website pages inspected per agency by source Actors.

## `onlyWithEmail` (type: `boolean`):

Output only deduplicated agencies containing at least one public business email.

## Actor input object example

```json
{
  "sources": [
    "sortlist",
    "superbcompanies"
  ],
  "sortlistStartUrls": [
    {
      "url": "https://www.sortlist.com/web-development/united-states-us"
    }
  ],
  "superbcompaniesStartUrls": [
    {
      "url": "https://superbcompanies.com/categories/software-development-companies/"
    }
  ],
  "countries": [],
  "services": [],
  "keywords": [],
  "maxResultsPerSource": 100,
  "maxPagesPerSource": 3,
  "enrichContacts": true,
  "maxContactPages": 3,
  "onlyWithEmail": false
}
```

# Actor output Schema

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

Normalized and deduplicated agency records.

## `summary` (type: `string`):

Source runs, discovered records, duplicates and final output counts.

# 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("xavier_rx/agency-lead-aggregator").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("xavier_rx/agency-lead-aggregator").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 xavier_rx/agency-lead-aggregator --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=xavier_rx/agency-lead-aggregator",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/IpijchNnY5R89p80a/builds/YMrs6B31zor55xxti/openapi.json
