# DesignRush Agency Scraper (`kawsar/designrush-agency-scraper`) Actor

Scrapes agency listings from DesignRush and returns names, ratings, services, location, and pricing in a dataset ready for lead research or competitor analysis.

- **URL**: https://apify.com/kawsar/designrush-agency-scraper.md
- **Developed by:** [Kawsar](https://apify.com/kawsar) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.99 / 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?

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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## DesignRush Agency Scraper

Scrapes agency listings from DesignRush and returns structured data — agency name, website, location, DesignRush rating, Google rating, services, team size, hourly rate, minimum project budget, and portfolio count — as a dataset you can export to CSV, JSON, Excel, or any downstream tool.

Each listing page returns 50 agencies. Default settings use 1 request per run.

***

### What it scrapes

DesignRush organizes agencies into category pages. This actor works on any of them:

| Category | URL |
|---|---|
| Web Design | `designrush.com/agency/web-design-companies` |
| SEO | `designrush.com/agency/seo-companies` |
| IT Services | `designrush.com/agency/it-services` |
| Digital Marketing | `designrush.com/agency/digital-marketing-agencies` |
| Mobile App Development | `designrush.com/agency/mobile-app-development` |
| Software Development | `designrush.com/agency/software-development` |
| UI/UX Design | `designrush.com/agency/ux-design-agencies` |
| Branding | `designrush.com/agency/branding-agencies` |
| PPC | `designrush.com/agency/ppc-management-agencies` |
| Social Media | `designrush.com/agency/social-media-marketing` |
| eCommerce | `designrush.com/agency/ecommerce-development` |
| Video Production | `designrush.com/agency/video-production-companies` |

Pagination works with `?page=N`. Each page has 50 agencies. Set **Max listing pages** to scrape more pages per category.

***

### How to run it

1. Open the actor and paste one or more DesignRush category URLs into **Start URLs**. You can also leave it empty and use **Category slugs** instead.
2. Set **Max items** to limit how many agency records to collect (default: 50).
3. **Scrape full profiles** is off by default. The listing page already contains all key fields. Turn it on only if you need deeper profile data (requires one extra request per agency).
4. Click **Start** and download the dataset when the run finishes.

***

### Input fields

| Field | Type | Default | Description |
|---|---|---|---|
| Start URLs | array | `designrush.com/agency/web-design-companies` | One or more DesignRush category or profile page URLs |
| Category slugs | array | — | Category slugs as an alternative to Start URLs (e.g. `seo-companies`) |
| Scrape full profiles | boolean | off | Visit each profile page for extra data (uses more requests) |
| Max listing pages | integer | 1 | Pagination pages to follow per start URL (max 50) |
| Max items | integer | 50 | Total records to collect per run (max 1000) |
| Request timeout | integer | 30 | Per-request timeout in seconds |

#### Category slugs example

Instead of pasting full URLs, you can list slugs in the **Category slugs** field:

```
web-design-companies
seo-companies
digital-marketing-agencies
it-services
mobile-app-development
```

***

### Output fields

| Field | Type | Description |
|---|---|---|
| agencyId | string | DesignRush internal agency ID |
| agencyName | string | Agency display name |
| profileUrl | string | Full DesignRush profile page URL |
| website | string | Agency official website (UTM parameters stripped) |
| locationText | string | Headquarters location, e.g. `New York, New York` |
| agencyBio | string | Short agency description from the listing card |
| services | array | Full list of service categories from the agency's services tab |
| teamSize | string | Employee count or range, e.g. `50 - 99` |
| hourlyRate | string | Billing rate, e.g. `$100/hr` |
| minProjectSize | string | Minimum project budget, e.g. `$10,000 - $25,000` |
| portfolioCount | integer | Number of portfolio projects listed on the profile |
| rating | number | DesignRush rating (0–5), calculated from client reviews on the platform |
| reviewCount | integer | Number of DesignRush client reviews |
| googleRating | number | Google rating (0–5) — null if the agency has no linked Google profile |
| googleReviewCount | integer | Number of Google reviews — null if absent |
| category | string | Category name extracted from the page, e.g. `IT Services` |
| scrapedAt | string | ISO 8601 timestamp of collection |
| error | string | Error message if the record failed. Null on success |

#### Sample output record

```json
{
  "agencyId": "10600",
  "agencyName": "Essential Designs",
  "profileUrl": "https://www.designrush.com/agency/profile/essential-designs",
  "website": "https://www.essentialdesigns.net/",
  "locationText": "Vancouver,Canada",
  "agencyBio": "Essential Designs builds custom software platforms for the world's leading brands.",
  "services": [
    "Software Development",
    "Mobile App Development",
    "UI/UX Design",
    "Web Development",
    "IT Services",
    "Cloud Consulting",
    "DevOps Consulting",
    "Web Design"
  ],
  "teamSize": "50 - 99",
  "hourlyRate": "$50/hr",
  "minProjectSize": "$25,000 - $50,000",
  "portfolioCount": 21,
  "rating": 5.0,
  "reviewCount": 30,
  "googleRating": 5.0,
  "googleReviewCount": 40,
  "category": "IT Services",
  "scrapedAt": "2026-05-10T11:30:00.000Z",
  "error": null
}
```

***

### Requests per run

| Mode | Requests used |
|---|---|
| Default (1 page, scrapeProfiles off) | 1 |
| 3 pages, scrapeProfiles off | 3 |
| 1 page, scrapeProfiles on, 50 agencies | 51 |
| 3 pages, scrapeProfiles on, 150 agencies | 153 |

Each listing page returns up to 50 agencies. With scrapeProfiles off, the listing page already contains all the fields in the output table above — no extra requests needed.

***

### What it's good for

- **Lead generation** — DesignRush agencies have public profiles with location, pricing, and client reviews, which makes them ready-to-use sales prospects.
- **Market research** — map competitor agencies by category, location, team size, or hourly rate across thousands of listings.
- **Partnership sourcing** — find agencies that complement your service offering by filtering on specific categories or geographies.
- **Directory building** — aggregate agency data from multiple DesignRush categories into a single structured dataset.

***

### Supported URL formats

| Format | Example |
|---|---|
| Category page | `https://www.designrush.com/agency/web-design-companies` |
| Category page with pagination | `https://www.designrush.com/agency/web-design-companies?page=2` |
| Direct agency profile | `https://www.designrush.com/agency/profile/digital-silk` |

***

### Notes

- Each DesignRush category has up to 108 pages with 50 agencies each (verified on the IT Services category).
- The `rating` and `reviewCount` fields reflect DesignRush platform reviews only. `googleRating` and `googleReviewCount` are sourced from Google and are null for agencies without a linked Google Business profile.
- Agency websites are returned with UTM tracking parameters stripped.
- The `services` field pulls from the agency's full services tab, not just the 3 preview tags shown on the card.
- Setting **Max listing pages** to 1 and **Max items** to 50 is the most cost-efficient configuration — one request, 50 complete records.

# Actor input Schema

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

List of DesignRush category or agency profile URLs to scrape. If left empty, defaults to the web design companies category. Example category pages: /agency/web-design-companies, /agency/seo-companies, /agency/digital-marketing-agencies.

## `categories` (type: `array`):

Optional DesignRush category slugs to scrape (e.g. web-design-companies, seo-companies). Used only when startUrls is empty.

## `scrapeProfiles` (type: `boolean`):

Visit each agency profile page for extra details. OFF by default — the listing page already contains name, website, location, services, team size, hourly rate, and budget. Enable only if you need additional profile-only fields.

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

Maximum number of pagination pages to follow per start URL.

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

Maximum number of agency records to collect per run.

## `requestTimeoutSecs` (type: `integer`):

Per-request timeout in seconds.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.designrush.com/agency/web-design-companies"
    },
    {
      "url": "https://www.designrush.com/agency/seo-companies"
    }
  ],
  "categories": [
    "web-design-companies",
    "seo-companies",
    "digital-marketing-agencies"
  ],
  "scrapeProfiles": false,
  "maxPages": 1,
  "maxItems": 50,
  "requestTimeoutSecs": 30
}
```

# 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.designrush.com/agency/web-design-companies"
        }
    ],
    "categories": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("kawsar/designrush-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.designrush.com/agency/web-design-companies" }],
    "categories": [],
}

# Run the Actor and wait for it to finish
run = client.actor("kawsar/designrush-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.designrush.com/agency/web-design-companies"
    }
  ],
  "categories": []
}' |
apify call kawsar/designrush-agency-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,kawsar/designrush-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/TWCfCWMLy0ahonAbV/builds/a6DEazHPD7e3NrYI4/openapi.json
