# Clutch.co Scraper - Listings Ready to Filter (`adm2/clutch-company-database`) Actor

Filter 257,808 Clutch.co companies without supplying URLs. Country, city, 157 services, 42 industries, team size, hourly rate, minimum project size, rating and more. Website on 257,804 records, phone on 172,085.

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

## Pricing

from $2.00 / 1,000 companies

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

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

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

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

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

# README

**Get companies from Clutch.co without supplying a single URL.** Filter 257,808
companies by country, city, services, industry, team size, hourly rate, minimum
project size, rating and more. Results arrive in seconds because this Actor does
not crawl Clutch while you wait: the whole database ships inside it, already
collected and already indexed.

*Unofficial. Not affiliated with, endorsed by, or connected to Clutch.co. Clutch
is a trademark of its respective owner.*

### How it works

![How the Clutch.co Scraper works](https://raw.githubusercontent.com/TitanGlobalTechnologies/apify-assets/master/clutch-how-it-works.png)

You do not supply URLs. You describe the companies you want, and the Actor
returns them from a database of 257,808 Clutch companies collected in advance.

That is useful when you already know which companies you want, and more useful
when the question is "who is out there?"

### Field coverage, measured on all 257,808 records

Not estimated and not sampled. Counted across the entire database, and counted
strictly: a field only counts as present if it holds a real value, so empty
strings and placeholders like `00000` are reported as missing rather than
quietly inflating the numbers.

| Field | Companies | Coverage |
|---|---:|---:|
| Company name | 257,808 | 100% |
| **Company website** | **257,804** | **99.99%** |
| Services offered, with percentages | 257,808 | 100% |
| Team size | 257,808 | 100% |
| Description | 257,577 | 99.9% |
| Clutch category tags | 255,777 | 99.2% |
| Year founded | 248,900 | 96.5% |
| City and country | 177,202 | 68.7% |
| Full street address | 176,912 | 68.6% |
| **Telephone** | **172,085** | **66.7%** |
| Logo | 170,871 | 66.3% |
| Hourly rate band | 170,078 | 66.0% |
| Minimum project size | 167,971 | 65.2% |
| Focus areas | 159,297 | 61.8% |
| Industries served | 107,081 | 41.5% |
| Client size mix | 95,891 | 37.2% |
| Rating and review count | 51,039 | 19.8% |
| Social profiles | 5,319 | 2.1% |

Two rows are worth a note.

**Where the website comes from.** Clutch's listing pages expose a company's own
website for roughly 1% of records. The rest are only reachable from the
individual company profile, which is where this data was collected.

**Rating coverage is 19.8%.** About one company in five on Clutch has been
reviewed; the rest have no rating to report. Every filter states its own
coverage in its description, so you can see what a filter excludes before you
run it.

### What you can filter on

- **Location**: 173 countries, 16,989 cities
- **Services**: all 157 of Clutch's service categories, with a minimum
  percentage so you can separate a specialist from a generalist who merely lists
  the service
- **Industries**: all 42
- **Client size**: small business, midmarket, enterprise
- **Team size**: freelancer through 10,000+
- **Hourly rate**: under $25 through $300+
- **Minimum project size**: $1,000 through $250,000+
- **Year founded**: any range
- **Reputation**: minimum rating, minimum review count, Clutch Plus members only
- **Contactability**: only companies with a website, only companies with a phone
- **Free text** across company names and descriptions

Each returned company also carries its **focus areas** (1,089 distinct
specialisations such as WordPress CMS, Local search or Facebook Advertising),
its service mix and industry mix with percentages, and its client-size split.

### How to use it

1. Open the Input tab.
2. Set the filters you care about and leave the rest empty. Empty means "any".
3. Set **Maximum companies to return**. This is also your cost control, because
   you are charged per company returned.
4. Click Start. Results appear in seconds.
5. Download as JSON, CSV, Excel or HTML, or pull them through the Apify API.

The default input returns 50 US companies rated 4.5 or higher that have both a
website and a phone number, so you can see the shape of the data before
committing to anything larger.

### Output

One row per company. A real record, unedited:

```json
{
  "name": "Thrive Internet Marketing Agency",
  "website": "https://thriveagency.com",
  "telephone": "817-533-8211",
  "city": "Arlington, United States",
  "country": "US",
  "street": "4604 Park Springs Blvd, #140",
  "teamSize": "50 - 249",
  "hourlyRate": "$100 - $149 / hr",
  "minProjectSize": "$1,000+",
  "yearFounded": 2005,
  "rating": 4.6,
  "reviewCount": 108,
  "services": [
    { "name": "Search Engine Optimization", "percent": 70 },
    { "name": "Pay Per Click", "percent": 10 },
    { "name": "Social Media Marketing", "percent": 10 }
  ],
  "industries": [
    { "name": "Business services", "percent": 10 },
    { "name": "Consumer products & services", "percent": 10 }
  ],
  "focusAreas": [
    { "group": "SEO Focus", "name": "Local search", "percent": 30 },
    { "group": "SEO Focus", "name": "On site optimization", "percent": 25 }
  ],
  "clutchProfile": "https://clutch.co/profile/thrive-internet-marketing-agency",
  "scrapedAt": "2026-07-28T16:09:23+00:00"
}
```

### Data quality

The database was collected once, in full, and is served from that snapshot. Two
consequences, both worth stating plainly.

**In your favour:** results are instant, runs do not time out, and the same
query returns the same answer every time. Nothing breaks because Clutch changed
a CSS selector this morning.

**Against:** it is a point-in-time snapshot, not a live read. Companies that
joined Clutch after collection will not appear, and a company that changed its
phone number last week will still show the old one. Every row carries a
`scrapedAt` timestamp recording when **that page was fetched**, so you can judge
freshness per record rather than taking a blanket claim on trust.

Everything shipped is what Clutch published. Where Clutch's own data is
imperfect, it is passed through rather than quietly corrected. There are four
exceptions, and all four exist so that a filter cannot promise something it
cannot deliver:

- **Placeholders are treated as missing, not present.** A phone number of
  `0000000000`, `-`, `+44` or `5555555555` is not a phone number, so "must have
  a phone number" will not return it.
- **HTML entities are decoded.** Clutch stores `Smith &amp; Jones`; you get
  `Smith & Jones`.
- **Pasted HTML is stripped from descriptions.** A few hundred companies pasted
  markup into Clutch's description box. You get the readable text.
- **Where Clutch publishes a website twice and the two disagree**, you get the
  link its own "Visit website" button uses.

#### Opening the phone column in Excel

Phone numbers are stored in international format, so most of them begin with a
`+`. That is the correct value and it is what the JSON and the API return.

Excel and Google Sheets treat any cell beginning with `+`, `=`, `-` or `@` as a
formula, so **the phone column can show errors if you open the CSV directly**.
It is a spreadsheet behaviour, not missing data. Either import the file with
that column set to Text, or use the JSON output. We would rather hand you the
real number than damage it to suit one program.

### Pricing

You are charged per company returned. That is the only charge. There is no extra
fee for the description, the services breakdown, the phone number, the address
or anything else in the table above. Everything is included in the single
per-result price.

Because nothing is crawled at run time, there are no proxy costs, no retries and
no half-finished runs to pay for. Use **Maximum companies to return** to cap the
size of a run, and the max cost per run setting if you want a hard ceiling.

### FAQ

**Is this legal?** The Actor returns business information Clutch publishes
publicly: company names, locations, services, rates and business contact
details. It contains no personal data and no review text. You are responsible
for how you use it, including compliance with GDPR, CCPA and any marketing
regulations that apply to you.

**Why do so many companies have no rating?** Because they have never been
reviewed on Clutch. That is roughly 80% of them. See the coverage table.

**Can I get email addresses?** No. Clutch does not publish them.

**Can I get the review text?** No. Review prose is copyrighted by the people who
wrote it and is deliberately excluded.

**My phone column shows `#NAME?` in Excel.** International numbers start with a
`+`, and Excel reads a leading `+` as a formula. Import the column as Text, or
use the JSON output. The stored value is correct.

**How fresh is the data?** Check the `scrapedAt` field on any row.

**Something looks wrong.** Open an issue on the Issues tab. Issues are read and
answered.

# Actor input Schema

## `countries` (type: `array`):

Two-letter country codes, for example US, GB, IN, CA, AE. Leave empty for every country. Note that 31% of companies do not publish a location on Clutch, and those are excluded whenever you set this filter.

## `cities` (type: `array`):

City names as Clutch writes them, for example "New York", "London", "Dubai". Matches loosely, so "York" also matches "New York". Leave empty for every city.

## `services` (type: `array`):

Return only companies that offer at least one of these services. This is Clutch's own service vocabulary, 157 values.

## `minServicePercent` (type: `integer`):

Only match when the selected service is at least this percentage of the company's work. 0 returns anyone who lists the service at all; 50 returns specialists. Ignored if no service is selected.

## `industries` (type: `array`):

Return only companies with experience in at least one of these industries. Available for 41% of companies, so setting this filter excludes the rest.

## `clientSizes` (type: `array`):

The size of client the company typically works with.

## `teamSizes` (type: `array`):

Number of employees, using Clutch's own bands.

## `hourlyRates` (type: `array`):

Published hourly rate band. 34% of companies do not publish one.

## `minProjectSizes` (type: `array`):

The smallest project the company will take on. 35% of companies do not publish one.

## `foundedFrom` (type: `integer`):

Year the company was founded. Available for 96% of companies.

## `foundedTo` (type: `integer`):

Year the company was founded. Use with the field above to get, for example, only companies founded between 2015 and 2020.

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

Only companies rated at least this highly, out of 5. Important: only 20% of companies on Clutch have any reviews at all, so any rating filter necessarily excludes the other 80%.

## `minReviewCount` (type: `integer`):

Only companies with at least this many reviews. Useful for filtering out companies with a perfect score from a single review.

## `clutchPlusOnly` (type: `boolean`):

Only companies paying for a Clutch Plus membership. These are companies actively investing in being found, which usually means they are actively selling.

## `hasWebsite` (type: `boolean`):

Only companies whose own website address we hold. We have this for 99.9% of the database, taken from the profile pages rather than the listing cards.

## `hasPhone` (type: `boolean`):

Only companies that publish a telephone number. Available for 67% of the database.

## `searchQuery` (type: `string`):

Free text matched against the company name, its Clutch description and its Clutch profile slug. You can paste a company name ("Ignite Visibility"), a slug ("ignite-visibility"), a full Clutch profile URL, or a keyword like "shopify" or "dental".

## `sortBy` (type: `string`):

How to order the results before the limit below is applied.

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

Stop after this many companies. The whole database is 257,808 companies, so set this deliberately. You are charged per company returned.

## Actor input object example

```json
{
  "countries": [
    "US"
  ],
  "minServicePercent": 0,
  "minRating": "4.5",
  "clutchPlusOnly": false,
  "hasWebsite": true,
  "hasPhone": true,
  "sortBy": "reviewCount",
  "maxItems": 50
}
```

# Actor output Schema

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

No description

# API

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

## JavaScript example

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

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

// Prepare Actor input
const input = {
    "countries": [
        "US"
    ],
    "minRating": "4.5",
    "hasWebsite": true,
    "hasPhone": true,
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("adm2/clutch-company-database").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 = {
    "countries": ["US"],
    "minRating": "4.5",
    "hasWebsite": True,
    "hasPhone": True,
    "maxItems": 50,
}

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

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

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

```

## CLI example

```bash
echo '{
  "countries": [
    "US"
  ],
  "minRating": "4.5",
  "hasWebsite": true,
  "hasPhone": true,
  "maxItems": 50
}' |
apify call adm2/clutch-company-database --silent --output-dataset

```

## MCP server setup

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

```

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

## OpenAPI specification

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