Clutch.co Scraper - Agency Ratings, Reviews & Contacts avatar

Clutch.co Scraper - Agency Ratings, Reviews & Contacts

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Clutch.co Scraper - Agency Ratings, Reviews & Contacts

Clutch.co Scraper - Agency Ratings, Reviews & Contacts

Scrape verified agency and software company data from Clutch.co: ratings, pricing, reviews, and contact details across dev, design, marketing, SEO, mobile, and IT services categories.Deliver results straight to Notion, Slack, Airtable, or Sheets via MCP.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Techforce Global

Techforce Global

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Share

Clutch.co Company Scraper & MCP Connector

Pull verified B2B service-provider data straight off Clutch.co — agencies and dev shops across software development, web design, digital marketing, SEO, mobile app development, and IT services. No login, no manual profile-by-profile copy-pasting, no CAPTCHA-solving by hand.

Built for agencies doing competitor research, sales teams prospecting for outsourcing partners, and researchers who need Clutch's ratings, reviews, and contact data as clean, structured records — in minutes, not hours of clicking through listings.

Pick a category, name, or location → get every company's rating, pricing, reviews, and full contact/team profile → deliver it straight into Notion, Slack, Airtable, or your CRM.


⭐ Why This Actor?

  • Three ways in — browse a full category, search by company name, or filter by location; combine name + category for a fallback search-then-browse flow.
  • Deep profile enrichment — optionally visit every company's profile page for overview, about/team, portfolio, offices, verification badges, and full contact details (website, phone, email, LinkedIn, Twitter, Facebook, Instagram).
  • Reviews on demand — pull the first page of reviews by default, or toggle full pagination to capture every review left on a profile.
  • Concurrent enrichment — profile pages are scraped concurrently (5 at a time by default) so enrichment doesn't run one company at a time.
  • Cloudflare-aware — every scrape path detects "Just a moment" interstitials and waits them out, with retry-and-backoff on failed page loads.
  • Never returns messy nulls — every missing field falls back to "N/A" instead of null, so the dataset stays clean and consistent.
  • Deliver anywhere via MCP connectors — push scraped companies straight into Notion, Slack, Airtable, Google Sheets, and more.
  • Export-ready — JSON, CSV, Excel, JSONL, or XML, or direct API integration for your own pipeline.

📝 Use Cases & ROI

Use CaseTime SavedWhat You Get
Outsourcing partner sourcing3–6 hrs/searchEvery agency in a category/location, ranked by rating and hourly rate, ready to shortlist
Competitor benchmarking2–4 hrs/reportPricing, team size, reviews, and positioning for direct competitors
Sales prospecting3–5 hrs/listVerified contact details (email, phone, website, socials) for cold outreach
Reputation & review analysis2–5 hrs/scanFull review history per company for sentiment and win/loss patterns
Market mapping4–8 hrs/buildStructured data to power directories, comparison sites, or internal databases

🚀 How to Use

  1. Open the Actor on Apify.
  2. Pick a Category from the dropdown (e.g. Software Developers, SEO Companies), or leave it blank to scrape all categories.
  3. (Optional) Enter a Filter by Name to search for a specific company by name instead of browsing a category.
  4. (Optional) Enter a Location Filter using Clutch's location slug (e.g. new-york-city, india, united-kingdom).
  5. Set Max Pages and Max Records to control how much of the listing to pull.
  6. Toggle Scrape Profile Pages to enrich each company with full profile data, and Scrape All Reviews to paginate through every review instead of just the first page.
  7. (Optional) Pick an MCP connector to deliver scraped companies into Notion, Slack, Airtable, etc.
  8. Click Run — results stream into the dataset as each company is scraped.
  9. Download as JSON, CSV, Excel, JSONL, or XML — or let the connector push them into your tools automatically.

💡 First time with a connector? Run once with a connector selected — the run log prints the connector's available tool names, so you know what to put in Connector tool name.


🧩 Input Configuration

FieldTypeRequiredDescription
categorySelectOptionalOne of software-developers, web-designers, digital-marketing, seo-companies, mobile-app-developers, it-services. Leave blank to scrape all categories.
filterNameStringOptionalCase-insensitive substring filter. If set with no category/location, searches Clutch directly by name (falling back to a category scrape if the search returns nothing).
locationStringOptionalClutch's URL-based location slug (e.g. new-york-city, india, united-kingdom). Leave blank to scrape globally.
maxPagesIntegerOptionalMax listing pages to paginate through. Default: 1.
maxRecordsIntegerOptionalMax total companies to collect (0 = unlimited). Default: 10.
scrapeProfilesBooleanOptionalVisit each company's profile page for reviews, team, portfolio, and contact data. Slower but much richer. Default: true.
scrapeAllReviewsBooleanOptionalPaginate through every review page per profile instead of just the first ~10. Default: false.
mcpConnectorConnectorOptionalDeliver scraped companies into a connector you've authorized (Notion, Slack, Airtable, Google Sheets, …).
deliveryModeEnumOptionalsummary (one call with the full company list), chunked (split a large list across multiple calls), perCompany (one call per company), or none. Default: summary.
mcpToolStringOptionalTool to call on the connector (e.g. create_page, send_message, append_row).
mcpArgumentsObjectOptionalArguments for the tool; string values support {placeholders}.
mcpMessageTemplateStringOptionalTemplate rendered per delivery, exposed as the {message} placeholder.

[!TIP] Combine category with location to shortlist agencies in a specific market. Use filterName on its own to look up one company by name.

Example — Scrape a category with full profile enrichment

{
"category": "software-developers",
"location": "india",
"maxPages": 3,
"maxRecords": 50,
"scrapeProfiles": true,
"scrapeAllReviews": false
}

Example — Look up one company by name and post it to Slack

{
"filterName": "Techforce Global",
"scrapeProfiles": true,
"mcpConnector": "<your-slack-connector>",
"deliveryMode": "perCompany",
"mcpTool": "send_message",
"mcpArguments": { "channel": "#agency-leads", "text": "{message}" },
"mcpMessageTemplate": "{name} — {rating} — {location} — {website} — {profileLink}"
}

Example — Scrape and log a summary into Notion

{
"category": "seo-companies",
"maxPages": 2,
"maxRecords": 30,
"mcpConnector": "<your-notion-connector>",
"deliveryMode": "chunked",
"mcpTool": "create_page",
"mcpArguments": {
"parent": { "page_id": "<your-page-id>" },
"pages": [
{
"properties": { "title": "Clutch companies — part {part}/{partCount}" },
"content": "{companies}"
}
]
}
}

Placeholders available in arguments / template

Summary & chunked modes: {companyCount} · {companies} · {message} Chunked mode adds: {part} · {partCount} Per-company mode: any field from that company's output record — {name} · {profileLink} · {rating} · {location} · {hourlyRate} · {minProjectSize} · {description} · {website} · {contactEmail} · {contactPhone} · {contactLinkedin} · {contactWebsite} — plus {companyText} (a formatted block) and {message}


📦 Output Fields

FieldDescription
nameCompany name
profileLinkDirect link to the company's Clutch profile
ratingClutch rating (e.g. 4.9)
locationPrimary location as shown on the listing
hourlyRateListed hourly rate band
minProjectSizeMinimum project size
descriptionShort listing description
websiteCompany website (from the listing/profile header)
overviewName / overviewPosition / overviewAvatarContact shown in the profile's overview block (profile scrape only)
employees / yearFounded / languages / timezones / reviewCountHighlights from the profile header (profile scrape only)
languagesListFull list of languages spoken (profile scrape only)
officesArray of office objects: address, phone, employees, verified (profile scrape only)
contactWebsite / contactLinkedin / contactTwitter / contactFacebook / contactInstagram / contactPhone / contactEmailContact details from the profile's contact section (profile scrape only)
teamBio / quickFacts / teamBreakdown / toolsAbout/team section content (profile scrape only)
membersArray of team member objects: name, position, bio, photo (profile scrape only)
reviewsArray of scraped reviews (first page, or all pages if scrapeAllReviews is enabled) (profile scrape only)

Fields marked (profile scrape only) are only populated when scrapeProfiles is enabled; otherwise the output contains just the listing-level fields (name through website). Any field Clutch doesn't expose for a given company returns "N/A" rather than being omitted.

Example Output

{
"name": "Techforce Global",
"profileLink": "https://clutch.co/profile/techforce-global",
"rating": "4.9",
"location": "Ahmedabad, India",
"hourlyRate": "$25 - $49 / hr",
"minProjectSize": "$1,000+",
"description": "Techforce Global is a web & mobile app development company...",
"website": "https://www.techforceglobal.com",
"employees": "50 - 249",
"yearFounded": "2015",
"reviewCount": "12",
"contactWebsite": "https://www.techforceglobal.com",
"contactEmail": "N/A",
"contactPhone": "+91 XXXXXXXXXX",
"offices": [
{ "address": ["Ahmedabad", "Gujarat", "India"], "phone": "N/A", "employees": "N/A", "verified": true }
]
}

You can download the dataset in various formats such as JSON, HTML, CSV, Excel, or XML.


🗺️ Supported Categories

Category valueDescriptionClutch URL
software-developersSoftware Developersclutch.co/developers
web-designersWeb Designersclutch.co/web-designers
digital-marketingDigital Marketingclutch.co/agencies/digital-marketing
seo-companiesSEO Companiesclutch.co/seo-firms
mobile-app-developersMobile App Developersclutch.co/app-developers
it-servicesIT Servicesclutch.co/it-services

Leave category blank to scrape across all six.


🔌 Integrations & Delivery

Deliver scraped companies into any MCP connector you've authorized in Apify — no glue code, no webhooks:

  • Notion — log a running page of companies (use chunked mode for large lists so Notion never times out)
  • Slack / Discord — post companies or summaries to a channel as they're found
  • Airtable / Google Sheets — append a structured row per company
  • Jira / Linear / GitHub — open a follow-up task per company (e.g. outreach or vendor review)
  • …or any other MCP-compatible connector

Credentials stay private — delivery runs through the Apify MCP Proxy, so the Actor never sees your connector tokens. You can also consume the dataset directly via the Apify API, or wire it into n8n, Zapier, and Make.

⚙️ Delivery modes: summary sends the full company list in one call, chunked splits a large list across a few calls/pages, and perCompany sends one call per scraped company. MCP delivery only runs on the Apify platform and never affects what's saved to the dataset.

🔧 Connector Tool Arguments Reference

Ready-to-paste mcpTool + mcpArguments combos for common connectors.

SlackmcpTool: "send_message", mode perCompany or summary

{ "channel": "#agency-leads", "text": "{message}" }

DiscordmcpTool: "send_message", mode perCompany or summary

{ "channel_id": "<your-channel-id>", "content": "{message}" }

NotionmcpTool: "create_page", mode perCompany (one page per company)

{
"parent": { "database_id": "<your-database-id>" },
"properties": {
"Name": { "title": [{ "text": { "content": "{name}" } }] },
"Rating": { "rich_text": [{ "text": { "content": "{rating}" } }] },
"Location": { "rich_text": [{ "text": { "content": "{location}" } }] },
"Hourly Rate": { "rich_text": [{ "text": { "content": "{hourlyRate}" } }] },
"Website": { "url": "{website}" },
"Profile": { "url": "{profileLink}" }
}
}

NotionmcpTool: "create_page", mode chunked (one page per batch of companies)

{
"parent": { "page_id": "<your-page-id>" },
"properties": { "title": [{ "text": { "content": "Clutch companies — part {part}/{partCount}" } }] },
"children": [
{ "object": "block", "type": "paragraph", "paragraph": { "rich_text": [{ "text": { "content": "{companies}" } }] } }
]
}

AirtablemcpTool: "create_record", mode perCompany

{
"table": "Clutch Companies",
"fields": {
"Name": "{name}",
"Rating": "{rating}",
"Location": "{location}",
"Hourly Rate": "{hourlyRate}",
"Website": "{website}",
"Email": "{contactEmail}",
"Phone": "{contactPhone}",
"Profile": "{profileLink}"
}
}

Google SheetsmcpTool: "append_row", mode perCompany

{
"spreadsheetId": "<your-spreadsheet-id>",
"range": "Sheet1!A:G",
"values": [
["{name}", "{rating}", "{location}", "{hourlyRate}", "{website}", "{contactEmail}", "{profileLink}"]
]
}

JiramcpTool: "create_issue", mode perCompany

{
"project": "BIZ",
"issueType": "Task",
"summary": "Vendor review: {name} ({location})",
"description": "{message}"
}

LinearmcpTool: "create_issue", mode perCompany

{
"teamId": "<your-team-id>",
"title": "Vendor review: {name} ({location})",
"description": "{message}"
}

GitHubmcpTool: "create_issue", mode perCompany

{
"owner": "your-org",
"repo": "vendor-tracking",
"title": "{name} — {location}",
"body": "{message}"
}

For the Jira / Linear / GitHub examples above, pair with this mcpMessageTemplate:

{name}{rating}{location}{hourlyRate}
{website}
{profileLink}

🛠️ How It Works

my_actor/main.py reads the input and picks a scraping strategy:

  1. If filterName is set with no category/location, it searches Clutch directly (scraper.scrape_by_name) and automatically falls back to scraping every category with the name filter applied if the search returns zero results.
  2. Otherwise, it scrapes one category (or all six if category is blank) via scraper.scrape_all, paginating up to maxPages, applying location/filterName filters, and stopping once maxRecords is reached.
  3. If scrapeProfiles is enabled, each company's profile page is visited concurrently (profileScraper.scrape_profile, 5 at a time by default) to pull overview, about/team, portfolio, offices, verification, contact details, and reviews — paginating every review page if scrapeAllReviews is on.
  4. Every scrape path runs a stealth Playwright context (spoofed navigator.webdriver, custom user agent/locale/timezone), detects Cloudflare "Just a moment" interstitials and waits them out, and retries failed page loads with backoff.
  5. Results are pushed to the dataset as they're collected, then — if a connector is configured — delivered via MCP once scraping finishes.

Built with: Apify SDK for Python · Playwright · MCP


🛠 Running Locally

# Install dependencies
pip install -r requirements.txt
playwright install chromium --with-deps
# Create local input file
mkdir -p storage/key_value_stores/default
echo '{
"category": "software-developers",
"location": "india",
"maxPages": 1,
"maxRecords": 10,
"scrapeProfiles": true,
"scrapeAllReviews": false
}' > storage/key_value_stores/default/INPUT.json
# Run the actor
python -m my_actor

🆘 Support

For issues, custom scraping requests, or feature suggestions: Email: bhavin.shah@techforceglobal.com


Need a Custom Pipeline?

Want multi-category batch runs, scheduled refreshes, deeper enrichment, or a full data-warehouse integration?

📅 Book a Free 15-min Consultation


Made with ❤️ by Techforce Specialists in High-Performance Web Scrapers and AI Automation.


Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Clutch.co. Clutch® is a trademark of its respective owner; all trademarks are property of their respective owners. The Actor collects only publicly available information (company listings, ratings, and profile data shown on public pages) and does not log into, or scrape behind the authentication of, any platform. Use the data responsibly and in compliance with applicable laws (including GDPR/CCPA) and Clutch's terms of service.