Clutch Agencies Scraper
Pricing
from $0.77 / 1,000 agency profiles
Clutch Agencies Scraper
Scrape agencies from any public Clutch directory page. Each row has the agency name, profile link, website and location, with the hourly rate band, smallest project size, team size, rating, review count and service lines. $0.80 per 1,000 agencies.
Pricing
from $0.77 / 1,000 agency profiles
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
11
Total users
6
Monthly active users
a day ago
Last modified
Categories
Share
Scrape agencies from a Clutch directory page and get one row per agency: name, profile link, website, where they work, hourly rate band, the smallest project they take, team size, star rating, review count and the service lines they advertise.
It reads the first page of each directory URL and stops there. A category with hundreds of agencies gives you that first page, not the whole category, so plan on one URL per page you actually want.
| Input | Public Clutch directory URLs, up to 10 per run |
| Output | One row per agency: name, profile, website, location, hourly rate, minimum project, team size, rating, review count, services |
| Ceiling | 100 agencies per directory URL, first page only |
| Account needed | None |
| Price | $0.80 per 1,000 agencies on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 6,200 |
🔍 What Clutch Agencies Scraper does
You give it directory pages you copied out of Clutch, like the web developers in Toronto or the SEO firms in Berlin. It reads the cards on that page and turns each one into a row with the numbers buyers actually compare on: the hourly rate band, the minimum project size, how big the team is, the rating and how many reviews sit behind it.
Up to 10 directory URLs per run, up to 100 agencies from each. Anything Clutch does not print on the
card comes back as null rather than a guess, so a missing website is a missing website and not an
empty string you have to second-guess later.
It stays on the directory page. It does not open each agency's profile, so there are no contact details and no review text in the output.
📋 What data you get from each Clutch agency
| What you get | Field |
|---|---|
| The agency's name and its Clutch profile | name, profileUrl |
| Its own website | website |
| Where it works, in Clutch's wording | location |
| Hourly rate band, smallest project, team size | hourlyRate, minimumProjectSize, teamSize |
| Star rating and how many reviews stand behind it | rating, reviewCount |
| The service lines on its card | services |
| Which of your URLs it came from, and when | directoryUrl, scrapedAt |
▶️ How to scrape Clutch agencies
- Open Clutch Agencies Scraper and click Try for free.
- Paste your directory pages into Clutch directory URLs, one per line.
- Set Maximum agencies per directory. Start at 25 to see the shape of the output.
- Click Start.
- Download the dataset as JSON, CSV or Excel, or read it from the Apify API.
Run it with Clutch directory URLs empty and you get one labelled sample row, which is not charged.
💰 How much does it cost to scrape Clutch agencies?
$0.80 per 1,000 agencies on the Free plan. Paid plans pay a little less: $0.79 on Starter, $0.78 on Scale and $0.77 on Business. On the free plan, the $5 Apify gives you each month covers about 6,200 agencies.
You pay per agency row. The sample row is not charged, diagnostic rows are not charged, and the same agency appearing twice on a page is dropped before it becomes a row.
📥 What you give it
{"directoryUrls": ["https://clutch.co/ca/web-developers/toronto"],"maxAgenciesPerDirectory": 25}
| Field | Default | What it is |
|---|---|---|
directoryUrls | empty | Public Clutch directory URLs, copied from the address bar. Up to 10. The input box starts with a Toronto example in it, which is a suggestion and not a default. |
maxAgenciesPerDirectory | 25 | How many agencies to take from each URL. Up to 100. |
enableResidentialFallback | false | Off. When a directory page cannot be read on the first try, this allows one more attempt, once per run. The field name is historical; turning it on adds that one attempt and does not change the price. |
proxyConfiguration | none | Optional. Servers of your own are used exactly as given. |
📤 What you get back
A real row from a run in September 2026:
{"ok": true,"name": "True Market","profileUrl": "https://clutch.co/profile/true-market","website": null,"rating": 4.9,"reviewCount": 26,"minimumProjectSize": "$5,000+","hourlyRate": "$100 - $149 / hr","teamSize": "10 - 49","location": "Serves Toronto, Canada","services": ["Web Development", "Web Design", "Branding", "Graphic Design", "E-Commerce Development"],"directoryUrl": "https://clutch.co/ca/web-developers/toronto","scrapedAt": "2026-09-06T17:08:53.875Z"}
| Field | How to read it |
|---|---|
profileUrl | The agency's Clutch profile, with tracking query strings stripped off. Use it as your dedupe key. |
website | The agency's own site, unwrapped from Clutch's redirect link. null when the card does not show one. |
hourlyRate, minimumProjectSize, teamSize | Kept as the bands Clutch prints, text like $100 - $149 / hr, not parsed into numbers. |
location | Clutch's own wording, which is often "Serves |
directoryUrl | Which of your URLs this row came from, so you can join the results back to your list. |
🧾 Reading the output
Three kinds of row can land in your dataset.
| Row | How to spot it | Charged |
|---|---|---|
| An agency | ok: true and a name | yes |
| The sample row | _sample: true | no |
| A diagnostic | ok: false and _diagnostic: true | no |
Filter on _sample and _diagnostic being absent. The sample row also carries ok: true, so a
filter on that alone keeps it.
A diagnostic row carries a status telling you what happened to that one URL:
status | What it means |
|---|---|
BAD_INPUT | That URL is not a Clutch directory page. The other URLs still ran. |
NO_RESULTS | The page answered but no agency cards were found on it. The row carries a bodySnippet so you can see what came back instead. |
NOT_SERVED | This agency was not served this run. Re-run it later. Until 12 October 2026 this code was called BLOCKED. |
RATE_LIMITED | Too many requests too quickly. Give it a few minutes. |
NETWORK | Clutch was unreachable or answered badly. Re-run it. |
TIME_LIMIT | The run got close to its time limit and stopped on its own. The agencies delivered before that are complete and charged, and directoriesNotFinished lists the URLs it did not get through. Give the run more time, or send fewer directory URLs. |
One bad URL never stops the others, and a diagnostic row never fails the run, except one: when the time limit
stopped the run before any agency came back, the run ends as failed, with a TIME_LIMIT row saying so.
💡 What people use it for
- Shortlisting agencies in one city and one service line, with the rate band already attached so you can drop the ones out of budget before you write anything.
- Comparing what the same kind of agency charges in three different cities, by running three directory URLs in one go.
- Shortlisting by evidence rather than by page position: a rating is easy to look good on when only
four people reviewed you, and
reviewCountis right there beside it. - Keeping a monthly snapshot of a category to see which agencies appeared, moved or vanished.
profileUrlis stable, so comparing two runs is a straight join.
From a directory page to a shortlist, in three steps:
- Run this on the directory pages you want and leave out the rows with no
website. - Sort by
hourlyRateto start with the agencies inside your budget. - Open each agency's
websitefor the contact page it publishes before you write.
🚧 What it does not do
- First page only. It does not follow Clutch's pagination, so 100 is a cap on what page one can give you, not a promise of 100 rows.
- Directory cards only. No agency profile pages, which means no contact details, no email, no phone and no review text. The agencies' own sites may carry them, which is what the steps above are for.
- More than 10 URLs and the rest are dropped, without a warning row. Split a longer list across runs.
- The rate and size fields stay as text bands, because that is how Clutch publishes them. Parsing
$100 - $149 / hrinto numbers is your side. - Some cards carry no location, and those come back
null. Clutch's own layout decides this, not the actor. - No case studies or portfolio items.
- Rows are a snapshot. Ratings and review counts move, and
scrapedAtrecords when the page was read. - It is not an official Clutch tool. Dami's Studio is independent and is not affiliated with or endorsed by Clutch, or by any other company named on this page.
🧭 Which lead scraper do you need?
| If you want | Use |
|---|---|
| Agencies from a Clutch directory page | This one |
| US industrial suppliers with phone, size and certifications | Thomasnet Suppliers Scraper |
| Size and industry from a company's LinkedIn page | LinkedIn Companies Scraper |
| Newly registered UK companies from Companies House | Companies House New Companies Scraper |
❓ Questions people ask
Do I need a Clutch account?
No. Everything here comes off public directory pages.
Can I get an agency's email from Clutch?
Not from this actor. It stays on the directory page, and Clutch keeps contact details on the
profile. Many agencies put one on their own website, and the website column gets you there.
Why did I get fewer agencies than my maximum?
The first page of that directory had fewer cards than you asked for. You are charged for what arrived.
Can I scrape a whole Clutch category?
Not in one go. Clutch paginates and this reads page one, so you would need the pages you want as separate URLs if Clutch gives them distinct addresses.
Can I call it from code or connect it to an AI assistant?
Yes. The API tab has ready-made
code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/clutch-agencies-scraper. Either way
the run happens on your Apify account at the same price.
Is scraping Clutch legal?
These are public directory listings, read the way a signed-out visitor sees them: no account, no profile pages, nothing private. They still describe real businesses and sometimes real people, which GDPR and similar laws cover, so have a reason for collecting it. Clutch's own terms still apply to what you do with it. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Send the directory URL and the run ID. If you got a
diagnostic row, its status and bodySnippet usually explain it on their own.
