# TopDevelopers Scraper: Software Agency Directory & Ratings (`bogdiehard/topdevelopers-agency-scraper`) Actor

Extracts software and app development agencies from topdevelopers.co: website, rating, review count, team size, rates, locations and optional profile data (founded, HQ, services).

- **URL**: https://apify.com/bogdiehard/topdevelopers-agency-scraper.md
- **Developed by:** [Demetrius Greses Jr](https://apify.com/bogdiehard) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.80 / 1,000 results

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## TopDevelopers Scraper: Software Agency Directory & Ratings

Extracts software and app development agencies from topdevelopers.co with name, direct website, star rating, review count, team size, rate bands, locations and optional profile data, for B2B sales teams and agency-market analysts.

### Use cases

- **Lead generation for B2B sellers:** build a list of app and software agencies with their websites and team-size bands, to pitch tools, hosting or outsourcing to.
- **Vendor shortlisting:** compare agencies in a category or country by rating, review count and minimum project band before you send a request for proposals.
- **Agency market research:** count agencies per category and country, and see how rate and team-size bands spread across the market.
- **Partner sourcing:** read a country listing (for example `?country=usa`) and filter the rows by team size or rate band in your own tools.
- **Data pipelines and AI agents:** load one deduplicated row per agency into a CRM, a spreadsheet or an agent workflow.

### Sample output

| Agency | Rating | Reviews | Team size | Hourly rate | Website |
| --- | --- | --- | --- | --- | --- |
| Chop Dawg | 5 | 157 | 11 to 50 | $51 - $100 | https://chopdawg.com/ |
| Toptal | 5 | 33 | 251 to 1000 | Not Disclosed | https://www.toptal.com/ |
| Prismetric | 5 | 58 | 51 to 250 | Up to $25 | https://www.prismetric.com/top-developers/?utm_source=… |

One item as JSON (a real row from a test run, description shortened):

```json
{
    "id": "chopdawg",
    "name": "Chop Dawg",
    "tagline": "Meet The Partner Behind Your App's Success | Make It App'n!",
    "description": "Launch your mobile app with a proven partner. Since 2009, Chop Dawg has built 500+ custom apps for startups, growing companies, enterprises, and government teams. …",
    "rating": 5,
    "reviewCount": 157,
    "teamSizeBand": "11 to 50",
    "hourlyRateBand": "$51 - $100",
    "minProjectBand": "$5001 - $10000",
    "countries": ["USA"],
    "countriesMore": 0,
    "founded": null,
    "hqCity": null,
    "hqRegion": null,
    "hqCountry": null,
    "services": null,
    "portfolioCount": null,
    "category": "app-development",
    "websiteUrl": "https://chopdawg.com/",
    "logoUrl": "https://www.topdevelopers.co/upload/thumb_new/20250728195116674692600.jpg",
    "profileUrl": "https://www.topdevelopers.co/profile/chopdawg",
    "sourceUrl": "https://www.topdevelopers.co/profile/chopdawg",
    "scrapedAt": "2026-10-13T00:09:45.772Z"
}
```

With **fetchProfiles** on, the four profile fields (`founded`, `hqCity`, `hqRegion`, `hqCountry`), `services` and `portfolioCount` are filled from the agency's profile page.

### Pricing

**$4.00 per 1,000 results.** A 500-result run costs about $2.00. You pay only for results saved to your dataset, plus Apify's standard start fee of $0.00005 per run. Apify Silver and Gold plan users get lower per-result prices automatically.

With **fetchProfiles** on, each profile is charged as a second event at $4.00 per 1,000 profiles. Each profile page is about 2.6 MB, so these runs are slower.

Set **maxItems** to cap what a run can cost. The Actor stops cleanly when it reaches your spending limit.

### Input

| Field | Type | Description |
| --- | --- | --- |
| `startUrls` | array | Required. Category or country listing pages on topdevelopers.co, for example `https://www.topdevelopers.co/companies/app-development` or `https://www.topdevelopers.co/directory/ai-companies/usa`. Other sites and other paths are ignored. Filters (`country`, `employees`, `price`) work on `/companies/…` URLs, for example `https://www.topdevelopers.co/companies/app-development?country=usa&employees=6&price=1`. Some `/directory/…` URLs redirect and drop their query: the run then logs a warning and reads the unfiltered listing. |
| `maxPages` | integer | How many listing pages to read for each start URL. A page holds 35 to 50 agencies depending on the category. Default 3, maximum 200. |
| `fetchProfiles` | boolean | Also open each agency's profile page to add the founded year, headquarters city, region and country, services with their percentages, and the portfolio count. Off by default. |
| `maxItems` | integer | Maximum number of agencies to return. You are charged per result. Default 100, maximum 20000. **maxPages** (default 3) also caps a run, so raise maxPages for bigger runs. |
| `proxyConfiguration` | object | Apify datacenter proxy by default. |

Example input:

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

Filters other than `country` (employees, price) can be added to a `/companies/…` start URL the same way, for example `?country=usa&employees=6&price=1`. They are not separate input fields yet.

### Integrations

- **API:** run the Actor and fetch results with the [Apify API](https://docs.apify.com/api/v2) or the JavaScript and Python clients.
- **AI agents:** call it as a tool through the [Apify MCP server](https://mcp.apify.com).
- **No-code:** connect it to Make, Zapier or n8n, or export results straight to Google Sheets.
- **Scheduling:** run it daily or weekly with Apify Schedules and get only fresh data.

### FAQ

**What are the limits?** Each start URL is read up to **maxPages** listing pages (default 3, maximum 200). The mobile app development listing has 6,533 agencies over 131 pages of 50, so reading all of it takes 131 pages. The Actor makes at most 40 requests per minute with two in parallel. Ratings and review counts are the aggregates the site shows, and many agencies show 5.0. Descriptions are the site's listing excerpts and end with an ellipsis when cut.

**Is this legal?** The Actor collects public listing data only, with no login, and crawls at a polite rate. It never requests the pages robots.txt disallows (methodology, FAQs, terms and conditions, privacy policy). It is not affiliated with, endorsed by or connected to topdevelopers.co. You are responsible for how you use the data.

**What is never collected?** Reviewer names and titles, review text, interviewee names, telephone numbers, e-mail addresses, street addresses, and the site's own company address. Only aggregate ratings and review counts are returned.

**Something broke or a field is missing?** Open an issue on the Actor's Issues tab. We answer within one business day and usually ship a fix within 48 hours.

### Related Actors

- [More Husena Actors](https://apify.com/bogdiehard) — other scrapers from the same publisher.

### Changelog

- **0.1** (2026-10-12) — First release.
- **0.1 update** (2026-10-13) — safer retries when a page fails midway, other HTTP errors fail fast, cleaner budget and rate bands, a warning when a /directory URL loses its filters.

# Actor input Schema

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

Required. Category or country listing pages on topdevelopers.co, for example https://www.topdevelopers.co/companies/app-development or https://www.topdevelopers.co/directory/ai-companies/usa. Other sites and other paths are ignored. Filters (country, employees, price) work on /companies/ URLs, e.g. https://www.topdevelopers.co/companies/app-development?country=usa\&employees=6\&price=1. Some /directory/ URLs redirect and drop their query; the run then logs a warning and reads the unfiltered listing.

## `maxPages` (type: `integer`):

How many listing pages to read for each start URL. A page holds 35 to 50 agencies depending on the category. Default 3, maximum 200.

## `fetchProfiles` (type: `boolean`):

Also open each agency's profile page to add the founded year, headquarters city, region and country, services with their percentages, and the portfolio count. Each profile page is about 2.6 MB, so runs are slower, and each profile is charged as an extra event. Off by default.

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

Maximum number of agencies to return. You are charged per result. Default 100, maximum 20000. maxPages (default 3) also caps a run: a run reads at most maxPages listing pages per start URL, so raise maxPages for bigger runs.

## `proxyConfiguration` (type: `object`):

Apify datacenter proxy is used by default.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.topdevelopers.co/companies/app-development"
    }
  ],
  "maxPages": 3,
  "fetchProfiles": false,
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `stats` (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/companies/app-development"
        }
    ],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("bogdiehard/topdevelopers-agency-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/companies/app-development" }],
    "maxItems": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

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

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).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/companies/app-development"
    }
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call bogdiehard/topdevelopers-agency-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,bogdiehard/topdevelopers-agency-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/6g6Q5y65tFtlavoqr/builds/Qfc9Xq8h4zL3FBlXP/openapi.json
