Clutch Scraper
Pricing
from $3.00 / 1,000 results
Clutch Scraper
Scrape B2B service providers from Clutch: agency name, rating, review count, hourly rate, minimum project size, team size, location, phone and service breakdown, with sponsored placements flagged.
Pricing
from $3.00 / 1,000 results
Rating
0.0
(0)
Developer
Juan ignacio Veltri
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Clutch Scraper — B2B agencies with rates, team size and sponsored placements flagged
Scrape service providers from any Clutch directory: agency name, rating, review count, hourly rate, minimum project size, team size, city, phone, and the percentage breakdown of what each agency actually does.
The field nobody else returns
Half the providers at the top of a Clutch page are paid placements. Every row here carries
isSponsored, so you can tell a ranking from an advert. On the page used to build this Actor, 25 of
49 listings were sponsored.
Without that flag, a Clutch export reads like a merit ranking when the top of it is inventory.
Quick start
{ "startUrls": ["https://clutch.co/agencies/digital-marketing"] }
Only agencies that earned their spot:
{"startUrls": ["https://clutch.co/agencies/digital-marketing"],"excludeSponsored": true,"minRating": "4.5","minReviews": 25,"maxPagesPerListing": 10}
Find specialists, not generalists — Clutch publishes each agency's split of expertise:
{"startUrls": ["https://clutch.co/developers"],"serviceKeywords": ["Mobile App Development"],"minReviews": 10}
Filter on Clutch first (by location, budget, service) and paste the resulting URL — the Actor follows that exact list.
Input
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | array | digital marketing agencies | Any Clutch directory listing |
maxPagesPerListing | integer | 3 | ~49 providers per page |
minRating | string | — | e.g. 4.5 |
minReviews | integer | — | Past agencies with a single glowing review |
excludeSponsored | boolean | false | Drop paid placements |
onlyWithPhone | boolean | false | Drop providers with no phone |
locationKeywords | array | — | Match against city or state |
serviceKeywords | array | — | Match against the service breakdown |
maxItems | integer | 200 | Total cap. 0 = no cap |
includeSeen | boolean | true | Off = only providers not seen in previous runs |
Output
{"id": "clutch:25800","url": "https://clutch.co/profile/ignite-visibility","legalName": "Ignite Visibility","rating": 4.8,"reviewsCount": 175,"hourlyRate": "$100 - $149 / hr","minProjectSize": "$1,000+","employeesRange": "250 - 999","isSponsored": true,"rank": 1,"location": { "city": "San Diego", "state": "CA", "country": "US" },"contact": { "name": "Ignite Visibility", "phones": ["6197521955"] },"services": [{ "name": "Search Engine Optimization", "share": 40 },{ "name": "Advertising", "share": 10 },{ "name": "Email Marketing", "share": 10 },{ "name": "Pay Per Click", "share": 10 }],"website": null,"taxId": null}
services shares always add up to 100 — that is Clutch's own allocation of expertise, and it is the
quickest way to tell an agency that does SEO from one that merely lists it.
Why this one holds up
Clutch marks its listings with schema.org microdata — itemprop="ratingValue", priceRange,
telephone, the full postal address. That exists so search engines can read the page, which means
Clutch cannot change it without damaging its own traffic. The core of every row comes from there.
Only three things live outside it, because schema.org has no equivalent: team size, the service breakdown, and whether the placement is paid.
Notes and limits
- Provider websites are not on listing pages. They live on each provider's own profile, which is
a separate request per provider.
websiteis thereforenull— that is what the page publishes, not a gap in the extraction. - The fiscal fields are
null(taxId,activityCode,foundedAt). They belong to the same company schema this Actor shares with tax-registry sources, and a services directory does not publish them. - Clutch is behind Cloudflare. This Actor runs through Apify's unblocking proxy, so you do not configure anything — but it is why runs are slower than a plain HTTP scraper, and why the default rate is conservative.
- Providers with no rating are dropped by
minRating, because claiming they pass a threshold they never published would misreport the filter you asked for.
Pricing
Pay per result. You are charged for providers that actually land in your dataset — filtered out and duplicate rows cost nothing.