# Clutch Scraper (Cheap) (`data_api/clutch-scraper-cheap`) Actor

Clutch.co Scraper pulls company listings and profile data from any Clutch.co category or region, so you can research vendors, compare rates, and build B2B lead lists without clicking through pages manually.

- **URL**: https://apify.com/data\_api/clutch-scraper-cheap.md
- **Developed by:** [Data API](https://apify.com/data_api) (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 $3.99 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Clutch Company Scraper

![Clutch Company Scraper](cover.jpg)

Clutch is where buyers go to vet agencies and dev shops, but the site makes you click through page after page to compare ratings, rates, and team sizes. This scraper does that reading for you. Hand it a category listing or a single company profile and it returns one tidy row per company: name, Clutch rating, review count, hourly rate, minimum budget, office location, the services they focus on, and a link straight to their profile. Point it at one URL or a whole batch.

### What you get

Every company comes back as one row with the same shape, so the data drops cleanly into a sheet or database. Fields a listing page fills in:

- **Identity** — `companyName`, `clutchProfileId`, `profileLink`, `logoLink`, `verificationStatus`
- **Reputation** — `ratingScore`, `reviewsTotal`, `listingRank`
- **Commercials** — `rateRange`, `minBudget`, `teamSize`
- **Profile** — `officeLocation`, `serviceFocus`, `companySummary`

Feed it a `/profile/` URL instead and the row goes deeper, adding `avgBudget` and a `portfolioItems` list of sample work. Each row also carries `recordType`, `requestUrl`, `collectedAt`, and `errorMessage` so you always know where a row came from and whether it succeeded.

### Quick start

1. Click **Try for free** and open the input form.
2. Paste one or more Clutch URLs into **Clutch URLs** — category listings or company profiles, mix and match.
3. Set a **Results limit** to control how many companies come back from each listing.
4. Press **Start**, then download the data as JSON, CSV, Excel, or XML when the run finishes.

![How it works](how-it-works.jpg)

### Use cases

- **Vendor shortlists** — pull a whole category into a spreadsheet and sort by rating, rate, or budget instead of clicking through pages
- **Competitive tracking** — watch how a rival agency's rating and review count move over time
- **B2B prospecting** — gather IT and marketing service providers in a region for outreach lists
- **Pricing research** — see the going hourly rates and project minimums for a specialty or location
- **Market mapping** — count and group providers by service focus to size up a niche

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `targetUrls` | array of strings | Yes | Clutch listing or company-profile URLs. The scraper detects listing vs. profile pages automatically. |
| `resultsLimit` | integer | No | Cap on how many companies to return per listing URL. Default `30`. |
| `timeoutSeconds` | integer | No | Seconds to wait on each request before giving up. Default `45`; raise it on slower connections. |

#### Example input

```json
{
    "targetUrls": [
        "https://clutch.co/developers/laravel/us/new-york",
        "https://clutch.co/profile/netguru"
    ],
    "resultsLimit": 30,
    "timeoutSeconds": 45
}
````

### Output

Each company becomes one record in the dataset. Listing pages return the core fields; profile URLs add `avgBudget` and `portfolioItems`. Values that aren't on the page come back as `null` so your columns stay consistent.

#### Example output

```json
{
    "companyName": "Netguru",
    "clutchProfileId": "40190",
    "listingRank": 3,
    "profileLink": "https://clutch.co/profile/netguru",
    "logoLink": "https://img.shgstatic.com/clutch-static-prod/image/scale/200x200/logos/2694e4ada802ba2c0b818178b65bca38.png",
    "ratingScore": 4.8,
    "reviewsTotal": 55,
    "verificationStatus": "Verified",
    "officeLocation": "New York, NY",
    "minBudget": "$50,000+",
    "avgBudget": "$200,000 - $999,999",
    "rateRange": "$50 - $99 / hr",
    "teamSize": "250 - 999",
    "serviceFocus": ["Web Development", "Mobile App Development", "UX/UI Design"],
    "companySummary": "Netguru builds digital products for startups and enterprise clients across web and mobile.",
    "portfolioItems": [
        {"portfolioTitle": "E-commerce Platform Rebuild", "portfolioImageUrl": "https://img.shgstatic.com/..."}
    ],
    "recordType": "profile",
    "requestUrl": "https://clutch.co/profile/netguru",
    "collectedAt": "2026-06-29T10:00:00+00:00",
    "errorMessage": null
}
```

#### Output fields

| Field | Type | Description |
|-------|------|-------------|
| `companyName` | string | Name of the company as it appears on Clutch |
| `clutchProfileId` | string | Internal Clutch identifier for the company |
| `listingRank` | integer | Position the company held on the listing page |
| `profileLink` | string | Canonical URL of the company's Clutch profile |
| `logoLink` | string | URL of the company logo image |
| `ratingScore` | number | Average Clutch review score on a five-point scale |
| `reviewsTotal` | integer | Number of client reviews counted on Clutch |
| `verificationStatus` | string | Verification badge text, when present |
| `officeLocation` | string | City and region of the company headquarters |
| `minBudget` | string | Smallest project size the company will take on |
| `avgBudget` | string | Typical project value from a profile's pricing snapshot |
| `rateRange` | string | Stated band for the company's hourly billing |
| `teamSize` | string | Reported headcount range |
| `serviceFocus` | array of strings | Service or technology areas the company concentrates on |
| `companySummary` | string | Short description or tagline from the company page |
| `portfolioItems` | array of objects | Sample work from a profile, each with a title and image link |
| `recordType` | string | Whether the row came from a listing or a single profile |
| `requestUrl` | string | The Clutch URL this row was collected from |
| `collectedAt` | string | ISO 8601 timestamp of when the row was captured |
| `errorMessage` | string | Reason a URL failed; `null` on success |

### Tips for best results

- **Start with a small `resultsLimit`.** Run 10–20 companies first to confirm the output fits your pipeline, then raise the cap for the full pull.
- **Mix listing and profile URLs freely.** Listings are faster for breadth; profile URLs give you `avgBudget` and portfolio samples when you need depth on a single company.
- **Raise `timeoutSeconds` to ~60** if you see repeated timeout errors on large category pages.
- **Expect blanks on some fields.** Companies that don't publish a rate or budget come back with `null` there — that's a gap in the source, not a scraper error.
- **A failed URL doesn't stop the run.** Each bad URL is logged with an `errorMessage` row and the scraper moves on to the next one.

### How can I use Clutch company data?

**How can I use the Clutch Company Scraper to build a vendor shortlist?**
Paste the listing URL for your category and region — say `clutch.co/developers/laravel/us/new-york` — and the scraper returns every company on the page with its rating, review count, hourly rate, and minimum budget. Sort the rows in a sheet to shortlist the firms that fit your budget and quality bar in minutes instead of clicking through page after page.

**How can I track competitor agencies on Clutch over time?**
Save the profile URLs of the agencies you watch and run them on a schedule. Each pass records `ratingScore`, `reviewsTotal`, `rateRange`, and `teamSize`, so you can chart how a competitor's reputation and pricing shift month to month.

**How can I pull Clutch data for B2B outreach and lead lists?**
Feed in the listing URLs for the service categories you sell into. The scraper gives you company names, locations, service focus, and profile links — a clean base for building targeted outreach lists of agencies and providers in your space.

### Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses or private contact information. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### Support

Questions, feature requests, or a field you'd like added? Reach out at <data.apify@proton.me> and we'll get back to you.

# Actor input Schema

## `targetUrls` (type: `array`):

Paste any number of Clutch listing or company-profile pages. Category listings read like clutch.co/developers/laravel; individual profiles read like clutch.co/profile/company-name. The scraper figures out which is which on its own.

## `resultsLimit` (type: `integer`):

Cap on how many companies to pull back from each listing URL. Keep it low for quick test runs, then raise it once you are happy with the output.

## `timeoutSeconds` (type: `integer`):

How long to wait on each page request before giving up. Bump it up if you hit frequent timeout errors on slower connections.

## Actor input object example

```json
{
  "targetUrls": [
    "https://clutch.co/developers/laravel/us/new-york",
    "https://clutch.co/profile/netguru"
  ],
  "resultsLimit": 30,
  "timeoutSeconds": 45
}
```

# 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 = {
    "targetUrls": [
        "https://clutch.co/web-developers"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_api/clutch-scraper-cheap").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 = { "targetUrls": ["https://clutch.co/web-developers"] }

# Run the Actor and wait for it to finish
run = client.actor("data_api/clutch-scraper-cheap").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 '{
  "targetUrls": [
    "https://clutch.co/web-developers"
  ]
}' |
apify call data_api/clutch-scraper-cheap --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Clutch Scraper (Cheap)",
        "description": "Clutch.co Scraper pulls company listings and profile data from any Clutch.co category or region, so you can research vendors, compare rates, and build B2B lead lists without clicking through pages manually.",
        "version": "0.0",
        "x-build-id": "6KsR1Vg4rENpCgUHW"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/data_api~clutch-scraper-cheap/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-data_api-clutch-scraper-cheap",
                "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/data_api~clutch-scraper-cheap/runs": {
            "post": {
                "operationId": "runs-sync-data_api-clutch-scraper-cheap",
                "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/data_api~clutch-scraper-cheap/run-sync": {
            "post": {
                "operationId": "run-sync-data_api-clutch-scraper-cheap",
                "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": [
                    "targetUrls"
                ],
                "properties": {
                    "targetUrls": {
                        "title": "Clutch URLs",
                        "type": "array",
                        "description": "Paste any number of Clutch listing or company-profile pages. Category listings read like clutch.co/developers/laravel; individual profiles read like clutch.co/profile/company-name. The scraper figures out which is which on its own.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "resultsLimit": {
                        "title": "Results limit",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Cap on how many companies to pull back from each listing URL. Keep it low for quick test runs, then raise it once you are happy with the output.",
                        "default": 30
                    },
                    "timeoutSeconds": {
                        "title": "Timeout (seconds)",
                        "minimum": 5,
                        "maximum": 120,
                        "type": "integer",
                        "description": "How long to wait on each page request before giving up. Bump it up if you hit frequent timeout errors on slower connections.",
                        "default": 45
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
