# Apify Marketing Agency Database

> 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.

- Skill: `johnisanerd/apify-marketing-agency-database` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add johnisanerd/apify-marketing-agency-database`
- Raw SKILL.md: https://api.skillmd.com/api/skills/johnisanerd/apify-marketing-agency-database/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Marketing & Growth
- License: MIT
- Author: johnisanerd (https://skillmd.com/u/johnisanerd)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/johnisanerd/apify-marketing-agency-database

---


# 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

- Apify account (sign up at https://apify.com?fpr=9n7kx3&fp_sid=skillrepo).
- Authentication via `apify login`, or an `APIFY_TOKEN` environment variable (Apify Console, Settings, Integrations).

## The Actor

- Store page: https://apify.com/johnvc/clutch-agency-api?fpr=9n7kx3&fp_sid=skillrepo
- Actor ID: `johnvc/clutch-agency-api`
- Pricing: pay per event, no start fee. See the cost section below and `references/gotchas.md` for the live-price command.

## Run it with the Apify CLI

Digital marketing agencies, first page, capped at 50 rows:

```bash
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:

```bash
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:

```bash
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:

```bash
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

1. 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`.
2. Start with `maxPagesPerDirectory:1` and a small `maxItems`. Look at the row shape and the category before paying for a deep sweep.
3. Raise `maxPagesPerDirectory` to go deeper. Each page is a separate request, so this is the main cost lever; `maxItems` is the hard ceiling.
4. Filter by choosing a more specific Clutch URL, then filter the dataset afterward on `rating`, `min_project_size`, or `location`.
5. 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.
6. Check `result_type` before treating a row as an agency. An `error` row carries `error_message` and `error_type`.
7. 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

- 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=skillrepo
- Google Maps Places API: local business data with contact details. https://apify.com/johnvc/google-maps-places-api?fpr=9n7kx3&fp_sid=skillrepo
- LinkedIn Company API: company firmographics and headcount. https://apify.com/johnvc/linkedin-company-api?fpr=9n7kx3&fp_sid=skillrepo
- G2 Reviews API: the B2B software counterpart to Clutch. https://apify.com/johnvc/g2-reviews-api?fpr=9n7kx3&fp_sid=skillrepo

