Clutch.co Agency API
A company data API for Clutch.co, the B2B directory of agencies and service providers. Walk any category directory, pull full company profiles, and paginate every verified client review, returned as JSON plus LLM-ready markdown. Build a marketing agency database, shortlist B2B service providers, or feed a CRM or vector store. Pay per row, MCP-ready.
MEDIAN LAGon demand
PARAMETERS9
TOTAL USERS2
MONTHLY ACTIVE2
TOTAL RUNS166
SUCCESS (30D)100.0%
RATINGno ratings yet
LAST MODIFIED2026-09-16
PUBLISHED2026-08
Input parameters
| PARAMETER | TYPE | REQ | DEFAULT | DESCRIPTION |
|---|---|---|---|---|
| mode | string | yes | directory | What to collect. 'directory' walks a Clutch category or location page into one row per company; 'profiles' collects full company profiles with reviews; 'search' runs a keyword query and then collects the matching companies. |
| directoryUrls | string[] | no | — | Clutch category or location pages, for example https://clutch.co/web-developers or https://clutch.co/us/agencies/digital-marketing/chicago. |
| maxPagesPerDirectory | integer | no | 1 | How many result pages to read per directory URL. Each page carries about 70 to 90 companies. — drives your bill |
| profileUrls | string[] | no | — | Clutch company profile URLs, for example https://clutch.co/profile/ignite-visibility. A bare slug also works. |
| searchQueries | string[] | no | — | Free-text queries run against Clutch search, for example 'shopify development'. |
| includeReviews | boolean | no | True | Return every verified client review as its own row, with project size, sub-ratings, reviewer role, and summaries. |
| maxReviewsPerProfile | integer | no | 100 | Upper bound on reviews collected per company. The first profile page already carries about 40 reviews at no extra cost. — drives your bill |
| outputFormats | string[] | no | json, markdown | JSON gives structured fields. Markdown adds Clutch's own LLM-ready rendering at no extra cost. HTML adds the raw page source for one more request per company. |
| maxItems | integer | no | 1000 | Overall cap on rows returned by the run, across listings, profiles, and reviews. Use it as a hard spend ceiling. — drives your bill |
Worked examples
{
"mode": "directory",
"directoryUrls": [
"https://clutch.co/web-developers"
],
"maxPagesPerDirectory": 1,
"maxItems": 50
}
{
"mode": "profiles",
"profileUrls": [
"ignite-visibility"
],
"includeReviews": true,
"outputFormats": [
"json",
"markdown"
]
}
Code
curl
curl -X POST "https://api.apify.com/v2/acts/johnvc~clutch-agency-api/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode": "directory", "directoryUrls": ["https://clutch.co/web-developers"], "maxItems": 50}'
Python
from apify_client import ApifyClient
client = ApifyClient("APIFY_TOKEN")
run = client.actor("johnvc/clutch-agency-api").call(
run_input={'mode': 'directory', 'directoryUrls': ['https://clutch.co/web-developers'], 'maxItems': 50}
)
for item in client.dataset(run.default_dataset_id).iterate_items():
print(item)