# Clutch.co Scraper ($0.99 per 1k results) (`inatanli/clutch-scraper`) Actor

$0.99 per 1,000 results. Extract comprehensive B2B lead data, ratings, and detailed service breakdowns from any Clutch.co directory page.

- **URL**: https://apify.com/inatanli/clutch-scraper.md
- **Developed by:** [Ina Li](https://apify.com/inatanli) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

$0.99 / 1,000 results

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

## Clutch.co Directory Scraper

Extract structured agency listings from any Clutch.co directory page. Paste a directory URL, set how many pages to scrape, and download the results in JSON, CSV, Excel, or HTML.

### What does Clutch.co Directory Scraper do?

Clutch.co Directory Scraper extracts agency listings from any Clutch.co directory page — covering categories like PPC, SEO, web development, UI/UX, staff augmentation, and hundreds more — and exports them into JSON, CSV, Excel, or HTML. You can then use this data in your own research projects, lead generation pipelines, market reports, and applications.

🔗 Scrape any Clutch.co directory URL (e.g. `/agencies/ppc`, `/web-developers`, `/it-services/staff-augmentation`)\
📄 Paginate through multiple pages of results (up to 80 agencies per page)\
🧾 Extract full agency details: name, ratings, services, location, contact info, and review insights\
📤 Export data in multiple formats: JSON, CSV, Excel, or HTML\
🔌 Connect to any AI chatbot or workflow using the Apify API, MCP server, webhooks, and SDKs (Python & Node.js)

### What data can you get from Clutch.co?

|                        |                       |                             |
| ---------------------- | --------------------- | --------------------------- |
| 🏢 Agency name         | ⭐ Star rating        | 💬 Review count             |
| ✅ Verification status | 💵 Hourly rate        | 📋 Min project size         |
| 👥 Employee count      | 📍 Location           | 📞 Telephone                |
| 🏠 Full address        | 🛠 Services breakdown | 📝 AI-generated description |
| 🔍 Review insights     | 🌐 Website domain     | 🔗 Clutch profile URL       |

### Why scrape Clutch.co?

🕵️ Research agencies across any service category — PPC, SEO, development, design, and more\
📈 Monitor the competitive landscape and track new entrants in a niche\
💸 Benchmark pricing, hourly rates, and minimum project sizes across the market\
🗂 Build a curated database of vetted agencies for outreach or comparison\
🤺 Track competitor agencies and their Clutch ratings over time\
📩 Feed an automated lead generation or agency discovery pipeline

### How to use Clutch.co Directory Scraper

Clutch.co Directory Scraper is built for an easy start, even if you've never scraped before:

1. Create a free Apify account using your email.
2. Open Clutch.co Directory Scraper.
3. Paste a Clutch.co directory URL and set the number of pages to scrape.
4. Enable **Apify Residential Proxies** in the Proxy configuration section (pre-filled by default).
5. Click **Start** and wait for the data to be extracted.
6. Download your data in JSON, CSV, Excel, HTML, or XML.

### Proxy requirement

Clutch.co is protected by Cloudflare, which blocks requests from datacenter IP addresses. **Residential proxies are required** when running this Actor on the Apify platform.

The proxy configuration is pre-filled with Apify Residential Proxies. You can also supply your own proxy URLs under the Proxy section. Apify Residential Proxies are billed by data transferred (~$12.50/GB). A typical run scraping 3 pages costs less than $0.02.

### Input parameters

The input of this scraper should be JSON containing the following fields:

**`directory_url`** (String, required) — The URL of a Clutch.co directory listing page. Must start with `https://clutch.co/`. Any directory path works, including nested verticals.

**`end_page`** (Number, optional, default: `1`) — The last page of results to scrape. Scraping always starts at page 1. Each page contains up to 80 agencies. Set this to `5` to scrape pages 1–5 (up to 400 agencies).

**`proxyConfiguration`** (Object, optional) — Proxy settings. Pre-filled with Apify Residential Proxies. Required to bypass Cloudflare when running on the Apify platform.

### Clutch.co Directory Scraper input example

```json
{
  "directory_url": "https://clutch.co/agencies/ppc",
  "end_page": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
````

This scrapes up to 5 pages (≈ 400 agencies) from the PPC directory.

Any Clutch directory path works:

- `https://clutch.co/agencies/ppc`
- `https://clutch.co/agencies/seo`
- `https://clutch.co/agencies/digital-strategy`
- `https://clutch.co/agencies/ui-ux`
- `https://clutch.co/it-services/staff-augmentation`
- `https://clutch.co/web-developers`
- `https://clutch.co/real-estate/commercial-financing/merger-acquisition`

### During the run

During the run, the Actor outputs a log message for each page showing the current page out of the total requested, how many new agencies were found, how many were duplicates, and the running total of unique records scraped so far.

If the Actor receives invalid input (e.g. a URL that doesn't start with `https://clutch.co/`), it stops immediately with a failure state and a clear explanation of what went wrong.

If a page returns no agency cards before `end_page` is reached, the Actor stops pagination early and finishes cleanly rather than continuing to fetch empty pages.

### Scraped Clutch.co agency listings

The structure of each item in Clutch.co listings looks like this:

```json
{
  "provider_id": "34374",
  "position": 3,
  "page_position": 3,
  "is_featured": false,
  "company_name": "Taktical Digital",
  "logo_url": "https://img.shgstatic.com/clutch-static-prod/image/scale/50x50/s3fs-public/logos/41a0b5738c88986dd2128d9d0ae7c148.png",
  "profile_url": "/profile/taktical-digital",
  "website_url": "taktical.co",
  "rating": 4.7,
  "review_count": 52,
  "verified_status": "Premier Verified",
  "min_project_size": "Undisclosed",
  "hourly_rate": "$50 - $99 / hr",
  "employee_count": "10 - 49",
  "location": "New York, NY",
  "telephone": "8558258422",
  "address": {
    "street": "241 West 37th Street, Suite 802",
    "locality": "New York",
    "region": "NY",
    "country": "US",
    "postal_code": "10018"
  },
  "services": [
    { "name": "Search Engine Optimization", "percentage": 30 },
    { "name": "Social Media Marketing", "percentage": 30 },
    { "name": "Content Marketing", "percentage": 10 },
    { "name": "Conversion Optimization", "percentage": 10 },
    { "name": "Pay Per Click", "percentage": 10 }
  ],
  "description": "Taktical Digital is a comprehensive digital marketing agency specializing in Search Optimization and SEO services. The company excels in enhancing online visibility and website ranking, with 100% of reviewers noting significant improvements in organic search performance and digital visibility enhancement.",
  "insights": {
    "review_mention_tag": "Proactive",
    "industries_summary": "Experience in 21 industries",
    "cost_rating": null,
    "responsiveness": "Very responsive",
    "review_snippets": [
      {
        "review_title": "SEO for Small Business Loans Platform",
        "rating": 4.0,
        "date": "Nov 12, 2019",
        "snippet": "At that point, they were great and supportive, coming up with incremental adjustments to make to the site. There's always a flow of ideas and an overall sense of proactivity while collaborating with them."
      }
    ]
  }
}
```

### Integrations

You can connect Clutch.co Directory Scraper with almost any cloud service or web app. Apify offers integrations with Make, Zapier, Slack, Google Sheets, Google Drive, GitHub, and more, plus webhooks to trigger actions whenever a run finishes.

#### Using the Apify API

The Apify API gives you programmatic access to run the Actor, schedule it, and fetch results. Use the [`apify-client`](https://pypi.org/project/apify-client/) PyPI package for Python or the [`apify-client`](https://www.npmjs.com/package/apify-client) NPM package for Node.js.

#### Using an MCP server

With the Apify API you can use this Actor through an MCP server and connect it to clients like Claude Desktop, or build your own. Read more about [setting up Apify Actors with MCP](https://docs.apify.com/platform/integrations/mcp).

#### Note

This scraper only collects data that agencies have chosen to publish publicly on their Clutch directory listings. It does not extract any data behind a login wall. The scraper is rate-limited to 20 requests per minute with a single worker to be polite to Clutch's servers and stay within the spirit of their crawl policies.

# Actor input Schema

## `directory_url` (type: `string`):

The URL of a Clutch.co directory listing page to scrape. Must start with `https://clutch.co/`.

Examples:

- `https://clutch.co/agencies/ppc`
- `https://clutch.co/agencies/seo`
- `https://clutch.co/agencies/digital-strategy`
- `https://clutch.co/agencies/ui-ux`
- `https://clutch.co/it-services/staff-augmentation`
- `https://clutch.co/web-developers`
- `https://clutch.co/real-estate/commercial-financing/merger-acquisition`

## `end_page` (type: `integer`):

The last page of results to scrape (inclusive). Scraping always starts at page 1. Each page contains up to 80 agencies.

For example, setting this to `5` will scrape pages 1–5 (up to 400 agencies).

## `proxyConfiguration` (type: `object`):

Proxy settings. Clutch.co blocks datacenter IPs, so residential proxies are required when running on Apify.

## Actor input object example

```json
{
  "directory_url": "https://clutch.co/agencies/ppc",
  "end_page": 1,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Agency records scraped from the requested Clutch directory. Each item contains company name, rating, reviews, location, hourly rate, employee count, and more.

# 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 = {
    "directory_url": "https://clutch.co/agencies/ppc",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("inatanli/clutch-scraper").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 = {
    "directory_url": "https://clutch.co/agencies/ppc",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("inatanli/clutch-scraper").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 '{
  "directory_url": "https://clutch.co/agencies/ppc",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call inatanli/clutch-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Clutch.co Scraper ($0.99 per 1k results)",
        "description": "$0.99 per 1,000 results. Extract comprehensive B2B lead data, ratings, and detailed service breakdowns from any Clutch.co directory page.",
        "version": "0.0",
        "x-build-id": "l0Hm8iZvLJpkF1jQy"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/inatanli~clutch-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-inatanli-clutch-scraper",
                "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/inatanli~clutch-scraper/runs": {
            "post": {
                "operationId": "runs-sync-inatanli-clutch-scraper",
                "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/inatanli~clutch-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-inatanli-clutch-scraper",
                "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": [
                    "directory_url"
                ],
                "properties": {
                    "directory_url": {
                        "title": "Directory URL",
                        "pattern": "^https://clutch\\.co/",
                        "type": "string",
                        "description": "The URL of a Clutch.co directory listing page to scrape. Must start with `https://clutch.co/`.\n\nExamples:\n- `https://clutch.co/agencies/ppc`\n- `https://clutch.co/agencies/seo`\n- `https://clutch.co/agencies/digital-strategy`\n- `https://clutch.co/agencies/ui-ux`\n- `https://clutch.co/it-services/staff-augmentation`\n- `https://clutch.co/web-developers`\n- `https://clutch.co/real-estate/commercial-financing/merger-acquisition`"
                    },
                    "end_page": {
                        "title": "End page",
                        "minimum": 1,
                        "type": "integer",
                        "description": "The last page of results to scrape (inclusive). Scraping always starts at page 1. Each page contains up to 80 agencies.\n\nFor example, setting this to `5` will scrape pages 1–5 (up to 400 agencies).",
                        "default": 1
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. Clutch.co blocks datacenter IPs, so residential proxies are required when running on Apify."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
