A Marketing Agency Database, Built From Any Clutch Directory
A Clutch category or location URL in, one clean JSON row per agency out: name, website, rating, rates, size, and location, ready for a spreadsheet, a CRM, or a vector store.
When to use this skill
- You want a marketing agency database and do not want to page through clutch.co by hand.
- You need a list of digital marketing agencies (or web developers, or any Clutch category) as structured data, filtered by service or city.
- You are seeding a lead list, a market map, or a directory product with real agencies and their published rates.
- You want the whole category, de-duplicated, not the first screen.
Not for: the full deep record of specific companies you already know. To pull complete firmographics, service mix, pricing bands, and reviews for named profiles, use the companion apify-company-data-api skill, built on the same Actor in profiles mode. See references/actor-index.md.
What you get
One dataset row per listed agency. result_type separates listing rows from error rows. The companies dataset view shows the listing columns.
Listing fields:
name, slug, profile_url
website (the real homepage, with tracking parameters stripped)
rating, review_count, is_verified, verification (badge list)
min_project_size, hourly_rate, employees, location
service_lines (name plus percentage, where the card shows it)
source_url (the directory page the row came from), fetched_at
To go deeper on any row, feed its profile_url into the apify-company-data-api skill for the full profile and reviews.
Prerequisites
The Actor
Run it with the Apify CLI
Digital marketing agencies, first page, capped at 50 rows:
apify actors call "johnvc/clutch-agency-api" -i '{"mode":"directory","directoryUrls":["https://clutch.co/agencies/digital-marketing"],"maxPagesPerDirectory":1,"maxItems":50}' \
--json \
--user-agent apify-awesome-skills/apify-marketing-agency-database \
2>/dev/null
A location-filtered category, three pages deep, using a Clutch URL that already encodes the filter:
apify actors call "johnvc/clutch-agency-api" -i '{"mode":"directory","directoryUrls":["https://clutch.co/us/agencies/digital-marketing"],"maxPagesPerDirectory":3,"maxItems":200}' \
--json \
--user-agent apify-awesome-skills/apify-marketing-agency-database \
2>/dev/null
Confirm the live schema and prices before a large sweep:
apify actors info "johnvc/clutch-agency-api" --input --json \
--user-agent apify-awesome-skills/apify-marketing-agency-database \
2>/dev/null
Read the rows back from a finished run:
apify datasets get-items <DATASET_ID> --format json \
--user-agent apify-awesome-skills/apify-marketing-agency-database \
2>/dev/null
Every call carries the three flags this repo expects: --json (or --format json), --user-agent apify-awesome-skills/apify-marketing-agency-database, and 2>/dev/null.
Run it from Claude or another AI agent (MCP)
The Actor is MCP-ready. Add the hosted server URL:
https://mcp.apify.com/?tools=actors,docs,johnvc/clutch-agency-api
Then ask, for example: "Build me a table of digital marketing agencies from Clutch with their rating, hourly rate, team size, and website." MCP setup docs: https://docs.apify.com/platform/integrations/mcp
Workflow
- Pick the Clutch directory URL that already encodes your segment. Clutch has a page for most service and location combinations, for example
https://clutch.co/agencies/digital-marketing or https://clutch.co/us/web-developers.
- Start with
maxPagesPerDirectory:1 and a small maxItems. Look at the row shape and the category before paying for a deep sweep.
- Raise
maxPagesPerDirectory to go deeper. Each page is a separate request, so this is the main cost lever; maxItems is the hard ceiling.
- Filter by choosing a more specific Clutch URL, then filter the dataset afterward on
rating, min_project_size, or location.
- Sponsored and featured cards repeat across pages. The Actor de-duplicates by profile URL for the whole run, so you are never billed twice for one agency.
- Check
result_type before treating a row as an agency. An error row carries error_message and error_type.
- To enrich a shortlist, pass the
profile_url values into the apify-company-data-api skill for full records and reviews.
Inputs
mode (enum directory, profiles, search): use directory for this workflow.
directoryUrls (array): any Clutch category or location page. A bare path works too.
maxPagesPerDirectory (integer, minimum 1): result pages per directory URL. Each page carries roughly 70 to 90 companies.
maxItems (integer): the hard delivery ceiling for the run. Use it as a spend cap.
Every list field carries a house note: need larger batches? Contact us and we can raise the limit for your account.
Cost
Billing is pay per event with no start fee, so a run that returns nothing costs almost nothing. Confirm live prices with the info command above rather than trusting a number copied here.
The listing-scraped event fires once per agency row delivered. A company that appears on more than one page (sponsored and featured cards repeat) is de-duplicated and billed once. maxItems caps the run; maxPagesPerDirectory caps the pages fetched before that.
Listings are priced as a loss leader, so a whole category is cheap. Suggested confirmation thresholds: mention the estimate under about $5, warn the user over about $5, get explicit confirmation over about $20. Present cost as "around $X", never as a guarantee.
Honest limits
- A directory row is the card data: name, rating, rates, size, location, website, and service mix. For description, founding year, full service percentages, pricing by service, and reviews, enrich the
profile_url with the company-data workflow.
- A directory page can return more than 50 companies because Clutch mixes sponsored and featured cards into the organic list. All are returned, de-duplicated across pages.
- Public directory data only. No emails behind a login, no private contact data.
- The website is the company's real homepage with referral tracking removed.
Troubleshooting
- Zero rows and no error row: the URL was not a valid Clutch directory (a profile URL, or a non-Clutch host) and normalized away. Paste a category page URL.
- Fewer rows than expected on a deep run: later pages returning nothing is the end of pagination, not a failure.
- A row with sparse fields: that card is thin on Clutch; enrich its
profile_url for the full record.
- Duplicates across runs: dedupe downstream on
profile_url or slug, never on name.
See references/gotchas.md for cost guardrails and error recovery, and references/actor-index.md for the Actor routing table.
Related Actors
1---2name: apify-marketing-agency-database3description: Build a marketing agency database from Clutch.co with the Clutch.co Agency API Actor (johnvc/clutch-agency-api). Point it at any Clutch directory or category or location URL and get one flat JSON row per listed agency: name, profile_url, website, rating, review_count, verification, min_project_size, hourly_rate, employees, location, and service_lines. Pagination and cross-page de-duplication are handled for you, so one company is never billed twice. Use when someone wants a marketing agency database, a list of digital marketing agencies, a B2B agency directory as structured data, top agencies by service or city, or to export agencies from Clutch into a spreadsheet, CRM, or vector store. Billed per listing delivered with no start fee, and MCP-ready for Claude and other AI agents.4license: MIT5---67# A Marketing Agency Database, Built From Any Clutch Directory89A Clutch category or location URL in, one clean JSON row per agency out: name, website, rating, rates, size, and location, ready for a spreadsheet, a CRM, or a vector store.1011## When to use this skill1213- You want a marketing agency database and do not want to page through clutch.co by hand.14- You need a list of digital marketing agencies (or web developers, or any Clutch category) as structured data, filtered by service or city.15- You are seeding a lead list, a market map, or a directory product with real agencies and their published rates.16- You want the whole category, de-duplicated, not the first screen.1718Not for: the full deep record of specific companies you already know. To pull complete firmographics, service mix, pricing bands, and reviews for named profiles, use the companion `apify-company-data-api` skill, built on the same Actor in profiles mode. See `references/actor-index.md`.1920## What you get2122One dataset row per listed agency. `result_type` separates `listing` rows from `error` rows. The `companies` dataset view shows the listing columns.2324Listing fields:2526- `name`, `slug`, `profile_url`27- `website` (the real homepage, with tracking parameters stripped)28- `rating`, `review_count`, `is_verified`, `verification` (badge list)29- `min_project_size`, `hourly_rate`, `employees`, `location`30- `service_lines` (name plus percentage, where the card shows it)31- `source_url` (the directory page the row came from), `fetched_at`3233To go deeper on any row, feed its `profile_url` into the `apify-company-data-api` skill for the full profile and reviews.3435## Prerequisites3637- Apify account (sign up at https://apify.com?fpr=9n7kx3&fp_sid=skillrepo).38- Authentication via `apify login`, or an `APIFY_TOKEN` environment variable (Apify Console, Settings, Integrations).3940## The Actor4142- Store page: https://apify.com/johnvc/clutch-agency-api?fpr=9n7kx3&fp_sid=skillrepo43- Actor ID: `johnvc/clutch-agency-api`44- Pricing: pay per event, no start fee. See the cost section below and `references/gotchas.md` for the live-price command.4546## Run it with the Apify CLI4748Digital marketing agencies, first page, capped at 50 rows:4950```bash51apify actors call "johnvc/clutch-agency-api" -i '{"mode":"directory","directoryUrls":["https://clutch.co/agencies/digital-marketing"],"maxPagesPerDirectory":1,"maxItems":50}' \52 --json \53 --user-agent apify-awesome-skills/apify-marketing-agency-database \54 2>/dev/null55```5657A location-filtered category, three pages deep, using a Clutch URL that already encodes the filter:5859```bash60apify actors call "johnvc/clutch-agency-api" -i '{"mode":"directory","directoryUrls":["https://clutch.co/us/agencies/digital-marketing"],"maxPagesPerDirectory":3,"maxItems":200}' \61 --json \62 --user-agent apify-awesome-skills/apify-marketing-agency-database \63 2>/dev/null64```6566Confirm the live schema and prices before a large sweep:6768```bash69apify actors info "johnvc/clutch-agency-api" --input --json \70 --user-agent apify-awesome-skills/apify-marketing-agency-database \71 2>/dev/null72```7374Read the rows back from a finished run:7576```bash77apify datasets get-items <DATASET_ID> --format json \78 --user-agent apify-awesome-skills/apify-marketing-agency-database \79 2>/dev/null80```8182Every call carries the three flags this repo expects: `--json` (or `--format json`), `--user-agent apify-awesome-skills/apify-marketing-agency-database`, and `2>/dev/null`.8384## Run it from Claude or another AI agent (MCP)8586The Actor is MCP-ready. Add the hosted server URL:8788`https://mcp.apify.com/?tools=actors,docs,johnvc/clutch-agency-api`8990Then ask, for example: "Build me a table of digital marketing agencies from Clutch with their rating, hourly rate, team size, and website." MCP setup docs: https://docs.apify.com/platform/integrations/mcp9192## Workflow93941. Pick the Clutch directory URL that already encodes your segment. Clutch has a page for most service and location combinations, for example `https://clutch.co/agencies/digital-marketing` or `https://clutch.co/us/web-developers`.952. Start with `maxPagesPerDirectory:1` and a small `maxItems`. Look at the row shape and the category before paying for a deep sweep.963. Raise `maxPagesPerDirectory` to go deeper. Each page is a separate request, so this is the main cost lever; `maxItems` is the hard ceiling.974. Filter by choosing a more specific Clutch URL, then filter the dataset afterward on `rating`, `min_project_size`, or `location`.985. Sponsored and featured cards repeat across pages. The Actor de-duplicates by profile URL for the whole run, so you are never billed twice for one agency.996. Check `result_type` before treating a row as an agency. An `error` row carries `error_message` and `error_type`.1007. To enrich a shortlist, pass the `profile_url` values into the `apify-company-data-api` skill for full records and reviews.101102## Inputs103104- `mode` (enum `directory`, `profiles`, `search`): use `directory` for this workflow.105- `directoryUrls` (array): any Clutch category or location page. A bare path works too.106- `maxPagesPerDirectory` (integer, minimum 1): result pages per directory URL. Each page carries roughly 70 to 90 companies.107- `maxItems` (integer): the hard delivery ceiling for the run. Use it as a spend cap.108109Every list field carries a house note: need larger batches? Contact us and we can raise the limit for your account.110111## Cost112113Billing is pay per event with no start fee, so a run that returns nothing costs almost nothing. Confirm live prices with the info command above rather than trusting a number copied here.114115The `listing-scraped` event fires once per agency row delivered. A company that appears on more than one page (sponsored and featured cards repeat) is de-duplicated and billed once. `maxItems` caps the run; `maxPagesPerDirectory` caps the pages fetched before that.116117Listings are priced as a loss leader, so a whole category is cheap. Suggested confirmation thresholds: mention the estimate under about $5, warn the user over about $5, get explicit confirmation over about $20. Present cost as "around $X", never as a guarantee.118119## Honest limits120121- A directory row is the card data: name, rating, rates, size, location, website, and service mix. For description, founding year, full service percentages, pricing by service, and reviews, enrich the `profile_url` with the company-data workflow.122- A directory page can return more than 50 companies because Clutch mixes sponsored and featured cards into the organic list. All are returned, de-duplicated across pages.123- Public directory data only. No emails behind a login, no private contact data.124- The website is the company's real homepage with referral tracking removed.125126## Troubleshooting127128- Zero rows and no error row: the URL was not a valid Clutch directory (a profile URL, or a non-Clutch host) and normalized away. Paste a category page URL.129- Fewer rows than expected on a deep run: later pages returning nothing is the end of pagination, not a failure.130- A row with sparse fields: that card is thin on Clutch; enrich its `profile_url` for the full record.131- Duplicates across runs: dedupe downstream on `profile_url` or `slug`, never on `name`.132133See `references/gotchas.md` for cost guardrails and error recovery, and `references/actor-index.md` for the Actor routing table.134135## Related Actors136137- Clutch.co Agency API (this Actor, profiles mode): full records and reviews for named companies. https://apify.com/johnvc/clutch-agency-api?fpr=9n7kx3&fp_sid=skillrepo138- Google Maps Places API: local business data with contact details. https://apify.com/johnvc/google-maps-places-api?fpr=9n7kx3&fp_sid=skillrepo139- LinkedIn Company API: company firmographics and headcount. https://apify.com/johnvc/linkedin-company-api?fpr=9n7kx3&fp_sid=skillrepo140- G2 Reviews API: the B2B software counterpart to Clutch. https://apify.com/johnvc/g2-reviews-api?fpr=9n7kx3&fp_sid=skillrepo