# Clutch.co Scraper - Agency Leads, Ratings & Pricing (`khadinakbar/clutch-scraper`) Actor

Scrape Clutch.co listing pages into B2B agency records: names, profiles, websites, ratings, review counts, hourly rates, project sizes, team sizes, locations, services, verified and sponsored flags. Supports multi-URL runs, filters, pagination, and MCP-ready summaries.

- **URL**: https://apify.com/khadinakbar/clutch-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Lead generation, Automation, MCP servers
- **Stats:** 5 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 scraped companies

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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

## Clutch.co Scraper — Agency Leads, Ratings & Pricing

Scrape Clutch.co category and directory listing pages into structured B2B company records for lead generation, vendor research, CRM enrichment, and AI-agent workflows.

This Apify Actor accepts Clutch listing pages such as category, service, search, and location directories. It returns one record per company card with fields like company name, profile URL, website, star rating, review count, hourly rate, minimum project size, employee range, location, services, verified badge, sponsored flag, result position, page number, scrape timestamp, and source URL. It is also available through Apify MCP for directory-to-dataset workflows.

### Best fit and connected workflows

This Actor fits workflows that start with a Clutch directory page and end with a clean agency list.

Common routing patterns:

- Build B2B agency prospect lists from Clutch category or location pages.
- Enrich CRM rows with Clutch profile URLs, websites, ratings, pricing, and service tags.
- Compare agencies by rating, review count, hourly rate, project size, and team size.
- Monitor Clutch categories for market research and vendor discovery.
- Feed structured vendor data into AI-agent and MCP workflows.

For review-level follow-up, connect the returned `profile_url` into Clutch Reviews Scraper. When your next step stays on the agency detail layer, use Clutch Agencies Scraper - Ratings, Services & Pricing.

### Practical scenario

Maya is building a partner shortlist for a digital marketing rollout. She starts with a Clutch location directory, filters for verified companies with a strong rating and enough reviews, and limits the run to a manageable number of companies. The Actor returns company name, profile URL, website, star rating, review count, hourly rate, employee range, location, services, and source URL. Maya uses those fields to rank agencies, then sends the profile URLs into her CRM for outreach and follow-up research.

### Input fields

| Field | Type | Description |
|---|---|---|
| `categoryUrl` | string | One Clutch category, service, or directory URL. Defaults to `https://clutch.co/it-services`. |
| `searchUrls` | array of strings | Multiple Clutch listing URLs for a batch run. |
| `startUrls` | array | Backwards-compatible request-list input for integrations that pass request objects. |
| `location` | string | Adds Clutch's geolocation query parameter server-side. |
| `minRating` | number | Keep only companies at or above the selected star rating. |
| `minReviews` | integer | Keep only companies with at least the selected review count. |
| `verifiedOnly` | boolean | Return only companies with a visible Clutch verified badge. |
| `excludeSponsored` | boolean | Drop sponsored or featured placements. |
| `serviceKeyword` | string | Case-insensitive filter against displayed service tags. |
| `locationKeyword` | string | Case-insensitive filter against displayed location text. |
| `maxResults` | integer | Maximum company records to return and bill for. Bounds: 1 to 5000. |
| `maxPages` | integer | Safety cap for pagination per start URL. |
| `maxConcurrency` | integer | Number of parallel browser pages. Default `2`. |

#### Focused input example

```json
{
  "categoryUrl": "https://clutch.co/it-services",
  "location": "United States",
  "minRating": 4.5,
  "minReviews": 10,
  "verifiedOnly": true,
  "excludeSponsored": true,
  "serviceKeyword": "software",
  "maxResults": 50,
  "maxConcurrency": 2
}
```

### Output fields

| Field | Type | Description |
|---|---|---|
| `company_name` | string | Company or agency name as shown on Clutch.co. |
| `profile_url` | string | Direct Clutch profile URL. |
| `website` | string | Company website URL when visible on the listing card. |
| `tagline` | string | Short marketing tagline or summary from the card. |
| `star_rating` | number | Clutch star rating. |
| `review_count` | integer | Number of Clutch reviews shown. |
| `min_project_size` | string | Minimum project budget shown on the card. |
| `hourly_rate` | string | Hourly billing range shown by Clutch. |
| `employees` | string | Displayed company size range. |
| `location` | string | Primary location shown on the card. |
| `services` | array of strings | Service categories or focus areas visible on the card. |
| `is_verified` | boolean | Whether the listing shows a verified badge. |
| `is_sponsored` | boolean | Whether the card appears as a sponsored placement. |
| `result_position` | integer | 1-based output position after dedupe and filters. |
| `page_number` | integer | Listing page number where the record was found. |
| `scraped_at` | string | ISO timestamp for when the record was collected. |
| `source_url` | string | Listing page URL where the company card was found. |

#### Illustrative output record

```json
{
  "company_name": "Saritasa",
  "profile_url": "https://clutch.co/profile/saritasa",
  "website": "https://saritasa.com/",
  "tagline": "We Build Software That Powers Growth",
  "star_rating": 4.9,
  "review_count": 142,
  "min_project_size": "$10,000+",
  "hourly_rate": "$50 - $99 / hr",
  "employees": "50 - 249",
  "location": "Newport Beach, CA",
  "services": [
    "Custom Software Development",
    "Web Development",
    "Mobile App Development"
  ],
  "is_verified": true,
  "is_sponsored": false,
  "result_position": 1,
  "page_number": 1,
  "scraped_at": "2026-07-08T12:00:00.000Z",
  "source_url": "https://clutch.co/it-services?page=1"
}
```

### How it works

This Actor loads Clutch listing pages in a browser runtime, extracts company cards, and writes one dataset row per company. It supports multiple listing URLs, server-side geolocation through the `location` input, and client-side filters for rating, review count, service keywords, location keywords, verified listings, and sponsored listings. Pagination continues until the requested number of company records is reached or the page cap is met. The run also writes machine-readable summary records for API and MCP consumers.

### Pricing

This Actor uses Pay per event plus Apify platform usage. The primary billed event is `Scraped company`, and there is also an Actor start event. Final cost depends on how many company records are collected and on the platform usage consumed by the run.

For example, a run that scrapes twenty company records bills twenty company events plus one Actor start event. To review the live pricing details, open the Pricing tab on the Actor page.

### Use with AI agents (MCP)

This Actor is available through Apify MCP and is suited for agent workflows that need structured Clutch company data from listing pages.

Tool description: scrape Clutch category and directory listings into company records with rating, review count, website, pricing, location, services, verified badge, sponsored flag, and source metadata.

Exact Actor identity: `khadinakbar/clutch-scraper`

> Scrape the Clutch digital marketing directory for verified agencies in the United States with at least aa bounded number of rating and ten reviews. Return up to fifty companies, then summarize the top records with company name, website, rating, review count, and hourly rate.

Output interpretation:

- `results` is the dataset of company cards, one row per company.
- `summary` is the run summary with totals, charged event counts, stop reason, and request stats.
- `output` is the compact terminal record for machine consumers.
- `debugCardHtml` is the first captured card HTML for selector review when at least one listing card renders.

Provenance and scope:

- Each row comes from a Clutch listing card on a category, service, search, or location directory page.
- `source_url` identifies the listing page that contained the card.
- `profile_url` points to the Clutch company profile.
- This Actor targets listing pages, not individual profile review pages.

Pagination and cost guidance:

- `maxResults` caps returned company records and billed company events.
- `maxPages` caps pagination per start URL.
- `searchUrls` lets agents send several listing pages in one run when a workflow needs batch collection.

### Example using the Apify API

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

const client = new ApifyClient({
  token: process.env.APIFY_TOKEN,
});

const input = {
  categoryUrl: 'https://clutch.co/it-services',
  minRating: 4.5,
  verifiedOnly: true,
  excludeSponsored: true,
  maxResults: 20,
};

const run = await client.actor('khadinakbar/clutch-scraper').call(input);

const { items } = await client.dataset(run.defaultDatasetId).listItems();

console.log(items);
```

### Best results and outcome guidance

Start with a Clutch listing URL that matches the business slice you want to collect, such as an industry, service, or location directory. Use low concurrency when reliability matters, then raise it only when your workflow needs more parallelism. Pair server-side `location` with the `locationKeyword` filter when your target market is narrow. Combine `minRating`, `minReviews`, `verifiedOnly`, and `excludeSponsored` when you want a more selective lead list. For larger directories, set both `maxResults` and `maxPages` so the run stays aligned with your outreach or enrichment plan.

### Continue the workflow

- Then use [Clutch Agencies Scraper — Ratings, Services & Pricing](https://apify.com/khadinakbar/clutch-listings-scraper) to extend Clutch.co Scraper — Agency Leads, Ratings & Pricing research with a complementary discovery contract.
- Then use [🔍 Contact Details Scraper – Emails, Phones & Social Links](https://apify.com/khadinakbar/contact-details-scraper) to extend Clutch.co Scraper — Agency Leads, Ratings & Pricing with a neighboring local-business research source when the brief calls for Contact data.

### Design note

I found that the dataset contract requires `company_name`, `profile_url`, `services`, `is_verified`, `is_sponsored`, `result_position`, `page_number`, `scraped_at`, and `source_url`, which makes the one-row-per-company structure explicit for downstream automation.

### FAQ

#### Can I scrape more than one Clutch page in a single run?

Yes. Use `searchUrls` for several listing URLs, or `categoryUrl` for one directory page.

#### Which Clutch pages fit this Actor?

Use category, service, search, or location listing pages that display company cards. Keep individual company profile and review pages for other workflows.

#### How do I narrow the result set for sales research?

Combine `location`, `minRating`, `minReviews`, `verifiedOnly`, `excludeSponsored`, `serviceKeyword`, and `locationKeyword` to shape the list around your target segment.

#### How does this Actor connect to other Clutch workflows?

Use the returned `profile_url` as the handoff to Clutch Reviews Scraper when you want review-level context for a company, or route the lead list into a CRM or enrichment pipeline first.

#### What should I read from the summary records?

Use `RUN_SUMMARY` for totals and billing context, and `OUTPUT` for a compact machine-readable end state that is convenient for agents and integrations.

### Responsible use

Use this Actor in line with Clutch.co terms, site policies, and applicable data-protection requirements. Keep your runs focused on the company records you need, store the data responsibly, and apply the returned fields in ways that fit your internal compliance and outreach practices.

# Actor input Schema

## `categoryUrl` (type: `string`):

Use this when you have one Clutch.co category, service, or directory URL to scrape, such as https://clutch.co/it-services, /web-developers, or /agencies/digital-marketing. If searchUrls is set, searchUrls wins. This actor scrapes listing pages, not individual /profile/ review pages.

## `searchUrls` (type: `array`):

Use this when you want to scrape several Clutch.co listing pages in one run. Each item should be a category, service, search, or location directory URL that shows company cards. Example: https://clutch.co/web-developers. Do not pass individual company profile URLs here.

## `startUrls` (type: `array`):

Use this when calling from Apify integrations that provide request-list objects. Accepts Clutch.co listing URLs as strings or objects with a url field. Kept for backwards compatibility with older clutch-scraper integrations.

## `location` (type: `string`):

Use this when you want Clutch to narrow the directory server-side with the geolocation query parameter. Examples: United States, London, India. Leave empty for global listings.

## `minRating` (type: `number`):

Use this when you only want companies with a Clutch star rating at or above the chosen value. Decimals are allowed, for example 4.5. Companies with no rating are dropped when this is set.

## `minReviews` (type: `integer`):

Use this when you only want companies with at least this many Clutch reviews. Companies with no visible review count are dropped when this is set.

## `verifiedOnly` (type: `boolean`):

Use this when you want only companies that show a Clutch verified badge. Defaults to false.

## `excludeSponsored` (type: `boolean`):

Use this when you want to drop paid or featured placements and keep only organic listing cards. Defaults to false.

## `serviceKeyword` (type: `string`):

Use this when you want a case-insensitive filter against each company's displayed services. Example: mobile app, SEO, software. Leave empty to keep all services.

## `locationKeyword` (type: `string`):

Use this when you want a case-insensitive filter against each company's displayed location text. Example: New York or India. Leave empty to keep all locations.

## `maxResults` (type: `integer`):

Maximum company records to return and bill for. Pagination stops once this limit is reached. Bounds: 1 to 5000.

## `maxPages` (type: `integer`):

Safety cap on listing pagination per start URL. Increase it for very large categories or restrictive filters. Defaults automatically from maxResults.

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

Number of parallel browser pages. Keep 1-2 for best Cloudflare reliability; use 3-5 only when you accept more blocking risk.

## Actor input object example

```json
{
  "categoryUrl": "https://clutch.co/it-services",
  "searchUrls": [
    "https://clutch.co/web-developers",
    "https://clutch.co/agencies/seo"
  ],
  "startUrls": [
    {
      "url": "https://clutch.co/it-services"
    }
  ],
  "location": "United States",
  "minRating": 4.5,
  "minReviews": 10,
  "verifiedOnly": false,
  "excludeSponsored": false,
  "serviceKeyword": "mobile app",
  "locationKeyword": "New York",
  "maxResults": 1,
  "maxPages": 50,
  "maxConcurrency": 2
}
```

# Actor output Schema

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

Dataset of scraped Clutch.co company listings with name, profile URL, website, rating, reviews, pricing, team size, location, services, sponsorship flag, and source metadata.

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

Machine-readable final run summary with totals, charged event counts, estimated cost, stop reason, and request stats.

## `output` (type: `string`):

Stable machine-readable terminal outcome, row count, billing event count, and warnings.

## `debugCardHtml` (type: `string`):

First listing card HTML captured for selector drift debugging when at least one card renders.

# 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 = {
    "categoryUrl": "https://clutch.co/it-services",
    "searchUrls": [
        "https://clutch.co/agencies/digital-marketing"
    ],
    "startUrls": [
        {
            "url": "https://clutch.co/it-services"
        }
    ],
    "maxResults": 1,
    "maxConcurrency": 2
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/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 = {
    "categoryUrl": "https://clutch.co/it-services",
    "searchUrls": ["https://clutch.co/agencies/digital-marketing"],
    "startUrls": [{ "url": "https://clutch.co/it-services" }],
    "maxResults": 1,
    "maxConcurrency": 2,
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/clutch-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "categoryUrl": "https://clutch.co/it-services",
  "searchUrls": [
    "https://clutch.co/agencies/digital-marketing"
  ],
  "startUrls": [
    {
      "url": "https://clutch.co/it-services"
    }
  ],
  "maxResults": 1,
  "maxConcurrency": 2
}' |
apify call khadinakbar/clutch-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,khadinakbar/clutch-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

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