# Clutch.co Scraper - B2B Agency Leads, Reviews & Rates (`scrapesage/clutch-scraper`) Actor

Scrape Clutch.co agencies from any directory: ratings, review scores (quality/schedule/cost/refer), hourly rates, min project size, team size, locations, service-line %, industries, decoded websites & decision-maker names. Optional email/social enrichment, lead scoring & monitoring.

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

## Pricing

from $4.00 / 1,000 agency scrapeds

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/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

<!--
DEMAND RECEIPT (Gate 2, 2026-07-09): Apify Store live query — piotrv1001/clutch-listings-scraper
1,158 total users with 820 in the LAST 30 DAYS (category exploding right now); memo23/apify-clutch-cheerio
481u; fatihtahta/clutch-co-scraper 122u; automation-lab/clutch-scraper 104u (77/30d). ~1,865 users across a
fragmented field with NO official owner. Checklist-documented "Clutch demand leak": Clutch is the #1 agency
directory; incumbents run flaky residential/solvers, demand leaks to siblings (our DesignRush/B2B-Agency
actors were built to catch that leak — this takes the source). Prior 2026-06-27 attempt failed on transport
only (CF Turnstile on Apify DC IPs, pre-Camoufox); the Camoufox lane (proven: Capterra 50 runs, TAAFT 8/8)
+ dual HTTP/browser transport is the crack. Live-probed 2026-07-09: clean 200 SSR HTML (2.85 MB listing,
372 KB profile), microdata + JSON-LD + SSR chartPie JSON confirmed present.
-->
## Clutch.co Scraper - B2B Agency Leads, Reviews & Rates

Extract **complete Clutch.co agency data** - including the fields other scrapers skip: **per-dimension review scores** (quality, schedule, cost, willingness to refer), **average hourly rate**, **minimum project size**, team size, every office location, **exact service-line percentages**, industry & client-size breakdowns, Clutch certifications, the **decision-maker shown on the profile** (name + title), and the agency's **real decoded website** (not the tracking redirect). Optionally turn every agency into a **ready-to-contact B2B lead** by crawling its own website for **emails, phone numbers and social links**.

Scrape any Clutch directory (IT services, web developers, SEO firms, digital marketing…), any city- or service-filtered directory URL, or specific agency profiles. Dual-lane transport - fast HTTP with an anti-detect browser fallback that clears Cloudflare and reuses its clearance - no API key, no login.

### Why this Clutch scraper?

Most Clutch scrapers return the listing card and stop. This actor ships the **richest dataset in the category**:

| Data | Typical scrapers | This actor |
|---|---|---|
| Name, rating, review count | ✅ | ✅ |
| Min project size / avg hourly rate / team size / location | partial | ✅ |
| **Verification badge (Verified / Premier Verified)** | ❌ | ✅ |
| **Service lines with exact % allocation** (+ certified lines) | ❌ | ✅ |
| **Review score breakdown: quality, schedule, cost, refer** | ❌ | ✅ opt-in |
| Industry & client-size breakdowns (exact %) | ❌ | ✅ opt-in |
| Every office location, languages, timezones | ❌ | ✅ opt-in |
| Phone, founding year, Clutch certifications | ❌ | ✅ opt-in |
| **Decision-maker name + title from the profile** | ❌ | ✅ opt-in |
| Client reviews + Clutch AI review highlights | ❌ | ✅ opt-in |
| **Real agency website (decoded, utm-stripped)** | rarely | ✅ |
| Agency **emails / phones / socials** (from their website) | ❌ | ✅ opt-in |
| Lead score (0-100) per agency | ❌ | ✅ |
| Sponsored vs organic listing flag + true organic rank | ❌ | ✅ |

### Use cases

- **B2B lead generation** - every agency is a prospect: filter by service line, rate band, team size, rating and location, then contact them directly (`emails`, `phone`, `socialProfiles`, `contactName`) for partnerships, white-label work, M&A sourcing, SaaS/martech sales or recruiting.
- **Agency shortlisting & procurement** - build comparison tables of vendors with real hourly rates, project minimums, verified reviews and per-dimension scores.
- **Competitive & market intelligence** - map a whole category (who's Premier Verified, who's certified in which service line, rate distributions by country).
- **Reputation monitoring** - schedule recurring runs with monitor mode to catch new agencies, rating moves and review growth in any directory.
- **Data enrichment** - join by decoded website/domain to enrich your CRM with Clutch ratings and firmographics.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up) - the free plan is enough to try this actor.
2. Open the **Clutch.co Scraper**, add one or more **directories** (e.g. `it-services`, `web-developers`, `seo-firms`) or paste any Clutch directory / profile URL, and click **Start**.
3. Watch results stream into the dataset table.
4. **Export** as JSON, CSV, Excel, XML, or RSS - or pull results programmatically via the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "directories": ["it-services", "web-developers"],
    "startUrls": [{ "url": "https://clutch.co/profile/miles-it" }],
    "maxItems": 100,
    "includeProfileDetails": true,
    "includeReviews": true,
    "enrichContacts": true,
    "minRating": "4.5",
    "locationContains": "London",
    "monitorMode": false
}
````

- **directories** - Clutch directory slugs from the URL `clutch.co/`**`it-services`** (e.g. `it-services`, `web-developers`, `seo-firms`, `agencies/digital-marketing`, `developers/artificial-intelligence`, `it-services/msp`). Full directory URLs (including city-filtered ones) work too.
- **startUrls** - direct profile (`/profile/<slug>`) or directory URLs.
- **maxItems** *(default 50)* - global cap on agencies; `0` = no limit.
- **includeProfileDetails** *(default false)* - open each profile for description, phone, founding year, all offices, languages, timezones, exact service/industry/client percentages, certifications, review breakdown, top mentions, decision-maker and social links.
- **includeReviews** *(default false)* - attach client reviews + Clutch AI review highlights (implies profile details).
- **enrichContacts** *(default false)* - crawl each agency's own website for emails, phones and socials (implies profile details).
- **minRating / minReviews / verifiedOnly / withWebsiteOnly / locationContains** - filters.
- **monitorMode** *(default false)* - emit only new/changed agencies across runs.
- **proxyConfiguration** *(default: Apify residential, US)* - residential is required (Cloudflare). Custom/BYO proxies are used as-is.

### Output

One record per agency (`type: "agency"`). Directory-card fields are always present; profile and enrichment fields are added when you enable those options.

```json
{
    "type": "agency",
    "clutchId": "63166",
    "slug": "miles-it",
    "name": "Miles IT",
    "profileUrl": "https://clutch.co/profile/miles-it",
    "listingType": "organic",
    "sponsored": false,
    "rank": 3,
    "rating": 5.0,
    "reviewCount": 11,
    "verification": "Premier Verified",
    "minProjectSize": "$1,000+",
    "hourlyRate": "$150 - $199 / hr",
    "employees": "250 - 999",
    "location": "Tampa, FL",
    "services": [{ "name": "IT Managed Services", "percent": 35 }, { "name": "Custom Software Development", "percent": 35 }],
    "primaryService": "IT Managed Services",
    "reviewsSummary": "Miles IT is a managed IT service provider… 100% of clients express satisfaction…",
    "website": "https://www.milesit.com",
    "phone": "856-439-0999",
    "founded": 1997,
    "address": { "street": "400 North Tampa Street", "city": "Tampa", "state": "FL", "postalCode": "33602", "country": "US" },
    "locations": ["Tampa, FL", "Lumberton Township, NJ"],
    "languages": ["English"],
    "timezones": ["EST"],
    "serviceLines": [{ "name": "Custom Software Development", "percent": 35 }, { "name": "IT Managed Services", "percent": 35, "certified": true }],
    "industries": [{ "name": "Business services", "percent": 20 }],
    "clients": [{ "name": "Small Business (<$10M)", "percent": 65 }],
    "certifications": [{ "name": "Clutch Certified - IT Managed Services", "awarded": "Jun 30, 2026", "expires": "Jun 18, 2028" }],
    "reviewsBreakdown": { "quality": 4.9, "schedule": 5.0, "cost": 4.6, "willingToRefer": 5.0 },
    "topMentions": [{ "mention": "Professional", "count": 3 }, { "mention": "Timely", "count": 3 }],
    "contactName": "Chris Miles",
    "contactTitle": "CEO",
    "socialProfiles": { "linkedin": "https://www.linkedin.com/company/milesitcompany", "facebook": "https://www.facebook.com/MilesITCompany" },
    "reviews": [{ "title": "Managed IT Services for Accounting Firm", "rating": 5.0, "body": "…", "author": "Laura", "date": "Jun 4, 2026" }],
    "reviewHighlights": [{ "title": "Strong Technical Expertise", "body": "Clients across various industries commend…" }],
    "emails": ["sales@milesit.com"],
    "leadScore": 92,
    "scrapedAt": "2026-07-09T12:00:00.000Z"
}
```

### Automate & schedule

Run this actor on autopilot and pull results into your own stack:

- **[Apify API](https://docs.apify.com/api/v2)** - start runs, fetch datasets, and manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[apify-client for Python](https://docs.apify.com/api/client/python/)** - official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)** - run it daily/weekly with **monitor mode** to track new agencies, rating moves and rate changes in a directory.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** - trigger downstream actions (CRM import, Slack alert, email sequence) the moment a run finishes.

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

const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });

const run = await client.actor('scrapesage/clutch-scraper').call({
    directories: ['seo-firms'],
    maxItems: 200,
    includeProfileDetails: true,
    enrichContacts: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} agencies & leads`);
```

### Integrate with any app

Connect the dataset to 5,000+ apps - no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** - multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** - push new agency leads straight into your CRM.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** - get notified when a monitored directory changes.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** - auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** - pipe results into your data warehouse.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** - ask your assistant to "find Premier Verified IT agencies in Texas under $100/hr with their emails" and let it run this scraper for you.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready** - AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)** - an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) - no account, no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)** - agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

### More scrapers from scrapesage

Build a complete **agency & B2B lead stack**:

- **[DesignRush Scraper](https://apify.com/scrapesage/designrush-scraper)** - agencies, services & B2B leads.
- **[B2B Agency Scraper](https://apify.com/scrapesage/b2b-agency-scraper)** - marketing, design & dev agency leads.
- **[Capterra Scraper](https://apify.com/scrapesage/capterra-scraper)** - software reviews, ratings & vendor leads.
- **[HubSpot Solutions Partner Scraper](https://apify.com/scrapesage/hubspot-solutions-partner-scraper)** - agency partner leads.
- **[Website Contact Scraper](https://apify.com/scrapesage/website-contact-scraper)** - emails, phones & socials from any site.
- **[LinkedIn Company Scraper](https://apify.com/scrapesage/linkedin-company-scraper)** - firmographics & B2B leads.
- **[Website Tech Stack Scraper](https://apify.com/scrapesage/website-tech-stack-scraper)** - technology & lead intelligence.
- **[Google Maps Scraper](https://apify.com/scrapesage/google-maps-scraper)** - local business leads & contacts.

### Tips

- **Directory sweeps**: a Clutch directory can list tens of thousands of agencies (IT services alone has 60,000+). Raise `maxItems` (or set `0`) and the actor paginates automatically; split very large directories across scheduled runs.
- **Fast vs rich**: the default directory-only run is fast and already includes ratings, rates, team size, location, service percentages, the AI review summary and the decoded website. Turn on `includeProfileDetails` / `enrichContacts` only when you need the deep profile and contact data.
- **Lead workflows**: combine `verifiedOnly`, `minReviews`, `organicOnly` and `locationContains` to pull a clean, contactable segment, then sort by `leadScore`. These filters are applied **while crawling**, so `maxItems` counts the agencies you keep — asking for 100 London agencies paginates until it finds 100, instead of filtering one page down to a handful.
- **Recurring monitoring**: combine [Schedules](https://docs.apify.com/platform/schedules) with `monitorMode` to receive only new/changed agencies.
- **Proxies & reliability**: Clutch sits behind Cloudflare. The actor pairs a fast HTTP lane with an anti-detect browser fallback that clears the challenge and hands its clearance back to the HTTP lane, so most pages fetch at HTTP speed. Runs that Cloudflare fully blocks end cleanly with a "please re-run" status message and $0 charged, never an error.

### FAQ

**How do I scrape a Clutch category?** Put the slug from the directory URL in `directories` (e.g. `it-services`, `web-developers`, `seo-firms`, `agencies/digital-marketing`). Every agency in the directory is scraped with full card data.

**Where does the website come from?** Clutch links agencies through a tracking redirect; this actor decodes it to the agency's **real website** and strips the utm noise. Two cases where the directory card has no usable link: sponsored cards route through Clutch's PPC click-tracker (this actor rejects that rather than emit a fake website), and further down a directory Clutch simply stops rendering the "Visit Website" button (page 1 organic cards carry it ~100% of the time, page 20 ~7%). In both cases the real website is on the agency's profile page, so **enable `includeProfileDetails` to get `website` for every agency** — that path returns it 100% of the time. If you use `withWebsiteOnly` on a fast directory-only run, deep-page agencies will therefore be filtered out; turn on `includeProfileDetails` to keep them.

**Where do emails come from?** Never from Clutch. With `enrichContacts` on, the actor visits each agency's own public website and extracts publicly listed contact details - the same thing a human visitor would see.

**Do I get the review score breakdown?** Yes - with `includeProfileDetails`, each agency carries quality / schedule / cost / willingness-to-refer scores, top review mentions, and (with `includeReviews`) the client reviews plus Clutch's AI review highlights.

**Can I export to Google Sheets, CSV, or Excel?** Yes - one click in the dataset view, or automatically on every run via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**Is scraping Clutch legal?** This actor collects publicly available data only. You are responsible for using the data in compliance with applicable laws (GDPR/CCPA for personal data) and Clutch's terms.

**A field is null - why?** Directory-card fields (ratings, rates, team size, location, services) are populated whenever Clutch shows them — `rating`/`reviewCount` only exist for reviewed agencies, and the `verification` badge only for vetted ones (both thin out deeper in a directory, because Clutch ranks verified providers first). Profile fields (phone, founded, breakdowns, decision-maker) require `includeProfileDetails`; emails/socials require `enrichContacts` and an agency that publishes them. Nothing is ever guessed or filled in.

**A run returned 0 agencies / "Cloudflare blocked" - why?** Occasionally Cloudflare blocks all attempts in a run window. The run still finishes cleanly ($0 charged) and asks you to re-run - fresh residential IPs usually clear immediately. For guaranteed throughput you can supply your own premium residential/unblocker proxies in `proxyConfiguration`.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome - this actor is actively maintained.

# Actor input Schema

## `directories` (type: `array`):

Clutch directory slugs or full directory URLs - every agency listed is scraped with full ratings, rates and services. Use the path from the directory URL <code>clutch.co/<b>it-services</b></code>, e.g. <code>it-services</code>, <code>web-developers</code>, <code>seo-firms</code>, <code>agencies/digital-marketing</code>, <code>developers/artificial-intelligence</code>, <code>it-services/msp</code>, <code>it-services/cybersecurity</code>. City- or service-filtered directory URLs work too.

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

Direct Clutch URLs: agency profiles (<code>clutch.co/profile/\<slug></code>) or any directory page. Used in addition to the directories above. Profile URLs always fetch full profile details.

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

Global cap on the number of agency records to output across all directories. A directory page lists ~50 organic agencies. Set 0 for no limit (the run then paginates until the directory ends or the run timeout is near).

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

Open each agency's profile page to add: full description, phone number, founding year, HQ address + every office location, languages, timezones, exact service-line percentages, industry & client-size breakdowns, Clutch certifications, review score breakdown (quality, schedule, cost, willingness to refer), top review mentions, the decision-maker shown on the profile (name + title) and the agency's social links. Slower (one page per agency) and billed per profile (agencyDetails event). Leave off for the fast directory-only run - directory cards already include ratings, rates, team size, location, services and the decoded website.

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

Attach client reviews (title, rating, summary, reviewer, date) plus Clutch's AI review highlights to each agency. Opens the profile page, so it implies 'Include profile details'.

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

For every agency with a website, crawl the agency's own home + contact/about page and extract publicly listed e-mail addresses, phone numbers and social profiles (LinkedIn, Facebook, Instagram, X, YouTube, TikTok) - turning each agency into a ready-to-contact B2B lead. Implies 'Include profile details' and is billed as an enriched lead.

## `minRating` (type: `string`):

Keep only agencies with at least this average review rating. Leave empty for all.

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

Keep only agencies with at least this many reviews (filters out unproven listings). Leave empty for all.

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

Keep only agencies with a Clutch verification badge (Verified / Premier Verified).

## `organicOnly` (type: `boolean`):

Drop sponsored and featured (pay-per-click) placements and keep only agencies from the organic directory ranking and leaders matrix. Cleaner lead lists without advertisers.

## `withWebsiteOnly` (type: `boolean`):

Keep only agencies whose real website could be decoded (organic listings expose it; sponsored-only cards may not).

## `locationContains` (type: `string`):

Keep only agencies whose location matches this text, e.g. <code>London</code>, <code>TX</code>, <code>Singapore</code>, <code>India</code>. Checked against the card location, HQ address and every office.

## `monitorMode` (type: `boolean`):

Remember agencies across runs and emit only NEW or CHANGED ones (rating, review count, hourly rate, team size or website change). Pair with an Apify Schedule to watch a directory for new entrants and rating moves.

## `monitorKey` (type: `string`):

Namespace for monitor memory. Use a distinct key per saved search so their states don't collide.

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

Proxies to use. Residential proxies are REQUIRED - Clutch is protected by Cloudflare and blocks datacenter IPs. The default (Apify residential, US) pairs a fast HTTP lane with an anti-detect browser fallback that clears the challenge and reuses its clearance. You can also supply <b>Custom proxies</b> (your own premium residential or unblocker endpoint) - they are used as-is.

## `debugMode` (type: `boolean`):

Dump raw page diagnostics to the key-value store for troubleshooting selectors.

## `headful` (type: `boolean`):

Run the fallback browser headful (under Xvfb) - clears Cloudflare's Turnstile far more reliably. On by default; set false to force headless.

## Actor input object example

```json
{
  "directories": [
    "it-services",
    "web-developers",
    "seo-firms"
  ],
  "maxItems": 50,
  "includeProfileDetails": false,
  "includeReviews": false,
  "enrichContacts": false,
  "minRating": "",
  "verifiedOnly": false,
  "organicOnly": false,
  "withWebsiteOnly": false,
  "monitorMode": false,
  "monitorKey": "default",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  },
  "debugMode": false,
  "headful": true
}
```

# Actor output Schema

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

All scraped Clutch agency records as JSON items in the default dataset.

# 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 = {
    "directories": [
        "it-services"
    ],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/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 = {
    "directories": ["it-services"],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/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 '{
  "directories": [
    "it-services"
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call scrapesage/clutch-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Clutch.co Scraper - B2B Agency Leads, Reviews & Rates",
        "description": "Scrape Clutch.co agencies from any directory: ratings, review scores (quality/schedule/cost/refer), hourly rates, min project size, team size, locations, service-line %, industries, decoded websites & decision-maker names. Optional email/social enrichment, lead scoring & monitoring.",
        "version": "0.1",
        "x-build-id": "6kgCkync3kSeBjCSh"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapesage~clutch-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapesage-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/scrapesage~clutch-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapesage-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/scrapesage~clutch-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapesage-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",
                "properties": {
                    "directories": {
                        "title": "Directories (categories)",
                        "type": "array",
                        "description": "Clutch directory slugs or full directory URLs - every agency listed is scraped with full ratings, rates and services. Use the path from the directory URL <code>clutch.co/<b>it-services</b></code>, e.g. <code>it-services</code>, <code>web-developers</code>, <code>seo-firms</code>, <code>agencies/digital-marketing</code>, <code>developers/artificial-intelligence</code>, <code>it-services/msp</code>, <code>it-services/cybersecurity</code>. City- or service-filtered directory URLs work too.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Direct Clutch URLs: agency profiles (<code>clutch.co/profile/&lt;slug&gt;</code>) or any directory page. Used in addition to the directories above. Profile URLs always fetch full profile details.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxItems": {
                        "title": "Max agencies",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Global cap on the number of agency records to output across all directories. A directory page lists ~50 organic agencies. Set 0 for no limit (the run then paginates until the directory ends or the run timeout is near).",
                        "default": 50
                    },
                    "includeProfileDetails": {
                        "title": "Include profile details (description, phone, all offices, service %, industries, decision-maker)",
                        "type": "boolean",
                        "description": "Open each agency's profile page to add: full description, phone number, founding year, HQ address + every office location, languages, timezones, exact service-line percentages, industry & client-size breakdowns, Clutch certifications, review score breakdown (quality, schedule, cost, willingness to refer), top review mentions, the decision-maker shown on the profile (name + title) and the agency's social links. Slower (one page per agency) and billed per profile (agencyDetails event). Leave off for the fast directory-only run - directory cards already include ratings, rates, team size, location, services and the decoded website.",
                        "default": false
                    },
                    "includeReviews": {
                        "title": "Include client reviews",
                        "type": "boolean",
                        "description": "Attach client reviews (title, rating, summary, reviewer, date) plus Clutch's AI review highlights to each agency. Opens the profile page, so it implies 'Include profile details'.",
                        "default": false
                    },
                    "enrichContacts": {
                        "title": "Enrich agency contacts (emails, phones & socials)",
                        "type": "boolean",
                        "description": "For every agency with a website, crawl the agency's own home + contact/about page and extract publicly listed e-mail addresses, phone numbers and social profiles (LinkedIn, Facebook, Instagram, X, YouTube, TikTok) - turning each agency into a ready-to-contact B2B lead. Implies 'Include profile details' and is billed as an enriched lead.",
                        "default": false
                    },
                    "minRating": {
                        "title": "Minimum star rating",
                        "enum": [
                            "",
                            "3",
                            "3.5",
                            "4",
                            "4.5",
                            "4.8"
                        ],
                        "type": "string",
                        "description": "Keep only agencies with at least this average review rating. Leave empty for all.",
                        "default": ""
                    },
                    "minReviews": {
                        "title": "Minimum review count",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Keep only agencies with at least this many reviews (filters out unproven listings). Leave empty for all."
                    },
                    "verifiedOnly": {
                        "title": "Only Clutch-verified agencies",
                        "type": "boolean",
                        "description": "Keep only agencies with a Clutch verification badge (Verified / Premier Verified).",
                        "default": false
                    },
                    "organicOnly": {
                        "title": "Only organic results (skip paid placements)",
                        "type": "boolean",
                        "description": "Drop sponsored and featured (pay-per-click) placements and keep only agencies from the organic directory ranking and leaders matrix. Cleaner lead lists without advertisers.",
                        "default": false
                    },
                    "withWebsiteOnly": {
                        "title": "Only agencies with a website",
                        "type": "boolean",
                        "description": "Keep only agencies whose real website could be decoded (organic listings expose it; sponsored-only cards may not).",
                        "default": false
                    },
                    "locationContains": {
                        "title": "Location filter",
                        "type": "string",
                        "description": "Keep only agencies whose location matches this text, e.g. <code>London</code>, <code>TX</code>, <code>Singapore</code>, <code>India</code>. Checked against the card location, HQ address and every office."
                    },
                    "monitorMode": {
                        "title": "Monitor mode (only new / changed)",
                        "type": "boolean",
                        "description": "Remember agencies across runs and emit only NEW or CHANGED ones (rating, review count, hourly rate, team size or website change). Pair with an Apify Schedule to watch a directory for new entrants and rating moves.",
                        "default": false
                    },
                    "monitorKey": {
                        "title": "Monitor key",
                        "type": "string",
                        "description": "Namespace for monitor memory. Use a distinct key per saved search so their states don't collide.",
                        "default": "default"
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxies to use. Residential proxies are REQUIRED - Clutch is protected by Cloudflare and blocks datacenter IPs. The default (Apify residential, US) pairs a fast HTTP lane with an anti-detect browser fallback that clears the challenge and reuses its clearance. You can also supply <b>Custom proxies</b> (your own premium residential or unblocker endpoint) - they are used as-is.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "US"
                        }
                    },
                    "debugMode": {
                        "title": "Debug mode",
                        "type": "boolean",
                        "description": "Dump raw page diagnostics to the key-value store for troubleshooting selectors.",
                        "default": false
                    },
                    "headful": {
                        "title": "Headful browser",
                        "type": "boolean",
                        "description": "Run the fallback browser headful (under Xvfb) - clears Cloudflare's Turnstile far more reliably. On by default; set false to force headless.",
                        "default": true
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
