# TopDevelopers Agency Directory Scraper (`automation-lab/topdevelopers-agency-directory-scraper`) Actor

🏢 Build fresh TopDevelopers agency lead lists and vendor shortlists with ranks, websites, commercial ranges, ratings, locations, services, expertise, and visible review metadata.

- **URL**: https://apify.com/automation-lab/topdevelopers-agency-directory-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## TopDevelopers Agency Directory Scraper

Build fresh agency lead lists and vendor shortlists from public [TopDevelopers.co](https://www.topdevelopers.co/) category directories.

The **TopDevelopers Agency Directory Scraper** follows directory pagination and turns visible agency cards into clean, deduplicated records.
It captures company names, profile URLs, websites, category rank, commercial ranges, ratings, locations, services, expertise, and visible review metadata.

Use the results in sales research, market maps, procurement workflows, spreadsheets, CRMs, BI tools, or scheduled monitors.
No login, browser automation, or manual copy-and-paste is required for the supported public directory pages.

### What does the TopDevelopers scraper do?

Give the Actor one or more TopDevelopers category URLs and a record limit.
It will:

- 🏢 load public TopDevelopers category directories;
- 📄 follow their `?page=N` pagination;
- 🥇 preserve each agency's directory rank;
- 🔗 collect the TopDevelopers profile and agency website;
- 💵 normalize project price, hourly rate, and employee ranges;
- ⭐ capture ratings, review counts, and visible review excerpts;
- 🗺️ collect visible office countries or locations;
- 🧩 extract comparison-table services and expertise when published;
- ♻️ deduplicate overlapping categories by profile URL;
- ✋ stop exactly at `maxItems`.

Every result is stored as one agency record in the default Apify dataset.
Export it as JSON, CSV, Excel, XML, or RSS.

### Who is it for?

#### B2B sales and growth teams

Create prospect lists of development agencies by category.
Send company websites and profile URLs into enrichment or CRM workflows.
Refresh lists on a schedule instead of rebuilding them manually.

#### Agency buyers and procurement teams

Compare vendors by rank, rate, project range, size, rating, and location.
Create a first-pass shortlist before deeper due diligence.
Retain the source URL for traceability.

#### Market researchers

Map category composition and compare agency positioning.
Track which providers appear in more than one category.
Analyze rating, size, location, and commercial-range distributions.

#### Agencies and consultants

Monitor peers, category placement, messaging, and public review signals.
Identify positioning gaps and potential partnership targets.

### Why use this Actor?

Manual directory research becomes expensive as soon as you need multiple pages or repeated updates.
This Actor provides a repeatable data contract.

- ✅ **Source-specific:** selectors and pagination are designed for TopDevelopers.
- ✅ **Exact limits:** output never intentionally exceeds `maxItems`.
- ✅ **Deduplicated:** overlapping inputs do not create duplicate profile rows.
- ✅ **Low compute:** server-rendered HTML is processed without a browser.
- ✅ **Traceable:** every row includes its directory source and extraction time.
- ✅ **Automation-ready:** run through the Console, API, schedules, webhooks, or MCP.

### What TopDevelopers data can I extract?

| Field | Description |
|---|---|
| `rank` | Position on the category page sequence |
| `companyName` | Agency or company name |
| `profileUrl` | Public TopDevelopers company profile |
| `website` | Public agency website linked by TopDevelopers |
| `category` | Category derived from the directory URL |
| `tagline` | Visible company tagline |
| `description` | Visible directory description |
| `services` | Services in published comparison data, or the directory service |
| `expertise` | Expertise values when published in comparison data |
| `priceRange` | Visible minimum project or price range |
| `hourlyRate` | Visible hourly rate range |
| `employeeRange` | Visible employee range |
| `rating` | Numeric directory rating |
| `reviewCount` | Visible number of reviews |
| `location` | Visible countries or locations |
| `foundedYear` | Founding year only when explicitly stated |
| `latestReview` | Latest visible review excerpt |
| `latestReviewer` | Visible reviewer name/role/company text |
| `whyChoose` | Published why-choose bullets |
| `reviewSummary` | Published review/testimonial summary |
| `sourceUrl` | Exact category page crawled |
| `scrapedAt` | UTC extraction timestamp |

Optional fields can be empty when TopDevelopers does not publish them for a company.
The Actor does not guess missing commercial facts.

### How much does it cost to scrape TopDevelopers agencies?

The Actor uses pay-per-event pricing:

- a small one-time **run start** charge;
- one **agency record extracted** charge per saved unique record;
- lower per-record rates on higher Apify subscription tiers.

The current start charge is **$0.005**.
Per-record prices use the canonical Apify tier curve:

| Apify tier | Price per agency record |
|---|---:|
| Free | $0.00011084 |
| Bronze | $0.000096384 |
| Silver | $0.000075179 |
| Gold | $0.00005783 |
| Platinum | $0.000038553 |
| Diamond | $0.000026987 |

At the Free-tier rate, 20 records cost about **$0.0072** including the start event; 100 records cost about **$0.0161**.
Apify's Free plan credits can cover testing and small recurring collections, subject to your plan.

You are charged for records saved, not for duplicates skipped after the same profile appears in another category.
Use a low `maxItems` while testing a new workflow.

### How to scrape a TopDevelopers directory

1. Open the Actor in Apify Console.
2. Copy a public TopDevelopers category URL containing `/directory/`.
3. Add it to **TopDevelopers category URLs**.
4. Set **Maximum agencies** to the number of unique records you need.
5. Click **Start**.
6. Review the dataset's **TopDevelopers agency records** view.
7. Export or integrate the data.

The prefilled web development directory and 20-record limit provide a quick first run.

### Input

The input contains two fields.

| Input | Type | Required | Default | Purpose |
|---|---|---:|---:|---|
| `startUrls` | array | yes | web development directory | Public TopDevelopers `/directory/` URLs |
| `maxItems` | integer | no | 20 | Global unique agency limit, 1–10,000 |

Example:

```json
{
  "startUrls": [
    {
      "url": "https://www.topdevelopers.co/directory/web-development-companies"
    },
    {
      "url": "https://www.topdevelopers.co/directory/mobile-app-development-companies"
    }
  ],
  "maxItems": 75
}
````

Existing TopDevelopers query filters are preserved while the Actor changes only the pagination page.
Profile URLs and non-TopDevelopers URLs fail validation instead of silently returning unrelated data.

### Output example

A dataset record looks like this:

```json
{
  "rank": 2,
  "companyName": "Prismetric",
  "profileUrl": "https://www.topdevelopers.co/profile/prismetric",
  "website": "https://www.prismetric.com/top-developers/",
  "category": "Web Development Companies",
  "tagline": "Delivering Quality Products and Premium AI-Powered Services",
  "description": "Prismetric is a website development company...",
  "services": ["Web Development", "Mobile App Development", "UX/UI Design"],
  "expertise": ["eCommerce", "Enterprise Solutions", "Social Media"],
  "priceRange": "$5001 - $10000",
  "hourlyRate": "Up to $25",
  "employeeRange": "51 to 250",
  "rating": 5,
  "reviewCount": 58,
  "location": "India, USA, Brazil, Australia",
  "foundedYear": null,
  "latestReview": "High quality work!",
  "latestReviewer": "Mack Thillalem, Founder, Quote Now Pty Ltd",
  "whyChoose": ["With 14+ years of rich industry experience..."],
  "reviewSummary": "Prismetric has received numerous 5-star ratings...",
  "sourceUrl": "https://www.topdevelopers.co/directory/web-development-companies",
  "scrapedAt": "2026-07-21T00:00:00.000Z"
}
```

Values reflect what the source publishes at run time.
The example is illustrative and can change as TopDevelopers updates listings.

### Pagination and deduplication

TopDevelopers currently exposes 40 directory cards per page on the tested category.
The Actor detects the enabled next-page control and requests `?page=2`, `?page=3`, and so on.

Deduplication uses the canonical TopDevelopers profile URL.
If the same agency appears in web and mobile categories, only its first encountered record is saved.
The first source therefore determines `category`, `rank`, and `sourceUrl` for that deduplicated row.

`maxItems` is global across all input URLs.
For example, two category URLs with `maxItems: 100` produce at most 100 records total, not 200.

### Tips for better agency lead lists

- 🎯 Start with the narrowest category that matches your campaign.
- 🧪 Test with 10–20 records before collecting hundreds.
- 🗺️ Use TopDevelopers URLs with source-side filters when available.
- ♻️ Put related categories in one run to benefit from profile deduplication.
- 🕐 Schedule recurring runs if category membership is time-sensitive.
- 🔎 Keep `profileUrl` and `sourceUrl` when loading rows into a CRM.
- 🧠 Treat ratings and summaries as research signals, not final vendor approval.
- 📊 Use numeric `rating`, `reviewCount`, `rank`, and `foundedYear` for analysis.

### Integrations

#### CRM lead enrichment

Export `companyName`, `website`, `profileUrl`, `location`, and `employeeRange` to HubSpot or Salesforce.
Use the website as the company deduplication key in your CRM.

#### Google Sheets and Airtable

Connect the dataset through Make, Zapier, or the Apify API.
Refresh a shortlist without replacing your notes columns.

#### Data warehouse and BI

Load scheduled dataset exports into BigQuery, Snowflake, or PostgreSQL.
Trend category rank and review count across snapshots.

#### Slack or email alerts

Compare the current dataset with a previous run.
Send alerts when a new agency enters a tracked category or a rating changes.

#### Webhooks

Configure an Apify webhook for `ACTOR.RUN.SUCCEEDED`.
Pass the dataset ID to your downstream pipeline only after extraction completes.

### API usage with JavaScript

Install the client:

```bash
npm install apify-client
```

Run the Actor:

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/topdevelopers-agency-directory-scraper').call({
  startUrls: [{ url: 'https://www.topdevelopers.co/directory/web-development-companies' }],
  maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### API usage with Python

Install the client:

```bash
pip install apify-client
```

Run the Actor:

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/topdevelopers-agency-directory-scraper').call(run_input={
    'startUrls': [{'url': 'https://www.topdevelopers.co/directory/web-development-companies'}],
    'maxItems': 50,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

### API usage with cURL

Start a run:

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~topdevelopers-agency-directory-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "startUrls": [{"url":"https://www.topdevelopers.co/directory/web-development-companies"}],
    "maxItems": 50
  }'
```

After the run succeeds, fetch its dataset:

```bash
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?clean=true&format=json"
```

Keep tokens in environment variables rather than source code.

### Use with Apify MCP

Apify MCP lets AI assistants start the Actor and inspect its output.

For Claude Code:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/topdevelopers-agency-directory-scraper"
```

For Claude Desktop, Cursor, or VS Code, add an HTTP MCP server:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=automation-lab/topdevelopers-agency-directory-scraper"
    }
  }
}
```

Example prompts:

- “Collect 30 web development agencies from TopDevelopers and rank those with ratings above 4.5.”
- “Build a deduplicated market map from the web and mobile development categories.”
- “Compare employee and hourly-rate ranges for this TopDevelopers agency dataset.”
- “Return agency websites and profile URLs as a CSV-ready table.”

### Scheduling a TopDevelopers monitor

Create an Apify schedule for the same category input.
Weekly runs are often enough for vendor and competitor research.

To detect changes:

1. store each run's dataset ID;
2. match records by `profileUrl`;
3. compare `rank`, `rating`, `reviewCount`, and commercial fields;
4. notify your team only when relevant values differ.

The Actor does not maintain historical state by itself.
Your workflow controls retention and change rules.

### Data quality and limitations

The Actor supports public TopDevelopers category URLs whose path starts with `/directory/`.
It does not accept company profile URLs, arbitrary search engines, or other agency directories.

TopDevelopers may omit optional fields for some agencies.
Services and expertise can be richer for companies included in a page's published comparison table.
Other companies receive the category service and an empty expertise list rather than invented values.

The Actor does not visit every company profile in v1.
It therefore does not promise private contacts, email addresses, phone numbers, full portfolios, or every historical review.

Directory content and markup can change.
A total selector failure causes the run to fail rather than returning a misleading empty success.

### Is it legal to scrape TopDevelopers?

This Actor extracts information visible on public directory pages.
Public availability does not remove your legal responsibilities.

- Review TopDevelopers's terms and applicable laws for your use case.
- Do not use the data for unlawful discrimination, harassment, or spam.
- Respect personal-data and direct-marketing requirements in your jurisdiction.
- Keep source links and verify important vendor claims before decisions.
- Collect only the volume needed for a legitimate purpose.

This documentation is general information, not legal advice.

### Troubleshooting

#### “Only TopDevelopers directory URLs are supported”

Use a URL such as `https://www.topdevelopers.co/directory/web-development-companies`.
Do not use `/profile/...`, a search result, or another domain.

#### The run returns fewer records than `maxItems`

The category may contain fewer unique agencies, or multiple inputs may overlap.
Deduplication intentionally prevents the same profile from being saved twice.

#### Some services or expertise arrays are sparse

Those fields depend on visible source data.
TopDevelopers publishes richer comparison rows for selected companies only.
The Actor will not infer unsupported specialties.

#### A run fails with no agency cards found

The source markup or availability may have changed.
Check the run log and open the supplied URL in a browser.
Retry later for a temporary source outage; report persistent selector failures through the Actor issue form.

### Related agency directory scrapers

- [Techreviewer Agency Directory Scraper](https://apify.com/automation-lab/techreviewer-agency-directory-scraper) — research agencies listed by Techreviewer.
- [SuperbCompanies Agency Directory Scraper](https://apify.com/automation-lab/superbcompanies-agency-directory-scraper) — collect SuperbCompanies agency records.
- [Clutch Scraper](https://apify.com/automation-lab/clutch-scraper) — build agency datasets from Clutch.

Use separate actors when you need source-specific fields from another directory.
Combine their outputs downstream using company website domains.

### FAQ

#### Does this Actor require a TopDevelopers account?

No.
The supported v1 scope uses public category directory pages.

#### Does it follow pagination?

Yes.
It follows the enabled next-page control until the category ends or `maxItems` is reached.

#### Can I scrape multiple categories in one run?

Yes.
Add several category URLs to `startUrls`; the item cap remains global.

#### How are duplicate agencies handled?

The first record for each canonical TopDevelopers profile URL is saved.
Later duplicates are skipped.

#### Can it extract emails and phone numbers?

Not in v1.
The Actor focuses on reliable public listing data and linked company websites.

#### Can I export to Excel or CSV?

Yes.
Use the dataset export controls in Apify Console or request the desired API format.

#### Are ratings returned as numbers?

Yes.
`rating`, `reviewCount`, `rank`, and explicit `foundedYear` values are numeric.

#### How often should I schedule it?

Weekly or monthly is typical for market maps.
Choose a cadence that matches how quickly your decisions need fresh data.

### Support

If a public TopDevelopers directory no longer parses correctly, open an issue from the Actor page.
Include:

- the directory URL;
- the run URL or run ID;
- the expected category;
- a short description of the missing or incorrect fields.

Do not include passwords, API tokens, or private customer information.
Concrete run evidence makes source changes faster to diagnose.

# Actor input Schema

## `startUrls` (type: `array`):

Add one or more public TopDevelopers /directory/ category URLs. Company profile URLs and other domains are rejected.

## `maxItems` (type: `integer`):

Stop after this many unique agency records across all supplied directories.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.topdevelopers.co/directory/web-development-companies"
    }
  ],
  "maxItems": 20
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://www.topdevelopers.co/directory/web-development-companies"
        }
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/topdevelopers-agency-directory-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [{ "url": "https://www.topdevelopers.co/directory/web-development-companies" }],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/topdevelopers-agency-directory-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.topdevelopers.co/directory/web-development-companies"
    }
  ],
  "maxItems": 20
}' |
apify call automation-lab/topdevelopers-agency-directory-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=automation-lab/topdevelopers-agency-directory-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "TopDevelopers Agency Directory Scraper",
        "description": "🏢 Build fresh TopDevelopers agency lead lists and vendor shortlists with ranks, websites, commercial ranges, ratings, locations, services, expertise, and visible review metadata.",
        "version": "0.1",
        "x-build-id": "7g2WfTfLtPeovHlPy"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~topdevelopers-agency-directory-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-topdevelopers-agency-directory-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/automation-lab~topdevelopers-agency-directory-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-topdevelopers-agency-directory-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/automation-lab~topdevelopers-agency-directory-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-topdevelopers-agency-directory-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "🔗 TopDevelopers category URLs",
                        "type": "array",
                        "description": "Add one or more public TopDevelopers /directory/ category URLs. Company profile URLs and other domains are rejected.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxItems": {
                        "title": "📊 Maximum agencies",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Stop after this many unique agency records across all supplied directories.",
                        "default": 20
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
