Clutch Scraper: Companies, Ratings, Reviews & Pricing avatar

Clutch Scraper: Companies, Ratings, Reviews & Pricing

Pricing

from $1.00 / 1,000 company results

Go to Apify Store
Clutch Scraper: Companies, Ratings, Reviews & Pricing

Clutch Scraper: Companies, Ratings, Reviews & Pricing

Scrape Clutch company directories and profiles. Get names, ratings, review counts, hourly rate, min project size, employees, location, services, full reviews with reviewer details and per-criterion scores. Search and URL mode, 40+ fields per company.

Pricing

from $1.00 / 1,000 company results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

2 days ago

Last modified

Share

Extract structured company data from Clutch in minutes. This scraper covers any Clutch directory, from web developers and SEO firms to marketing agencies and app developers, and returns 40+ fields per company: ratings, review counts, hourly rate, minimum project size, employee range, location, services, and the full review list with reviewer details and per-criterion scores. It supports both filter search and pasted URLs, and runs on every Apify plan with the default settings.

Why this scraper?

  • Any Clutch directory in one actor: pass any directory slug (web-developers, seo-firms, digital-marketing-agencies, app-developers, ecommerce, and more).
  • 40+ fields per company, including rating, review count, hourly rate, minimum project size, employee range, location, services breakdown, founding year, and full contact details.
  • Deep reviews: each review carries the quote, date, per-criterion scores (Quality, Schedule, Cost, Willing to Refer), the reviewer's role, industry, location and company size, project size and length, and the full background, objective, solution and results write-up.
  • Two ways to start: pick filters (directory, location, company size, service line, sort, minimum rating and reviews) or paste any Clutch directory URL.
  • Cost-efficient: keeps per-record cost low.
  • Results are de-duplicated by company ID, so you never get the same company twice.
  • Walks the whole catalogue by default. maxPages defaults to 0 (unlimited) — the run walks every result page per directory/URL, stopping on its own when the site runs out of results or a page repeats companies already seen this walk. There is no artificial page-number ceiling; the only cap you need is maxListings.
  • maxListings is the sole cap on volume (default 20, so a first run is small and fast; set 0 for unlimited).
  • Resumable runs. Set resumeFromRunId to a previous run or dataset id to collect only the companies that run doesn't already have (a delta) — combine both datasets for the full set. Long unlimited runs also checkpoint their progress to the key-value store, so an Apify platform migration or a Resurrect of a failed run picks up where it left off instead of starting over.
  • Incremental & dedup mode for recurring monitoring. Turn on incrementalMode to schedule this actor daily/weekly against the same search: it remembers the previous run's companies itself and returns only what changed (changeType: NEW / UPDATED / UNCHANGED / REAPPEARED / EXPIRED), instead of the full result set every time. Off by default — every run behaves exactly as before.

Data you get

Sample shape: values are illustrative placeholders, not from a live company.

FieldExample
id00000
nameSample Agency LLC
clutchUrlhttps://clutch.co/profile/sample-agency
websitehttps://example.com
rating4.8
reviewCount42
minProjectSize$25,000+
hourlyRate$100 - $149 / hr
employeeCount50 - 249
locationNew York, NY
verifiedtrue
services["45% Web Development", "45% Web Design", "10% Branding"]
descriptionSample Agency builds websites and digital products for mid-market clients.
yearFounded2010
contact.address{ "street": "1 Example St", "city": "New York", "region": "NY", "postal_code": "10000", "country": "US" }
contactDetails{ "emails": ["hello@example.com"], "phone_numbers": ["1-000-000-0000"], "social_media": ["https://www.linkedin.com/company/example"] }
detailedRatings{ "Quality": 4.8, "Schedule": 4.7, "Cost": 4.8, "Willing to Refer": 4.9 }
insights{ "industries": { "industries": ["eCommerce", "Financial services"] }, "service_line_reviews": [ ... ] }
reviews[{ "quote": "Great team to work with.", "rating": 5.0, "reviewer": { ... }, "projectSize": "$10,000 to $49,999" }]
sourceUrlhttps://clutch.co/web-developers

How to use

Basic search (web developers worldwide):

{
"mode": "search",
"directory": "web-developers",
"maxPages": 5,
"maxListings": 100,
"proxy": { "useApifyProxy": true }
}

SEO firms in a location, with full profile details:

{
"mode": "search",
"directory": "seo-firms",
"location": "united-states",
"fetchDetails": true,
"maxPages": 3,
"proxy": { "useApifyProxy": true }
}

Web developers filtered by company size, service line, sort, rating and reviews:

{
"mode": "search",
"directory": "web-developers",
"agencySize": "50_-_249",
"relatedServices": "field_pp_sl_ecommerce",
"sortBy": "review_rating",
"minRating": 4,
"minReviews": 5,
"maxListings": 200,
"proxy": { "useApifyProxy": true }
}

URL mode (paste any Clutch directory links):

{
"mode": "url",
"urls": [
"https://clutch.co/web-developers",
"https://clutch.co/digital-marketing-agencies"
],
"maxPages": 5,
"proxy": { "useApifyProxy": true }
}

Walk the whole catalogue for a directory (no page cap, still bounded by maxListings):

{
"mode": "search",
"directory": "web-developers",
"maxPages": 0,
"maxListings": 0,
"proxy": { "useApifyProxy": true }
}

Resume a previous run, collecting only companies it doesn't already have:

{
"mode": "search",
"directory": "web-developers",
"maxListings": 0,
"resumeFromRunId": "<a previous run id or dataset id from this account>"
}

Recurring monitoring — schedule this daily/weekly and get only what changed:

{
"mode": "search",
"directory": "web-developers",
"location": "united-states",
"maxListings": 0,
"incrementalMode": true
}

Incremental & dedup mode (recurring monitoring)

Turn on incrementalMode to schedule this actor against the SAME search on a recurring basis (Apify Schedules) and get back only what changed since the last run, instead of the full result set every time.

  • How state is tracked. The actor remembers the companies from its last run in a dedicated key-value store, keyed by a State key. By default the state key is derived automatically from your active search filters (directory, location, agencySize, relatedServices, sortBy, minRating, minReviews, urls, fetchDetails) — two different filter setups never share a baseline. Set stateKey explicitly to intentionally share state across setups, or to run several separate monitoring campaigns side by side. maxPages/maxListings are not part of the state key — they bound one run's cost, not what search is being tracked.
  • changeType on every output row: NEW (first time seen), UPDATED (a real field changed — the rank/page position a company happens to appear at does not count, see below), UNCHANGED, REAPPEARED (was gone, is back), or EXPIRED (see below). changedFields, firstSeenAt, and lastSeenAt are also added.
  • emitUnchanged (default off): UNCHANGED companies are suppressed by default (not returned, not billed). Turn on to also get an UNCHANGED row every run.
  • emitExpired (default off): a company that was tracked before but is no longer found gets a changeType: "EXPIRED" row — but only on a run that completes a full, uncapped, non-resumed scan of the tracked search (an interrupted or capped run cannot tell "gone" apart from "not reached yet", so EXPIRED detection is skipped that run and the previous state is kept as-is). Both emitUnchanged and emitExpired return and bill extra rows.
  • Cost: the detail-enrichment surcharge is only ever charged for a company that is both actually re-fetched and actually returned this run — a suppressed UNCHANGED row is never charged, even though its profile page still has to be fetched to compute the comparison.
  • Cap semantics. maxListings bounds how many companies are scanned (deduped, filter-passed), not how many are returned. This keeps a mostly-unchanged monitoring run cheap: once the cap is reached the run stops, even if most of what it scanned was suppressed — it never pages deeper trying to "fill up" the cap with fresh rows.
  • What counts as a real change vs. noise: a company's rank on the directory page (and the page URL that rank implies) shifts every time any other company is added, removed, or reordered above it — unrelated to that company's own data — so it is deliberately excluded from change detection. Everything else (name, tagline, description, website, phone, address, rating, review count, and the full review list) triggers UPDATED normally.

Input parameters

ParameterTypeDefaultDescription
modestringsearchsearch builds a directory URL from filters; url uses pasted links.
directorystringweb-developersAny Clutch directory slug, for example seo-firms or app-developers.
locationstring(empty)Location slug, for example united-states or london.
agencySizestring(empty)Company-size filter value, for example 50_-_249.
relatedServicesstring(empty)Service-line filter value, for example field_pp_sl_ecommerce.
sortBystringdefaultdefault, review_rating, reviews, or date.
minRatinginteger(none)Keep companies with at least this overall rating.
minReviewsinteger(none)Keep companies with at least this many reviews.
urlsarray(example)Clutch directory URLs for URL mode.
fetchDetailsbooleantrueOpen each profile for founding year, languages, full reviews and rating breakdown.
maxPagesinteger0Optional bound on result pages walked per directory/URL. 0 = walk the whole catalogue: stops on its own when the site runs out of results or a page repeats companies already seen this walk — never an artificial page cap. Does not cap company count; use maxListings for that.
maxListingsinteger20The sole cap on total companies collected. Stop after this many records (0 = unlimited).
resumeFromRunIdstring(empty)Optional id of a previous run (or dataset) of this actor. Companies already in that dataset are skipped, so this run returns only new companies (a delta).
incrementalModebooleanfalseTurn on for recurring/scheduled monitoring: tags every company NEW/UPDATED/UNCHANGED/REAPPEARED/EXPIRED against the previous run's state for the same search. See "Incremental & dedup mode" above.
stateKeystring(empty)Only used when incrementalMode is on. Leave empty to auto-derive the tracked scope from your search filters. Set to intentionally share state across setups or run separate monitoring campaigns.
emitUnchangedbooleanfalseOnly used when incrementalMode is on. Also return (and bill) UNCHANGED companies every run.
emitExpiredbooleanfalseOnly used when incrementalMode is on. Also return (and bill) an EXPIRED row for companies no longer found, on a complete uncapped non-resumed scan.
proxyobjectApify proxyConnection settings. The default works on all plans.
mcpConnectorsarray(empty)Optional MCP connectors to pipe a copy of each record into (Notion, Linear, Airtable, Apify). Authorize one under Apify → Settings → Integrations, then pick it here. Leave empty to skip.
notionParentPageUrlstring(empty)Notion only: URL (or id) of the page under which records are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsinteger50Cap on items written to each connector per run. Does not affect the dataset.

Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape - the Apify dataset is never changed.

What gets written to the connector: a condensed, human-readable summary of each record - not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to the page where items should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

Output example

Sample shape: values are illustrative placeholders, not from a live company.

{
"id": "00000",
"name": "Sample Agency LLC",
"slug": "sample-agency",
"clutchUrl": "https://clutch.co/profile/sample-agency",
"website": "https://example.com",
"logo": "https://img.shgstatic.com/clutch-static-prod/image/scale/50x50/logos/00000.jpg",
"rating": 4.8,
"reviewCount": 42,
"minProjectSize": "$25,000+",
"hourlyRate": "$100 - $149 / hr",
"employeeCount": "50 - 249",
"location": "New York, NY",
"verified": true,
"services": ["45% Web Development", "45% Web Design", "10% Branding"],
"description": "Sample Agency builds websites and digital products for mid-market clients.",
"yearFounded": 2010,
"contact": {
"phone": "1-000-000-0000",
"location": "New York, NY",
"address": {
"street": "1 Example St",
"city": "New York",
"region": "NY",
"postal_code": "10000",
"country": "US"
}
},
"contactDetails": {
"emails": ["hello@example.com"],
"phone_numbers": ["1-000-000-0000"],
"social_media": ["https://www.linkedin.com/company/example"]
},
"detailedRatings": { "Quality": 4.8, "Schedule": 4.7, "Cost": 4.8, "Willing to Refer": 4.9 },
"insights": {
"industries": { "industries": ["eCommerce", "Financial services"] },
"service_line_reviews": [
{ "service_line": "Web Development", "reviews_count": 17, "price_range": "0" }
]
},
"reviews": [
{
"quote": "Great team to work with.",
"date": "Jan 1, 2026",
"rating": 5.0,
"summary": "Sample Agency built a new marketing website.",
"projectSize": "$10,000 to $49,999",
"projectLength": "Jan. - June 2026",
"services": ["Web Design", "Web Development"],
"detailedRatings": { "Quality": 5.0, "Schedule": 5.0, "Cost": 5.0, "Willing to Refer": 5.0 },
"reviewer": {
"position": "Director of Marketing, Sample Client Inc",
"verified": true,
"industry": "Financial services",
"location": "Lynchburg, Virginia",
"clientSize": "11-50 Employees"
}
}
],
"sourceUrl": "https://clutch.co/web-developers"
}

Plan requirement

This actor runs on every Apify plan with the default settings, including the free plan, with no extra setup. For very large or repeated jobs you can switch the Proxy field to a different option for wider coverage.

Connection settings

The connection works out of the box, so you rarely need to touch it:

  • Default works on all plans. Leave the Proxy field at its default and the actor runs on the free plan with no extra setup.
  • Free-plan safe. If you select an option your plan does not include, the run automatically continues on a working connection instead of failing.
  • Hands-off reliability. The actor handles transient connection issues for you and keeps the run going.