# Clutch Scraper (`tortuga/clutch-scraper`) Actor

Scrape Clutch.co agency directories and company profiles: services, hourly rate, min project size, team size, location, rating, verified reviews and website. Built for B2B lead lists.

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

## Pricing

from $3.00 / 1,000 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 Scraper

Scrape Clutch.co directory listings and company profiles: services, hourly rate, min project size, team size, location, rating, review count, verified reviews and the company's real website. Ideal for B2B lead lists, agency research and competitor monitoring.

Give it any Clutch.co directory page (for example `https://clutch.co/agencies/digital-marketing`, `https://clutch.co/us/web-developers` or a filtered directory URL copied from the site) or a company profile URL. The Actor walks the directory page by page (50 companies each) and saves one clean record per company. Optionally it opens every profile for the full breakdown (all service lines with percentages, focus areas, industries, client sizes, every office, languages, founding year, verification data, social links) and nests the verified client reviews.

No login, no browser, no reviewer names. Export as JSON, CSV or Excel, or pull the dataset through the API into Google Sheets, a CRM or an LLM pipeline. You pay only for the companies you get.

### What data does Clutch Scraper extract?

Every company record (directory pages, charged as `result`):

| Field | Description |
|---|---|
| `name`, `slug`, `id` | Company name, Clutch slug and numeric Clutch provider id |
| `profileUrl` | Clutch profile URL |
| `websiteUrl` | The company's own website, resolved from Clutch's outbound redirect (utm tags removed) |
| `logoUrl` | Logo image |
| `rating`, `reviewCount` | Clutch rating (0-5) and number of reviews |
| `projectCount` | Projects / reviews listed on the profile |
| `hourlyRate`, `hourlyRateMin`, `hourlyRateMax` | Published hourly rate band ("$100 - $149 / hr") plus parsed numbers |
| `minProjectSize`, `minProjectSizeUsd` | Minimum project size ("$5,000+") plus parsed number |
| `employees`, `employeesMin`, `employeesMax` | Team size band ("50 - 249") plus parsed numbers |
| `location` | `{text, city, region, country, street, postalCode}` of the headquarters |
| `phone` | Business phone number shown on the listing |
| `serviceLines` | `[{name, percent, isCertified}]` service lines with share of business |
| `certifiedServices` | Service lines carrying the "Clutch Certified" mark |
| `isVerified`, `verificationLevel`, `badges` | Clutch verification (`premier` / `verified`) and badges such as "Clutch Guarantee" |
| `summary` | Clutch's summary of what clients say about the company |
| `insights` | Directory insight chips, e.g. "Reviewed 3 times in the past 6 months" |
| `rank`, `page`, `positionOnPage`, `listingType` | Position in the directory (`organic` / `sponsored`; `featured` only when enabled) |
| `sourceUrl`, `scrapedAt` | Where and when the record was scraped |

With **Open each company profile** (charged as `detail`, one extra request per company):

| Field | Description |
|---|---|
| `tagline`, `description` | Profile tagline and full company description |
| `founded` | Founding year |
| `serviceLines`, `focus`, `industries`, `clients` | Full percentage breakdowns (focus areas are grouped, e.g. "SEO Focus") |
| `locations` | Every office: `{name, isHeadquarters, street, city, region, country, postalCode, employees, phone}` |
| `languages`, `timezones` | Languages and timezones served |
| `ratingBreakdown`, `costRating` | Quality / schedule / cost / willing-to-refer averages |
| `mostCommonProjectSize`, `pricingSummary` | Pricing snapshot from the profile |
| `certifications`, `topMentions` | "Clutch Certified" credentials and the most mentioned review themes |
| `verifiedReviewCount`, `legalEntity` | Verified reviews and the registered business entity (name, jurisdiction, formation date, status, id) |
| `socialLinks` | `{linkedin, facebook, twitter, instagram, ...}` |
| `connectionsCount` | Number of client connections on Clutch |

With **Include reviews** each company additionally carries `reviews` (up to **Max reviews per company**):

| Field | Description |
|---|---|
| `id`, `title`, `url` | Review id, headline and Clutch review link |
| `rating`, `ratings` | Overall score and `{quality, schedule, cost, willingToRefer}` |
| `quote`, `summary`, `feedback` | The pull quote, project summary and outcome summary |
| `background`, `challenge`, `solution`, `results`, `companyResponse` | Full review sections as plain text |
| `services`, `focusAreas` | Services delivered in the project |
| `projectSize`, `projectCostMin`, `projectCostMax`, `projectLength` | Budget band and duration |
| `reviewerRole`, `reviewerCompany`, `reviewerIndustry`, `reviewerCompanySize`, `reviewerLocation` | Who hired the company (role, client company, industry, size, city) |
| `reviewType`, `isVerified`, `date` | Online review / interview, verified flag, ISO date |

Reviewer names and any personal contact details are deliberately not collected.

### How to use Clutch Scraper

1. Paste one or more Clutch.co URLs into **Start URLs**: a service directory (`https://clutch.co/seo-firms`), a location directory (`https://clutch.co/uk/web-developers`), a filtered directory URL copied from your browser, or a company profile (`https://clutch.co/profile/ignite-visibility`).
2. Set **Max companies** to cap the run and the cost.
3. Turn on **Open each company profile** and/or **Include reviews** if you need the deep data.
4. Click **Start**. Results appear in the **Dataset** tab; export from there or use the API.

### Input example

```json
{
  "startUrls": [
    { "url": "https://clutch.co/agencies/digital-marketing" },
    { "url": "https://clutch.co/us/web-developers?agency_size=50+-+249" }
  ],
  "maxItems": 200,
  "includeProfileDetails": true,
  "includeReviews": true,
  "maxReviewsPerCompany": 20
}
```

### Output example

```json
{
  "type": "company",
  "id": "25800",
  "slug": "ignite-visibility",
  "name": "Ignite Visibility",
  "profileUrl": "https://clutch.co/profile/ignite-visibility",
  "websiteUrl": "https://ignitevisibility.com/",
  "rating": 4.8,
  "reviewCount": 175,
  "hourlyRate": "$100 - $149 / hr",
  "hourlyRateMin": 100,
  "hourlyRateMax": 149,
  "minProjectSize": "$1,000+",
  "minProjectSizeUsd": 1000,
  "employees": "250 - 999",
  "location": { "text": "San Diego, CA", "city": "San Diego", "region": "CA", "country": "US", "street": "4250 Executive Square Suite #100", "postalCode": "92037" },
  "phone": "6197521955",
  "serviceLines": [
    { "name": "Search Engine Optimization", "percent": 30, "isCertified": true },
    { "name": "Advertising", "percent": 10, "isCertified": false }
  ],
  "isVerified": true,
  "verificationLevel": "premier",
  "badges": ["Premier Verified"],
  "summary": "Ignite Visibility is a digital marketing agency offering services in SEO, social media, paid media ...",
  "listingType": "sponsored",
  "rank": 1,
  "sourceUrl": "https://clutch.co/agencies/digital-marketing",
  "scrapedAt": "2026-09-07T12:00:00Z",
  "founded": 2013,
  "languages": ["Mandarin", "English", "Spanish"],
  "reviews": [
    {
      "id": "478317",
      "title": "PR, SEO, Content & Email Marketing for Recruiting Agency",
      "rating": 5.0,
      "ratings": { "quality": 5.0, "schedule": 5.0, "cost": 4.0, "willingToRefer": 5.0 },
      "projectSize": null,
      "projectLength": "Aug. 2025 - Aug. 2026",
      "reviewerRole": "Sr Mgr for Digital Marketing",
      "reviewerCompany": "Spherion Staffing & Recruiting",
      "reviewerIndustry": "Business services",
      "reviewerCompanySize": "51-200 Employees",
      "isVerified": true,
      "date": "2026-08-06"
    }
  ]
}
```

### How to scrape a Clutch.co category or location

Any directory URL works: service categories (`/agencies/digital-marketing`, `/developers`, `/it-services/msp`), country or city directories (`/us/web-developers`, `/gb/seo-firms`, `/web-developers/new-york`) and their filtered variants. Use the filters on clutch.co (budget, hourly rate, team size, location, reviews) and paste the resulting URL; the Actor keeps the query string and follows the site's own pagination, so one run can export a full category. Set **Max companies** to stop early.

### How to get a company's website and phone from Clutch

Clutch wraps every outbound link in a tracking redirect. The Actor decodes that redirect on the directory page itself, so `websiteUrl` is the real destination without visiting the vendor site, with `utm_*` parameters stripped. `phone` is the business number Clutch shows on the listing.

### How to scrape Clutch reviews

Turn on **Include reviews** and set **Max reviews per company**. The profile page carries the first 11 reviews; each further 10 reviews cost one more page request. Reviews come nested inside the company record with rating breakdown, project budget and length, review text sections and the reviewer's role, industry and company size, but never their name.

### Does it work without login or proxies?

Yes. Clutch pages are public and server-rendered, so no login is needed. Apify Proxy is on by default for reliability on long runs; you can turn it off for small runs.

### Pricing

Pay per company: a `result` event for every company saved from a directory page, plus a `detail` event for every company whose profile page was opened (which includes the nested reviews). No subscription; Apify's free plan is enough to try it.

### Integrations and API

Use the run in Zapier, Make, n8n, Google Sheets, or call it from Python/Node with the Apify client. See the **API** tab for ready-made snippets.

### Is it legal to scrape Clutch.co?

This Actor collects only publicly available business data (company profiles, rates, ratings and published reviews) and does not collect reviewer names or personal contact details. You are responsible for how you use the data and for complying with Clutch's terms and applicable law, including GDPR/CCPA where relevant.

### Support

Found a bug or need a field added? Open an issue in the **Issues** tab; it is usually answered within a day.

# Actor input Schema

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

Clutch.co pages to scrape: directory pages (https://clutch.co/agencies/digital-marketing, https://clutch.co/us/web-developers, https://clutch.co/it-services/msp), filtered directory URLs copied from the site (any ?filters), or company profile pages (https://clutch.co/profile/ignite-visibility). Directory pages are paginated automatically (50 companies per page).

## `maxItems` (type: `integer`):

Stop after this many companies (across all start URLs). Keeps cost predictable.

## `includeProfileDetails` (type: `boolean`):

Fetch every company's profile page for the full picture: description, all service lines with percentages, focus areas, industries, client sizes, all office locations, languages, timezones, founding year, rating breakdown, verified-business data, social links. One extra request per company (charged as a `detail` event).

## `includeReviews` (type: `boolean`):

Nest verified client reviews inside each company (rating, title, summary, project size and length, reviewer role, industry and company size, date). Implies opening the profile; reviews are included in the `detail` price. No reviewer names are collected.

## `maxReviewsPerCompany` (type: `integer`):

Upper limit of nested reviews per company when Include reviews is on. The profile page carries ~11 reviews; every further 10 reviews cost one more page request.

## `includeFeatured` (type: `boolean`):

Also save the 'Featured' paid placements shown at the top of every directory page (listingType = featured, no rank). Off by default because they repeat on every page and may sit outside the directory's location.

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

Apify Proxy is recommended for reliability on longer runs.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://clutch.co/agencies/digital-marketing"
    }
  ],
  "maxItems": 100,
  "includeProfileDetails": false,
  "includeReviews": false,
  "maxReviewsPerCompany": 20,
  "includeFeatured": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

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

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://clutch.co/agencies/digital-marketing"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("tortuga/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 = {
    "startUrls": [{ "url": "https://clutch.co/agencies/digital-marketing" }],
    "proxyConfiguration": { "useApifyProxy": True },
}

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tortuga/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/7CYMHiqi8W50sdr6n/builds/PS8CbK17M255DuX7y/openapi.json
