# Clutch Reviews Scraper (`khadinakbar/clutch-reviews-scraper`) Actor

Scrape client reviews from any Clutch.co agency profile: overall + quality/schedule/cost/refer ratings, reviewer role, company size, industry, location, project budget, length, services, and full Q\&A feedback. Paste profile URLs or slugs. Clears Cloudflare, paginates full history. MCP-ready.

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

## Pricing

from $4.00 / 1,000 review scrapeds

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

## Clutch Reviews Scraper

Scrape verified client reviews from any [Clutch.co](https://clutch.co) agency profile — overall and breakdown ratings, reviewer details, project metadata, and full written feedback — as clean, structured JSON.

### What it does

Give it one or more Clutch.co profile URLs (or bare slugs) and it returns **one record per client review**, paginating each profile to collect its full review history. For every review you get the star rating, the four Clutch breakdown scores (Quality, Schedule, Cost, Willingness to Refer), who left it (role, company size, industry, location), the project (budget range, length, services), and the complete Q&A feedback (Background, Challenge, Solution, Results).

It clears Clutch's Cloudflare protection automatically using a fingerprinted headless browser — no cookies, logins, or API keys required.

### When to use it

- **Agency reputation analysis** — pull every review for your own or a competitor's Clutch profile.
- **Competitive intelligence** — compare breakdown scores and client feedback across rival agencies.
- **Vendor due diligence** — read structured client outcomes before hiring an agency.
- **Sentiment & theme mining** — feed the feedback text into an LLM to extract strengths, weaknesses, and recurring themes.
- **AI-agent workflows (MCP)** — call this actor directly from Claude, ChatGPT, or any MCP client to fetch review data on demand.

**Not for** Clutch company *listings* (the directory of agencies by category) — use the separate **clutch-scraper** actor for that. This actor is review-focused: it expects a profile, not a category or search page.

### Input

| Field | Type | Description |
|---|---|---|
| `profileUrls` | array (required) | Clutch profile URLs or slugs, e.g. `https://clutch.co/profile/wedowebapps` or just `wedowebapps`. |
| `maxReviews` | integer | Max total reviews to collect across all profiles. Default `100`. Hard cost cap. |
| `maxConcurrency` | integer | Profiles loaded in parallel. Default `2`. Keep 1–3 for reliability. |

Example:

```json
{
  "profileUrls": [
    "https://clutch.co/profile/wedowebapps",
    "fireart-studio"
  ],
  "maxReviews": 100,
  "maxConcurrency": 2
}
````

### Output

One dataset item per review:

| Field | Description |
|---|---|
| `agency_name`, `agency_slug`, `profile_url` | Which agency the review is for |
| `review_title` / `project_summary` | The project the review covers |
| `overall_rating` | Overall star rating (0–5) |
| `quality_rating`, `schedule_rating`, `cost_rating`, `willing_to_refer_rating` | Clutch breakdown scores |
| `reviewer_name`, `reviewer_position` | Reviewer identity (often anonymized to a role) |
| `reviewer_company`, `reviewer_company_size`, `reviewer_industry`, `reviewer_location` | The client organization |
| `project_budget`, `project_length`, `services_provided` | Engagement details |
| `feedback_background`, `feedback_challenge`, `feedback_solution`, `feedback_results` | Full Q\&A interview answers |
| `review_date`, `is_verified` | Posted date and Clutch verification flag |
| `scraped_at`, `source_url` | Run metadata |

Empty fields are omitted from each record (never written as `null`).

Example record:

```json
{
  "agency_name": "WEDOWEBAPPS",
  "profile_url": "https://clutch.co/profile/wedowebapps",
  "review_title": "IT Staff Augmentation for Tech Company",
  "overall_rating": 5,
  "quality_rating": 4.5,
  "schedule_rating": 4.5,
  "cost_rating": 5,
  "willing_to_refer_rating": 5,
  "reviewer_position": "Founder, Tech Company",
  "reviewer_company_size": "1-10 Employees",
  "reviewer_industry": "Other industries",
  "reviewer_location": "Lagos, Nigeria",
  "project_budget": "$50,000 to $199,999",
  "project_length": "May 2020 - Ongoing",
  "services_provided": "IT Staff Augmentation",
  "feedback_results": "I've already recommended WEDOWEBAPPS to a few of my friends...",
  "review_date": "May 3, 2024",
  "is_verified": true
}
```

### Pricing

Pay-per-event:

- **Actor start** — $0.00005 per run (scaled by memory).
- **Review scraped** — **$0.004 per review** returned.

A run that collects 100 reviews costs roughly **$0.40**. The `maxReviews` input is a hard cap, so your cost is predictable and bounded before the run starts.

### How it works

- A fingerprinted headless Chrome instance (Crawlee `PlaywrightCrawler`) loads each profile and waits out the Cloudflare challenge.
- Reviews are parsed directly from Clutch's rendered markup using resilient, multi-fallback selectors.
- Each profile is paginated (`?page=N`) until no more reviews are found or `maxReviews` is reached.
- Results are pushed as they're found, deduplicated per profile, and billed once per unique review.
- If every request is blocked, the run fails honestly with a clear message instead of returning an empty success.

### Using it as an MCP tool

This actor is exposed in the Apify MCP server as `apify--clutch-reviews-scraper`. AI agents can call it with a profile URL and receive structured review JSON they can summarize, score, or compare — ideal for automated agency research and due-diligence assistants.

### FAQ

**Do I need a Clutch login or cookies?** No. It works on public profile pages without authentication.

**Can I scrape a whole category?** Not with this actor — it works per profile. Use **clutch-scraper** for the agency directory, then feed the resulting profile URLs here.

**Why did I get fewer reviews than `maxReviews`?** The profile simply has fewer reviews than your cap. The actor collects everything available and stops.

**Are reviewer names included?** Clutch anonymizes most reviewers to a role + company type (e.g. "Founder, Tech Company"); the actor returns whatever Clutch displays publicly.

### Legal

This actor extracts publicly available information from Clutch.co. Use it in compliance with Clutch's Terms of Service and applicable data-protection laws (including GDPR and CCPA). Reviews and reviewer details may contain personal data — you are responsible for lawful processing, storage, and use of any scraped data. This tool is provided for legitimate research, analytics, and business-intelligence purposes only.

# Actor input Schema

## `profileUrls` (type: `array`):

One or more Clutch.co agency profiles to scrape reviews from. Accepts full URLs (e.g. 'https://clutch.co/profile/wedowebapps') or bare slugs (e.g. 'wedowebapps'). Each profile is paginated automatically to collect its review history. NOT a Clutch category or search URL — for company listings use the clutch-scraper actor instead.

## `maxReviews` (type: `integer`):

Maximum total number of reviews to scrape across all profiles in this run (e.g. 100). The run stops and billing ends once this cap is reached. Defaults to 100. This is a hard cost cap — at $0.004 per review, 100 reviews is about $0.40.

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

How many profile pages to load in parallel (e.g. 2). Higher values are faster but raise the chance of Cloudflare blocks. Defaults to 2. Keep at 1-3 for reliability.

## Actor input object example

```json
{
  "profileUrls": [
    "https://clutch.co/profile/wedowebapps",
    "fireart-studio"
  ],
  "maxReviews": 100,
  "maxConcurrency": 2
}
```

# Actor output Schema

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

Dataset of all scraped Clutch.co reviews. Each item contains: agency\_name, agency\_slug, profile\_url, review\_title, overall\_rating (number 0-5), quality\_rating, schedule\_rating, cost\_rating, willing\_to\_refer\_rating (numbers), reviewer\_name, reviewer\_position, reviewer\_company, reviewer\_company\_size, reviewer\_industry, reviewer\_location, project\_summary, project\_budget, project\_length, services\_provided, feedback\_background, feedback\_challenge, feedback\_solution, feedback\_results, review\_date, is\_verified (boolean), scraped\_at (ISO 8601), source\_url. Null fields are omitted. Use the dataset items API to retrieve records as JSON, CSV, or XLSX.

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

Raw outerHTML of the first review card captured during the run, for validating CSS selectors against Clutch.co's live DOM. Access via the key-value store API using the key DEBUG\_REVIEW\_CARD. Only present when at least one review card rendered.

# 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 = {
    "profileUrls": [
        "https://clutch.co/profile/wedowebapps"
    ],
    "maxReviews": 100,
    "maxConcurrency": 2
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/clutch-reviews-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 = {
    "profileUrls": ["https://clutch.co/profile/wedowebapps"],
    "maxReviews": 100,
    "maxConcurrency": 2,
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/clutch-reviews-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 '{
  "profileUrls": [
    "https://clutch.co/profile/wedowebapps"
  ],
  "maxReviews": 100,
  "maxConcurrency": 2
}' |
apify call khadinakbar/clutch-reviews-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Clutch Reviews Scraper",
        "description": "Scrape client reviews from any Clutch.co agency profile: overall + quality/schedule/cost/refer ratings, reviewer role, company size, industry, location, project budget, length, services, and full Q&A feedback. Paste profile URLs or slugs. Clears Cloudflare, paginates full history. MCP-ready.",
        "version": "1.0",
        "x-build-id": "t4gCbkMZbUE2sBLVU"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/khadinakbar~clutch-reviews-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-khadinakbar-clutch-reviews-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/khadinakbar~clutch-reviews-scraper/runs": {
            "post": {
                "operationId": "runs-sync-khadinakbar-clutch-reviews-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/khadinakbar~clutch-reviews-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-khadinakbar-clutch-reviews-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": [
                    "profileUrls"
                ],
                "properties": {
                    "profileUrls": {
                        "title": "Clutch profile URLs or slugs",
                        "type": "array",
                        "description": "One or more Clutch.co agency profiles to scrape reviews from. Accepts full URLs (e.g. 'https://clutch.co/profile/wedowebapps') or bare slugs (e.g. 'wedowebapps'). Each profile is paginated automatically to collect its review history. NOT a Clutch category or search URL — for company listings use the clutch-scraper actor instead.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxReviews": {
                        "title": "Max reviews per run",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum total number of reviews to scrape across all profiles in this run (e.g. 100). The run stops and billing ends once this cap is reached. Defaults to 100. This is a hard cost cap — at $0.004 per review, 100 reviews is about $0.40.",
                        "default": 100
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "How many profile pages to load in parallel (e.g. 2). Higher values are faster but raise the chance of Cloudflare blocks. Defaults to 2. Keep at 1-3 for reliability.",
                        "default": 2
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
