# Dribbble Designers Scraper - Profiles & Skills (`benthepythondev/dribbble-designers-scraper`) Actor

Scrape public Dribbble designer cards with profile, location, response time, PRO status, skills, avatar and portfolio shots.

- **URL**: https://apify.com/benthepythondev/dribbble-designers-scraper.md
- **Developed by:** [Ben](https://apify.com/benthepythondev) (community)
- **Categories:** Lead generation, Business, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 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.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.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/platform/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

## Dribbble Designers Scraper - Profiles, Skills, and Portfolio Work

Turn public Dribbble designer-directory pages into structured profile data. The
Actor collects the designer name, username, location, public response-time label,
PRO status, skill tags, profile URL, avatar, and visible portfolio-shot links
from each server-rendered directory card. Paste the Dribbble directory URLs that
match your location or skill filters and export the results to JSON, CSV, Excel,
XML, or the Apify API.

This Actor is built for design-talent research, agency sourcing, market mapping,
portfolio discovery, and analysis of public creative skills. It does not log in,
send messages, reveal private contact details, or automate outreach. It collects
only the public information visible on the supplied designer-directory page.

### What the Actor returns

Each dataset item represents one public designer card. The current output
includes:

- `id`: Dribbble's public designer identifier from the directory card;
- `username`: the public Dribbble username;
- `name`: the displayed designer name;
- `location`: the public location label when present;
- `response_time`: Dribbble's public response-time label when shown;
- `is_pro`: whether the card displays a PRO badge;
- `skills`: the public skill tags attached to the card;
- `profile_url`: the direct public Dribbble profile URL;
- `avatar_url`: the public profile-avatar image URL;
- `shot_urls`: links to portfolio shots visible on the card;
- `shot_image_urls`: image URLs for the visible portfolio previews;
- `search_url`: the directory URL that produced the record;
- `source` and `scraped_at`: provenance and collection time.

The dataset view puts the most useful research fields first while retaining the
complete arrays in JSON exports.

### Use cases

#### Design-talent discovery

Create a structured shortlist from public Dribbble directory filters. Review the
name, location, skills, and sample work before visiting a profile. The data helps
organize research; it does not replace a human portfolio review.

#### Agency and vendor research

Map designers in a region or specialty for potential partnerships, contractor
research, or market analysis. Keep the original `search_url` so every record can
be traced back to the filter used.

#### Skill and creative-market analysis

Count public skill tags across a directory result, compare specialties between
locations, or monitor which design categories appear in a chosen search over
time. Skill tags are self-described public labels, not verified credentials.

#### Portfolio discovery

Use `shot_urls` and `shot_image_urls` to build an internal review queue or visual
reference board. Follow Dribbble's content rights and do not republish portfolio
images without permission.

#### Recurring research

Save one task per location or skill filter and schedule periodic runs. Compare
stable profile IDs and URLs to identify newly visible profiles without manually
checking each page.

### Input

The Actor accepts one or more public Dribbble designer-directory URLs. Create the
filter on Dribbble, copy the resulting URL, and paste it into `searchUrls`.

```json
{
  "searchUrls": [
    "https://dribbble.com/designers?location=Berlin",
    "https://dribbble.com/designers/branding"
  ],
  "maxResults": 10
}
````

#### Input fields

- `searchUrls`: public Dribbble designer-directory URLs. Up to 20 URLs are
  processed per run.
- `maxResults`: maximum unique designers saved from each input URL, from 1 to
  30\. The default is 10 for a fast, low-cost first run.

Different Dribbble page types do not necessarily share the same public card
structure. Use URLs under the designer directory rather than generic user-search
or logged-in pages.

### Example output

```json
{
  "id": "78594",
  "username": "jonassoeder",
  "name": "Jonas Soder",
  "location": "Berlin, Germany",
  "response_time": "Responds within a few days",
  "is_pro": true,
  "skills": ["branding", "line art", "illustration"],
  "profile_url": "https://dribbble.com/jonassoeder",
  "avatar_url": "https://cdn.dribbble.com/users/78594/avatars/normal/example.png",
  "shot_urls": ["https://dribbble.com/shots/6206117-Rooster"],
  "search_url": "https://dribbble.com/designers?location=Berlin",
  "source": "Dribbble",
  "scraped_at": "2026-07-10T12:00:00+00:00"
}
```

Availability and card contents change as Dribbble updates its directory. Fields
that are not displayed publicly are returned as null or an empty list rather
than guessed.

### Pricing and predictable limits

The Actor uses pay per event pricing:

- a small Actor-start event is charged once per run;
- the `result` event is charged for each designer saved to the default dataset.

The result cap makes the maximum number of billable rows visible before a run.
For example, three URLs with `maxResults` set to 10 can save at most 30 unique
designer records, and duplicate profiles across URLs are not charged twice in
the same run. Apify platform usage is reported separately.

### Run through the API

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/benthepythondev~dribbble-designers-scraper/runs?token=$APIFY_TOKEN" \
  -H "content-type: application/json" \
  -d '{"searchUrls":["https://dribbble.com/designers?location=Berlin"],"maxResults":10}'
```

Store API tokens in environment variables or a secret manager. The run response
contains dataset links, and standard Apify task, schedule, webhook, and
integration features can be used without changing the Actor.

### Workflow ideas

- Export profiles to a private review sheet and add human evaluation columns.
- Deduplicate recurring runs by `id` or `profile_url` before creating alerts.
- Group skill tags for internal talent-market research.
- Send newly visible profiles to a Slack or email review queue.
- Use the public shot links to assemble a private portfolio-review workflow,
  while respecting ownership of the underlying creative work.
- Combine profile URLs with a separate public website-contact workflow only when
  the intended use and applicable rules permit it.

### Reliability and data quality

Dribbble's designer directory currently renders structured profile cards in the
HTML response. The Actor parses those source-specific cards, retries transient
request failures, deduplicates profiles, and fails explicitly if no cards are
returned. That failure behavior prevents a source change from appearing as a
successful empty dataset.

The parser uses stable public data attributes and semantic card classes rather
than guessing profiles from every page link. Defaults are bounded for daily
testing and production cost control. Because Dribbble is a third-party service,
its HTML, filters, fields, and access behavior can change without notice.

### Responsible use

Use the data for legitimate public-profile research and comply with applicable
terms, privacy rules, intellectual-property rights, and outreach laws. A public
profile does not imply consent to bulk messaging. Do not use the Actor to build
harassment lists, bypass access controls, or republish portfolio images as your
own. Evaluate designers on relevant work and avoid automated decisions based on
location, names, or other sensitive inferences.

### Limitations

- The Actor reads public directory cards, not full private or logged-in profiles.
- It does not return private emails, phone numbers, rates, availability, or
  message history.
- The response-time label and PRO status are snapshots and may change.
- The current directory page exposes up to 30 structured cards per URL; this
  Actor intentionally uses a bounded single-page collection path.
- Shot image URLs can contain dynamic resize placeholders and remain subject to
  Dribbble/CDN access and content rights.
- A filter can produce fewer rows than the requested maximum.

### Frequently asked questions

#### Does the Actor need a Dribbble login?

No. It collects public designer-directory cards and does not authenticate.

#### Can it search by skill or location?

Yes. Apply the desired public filter on Dribbble and provide the resulting
designer-directory URL.

#### Does it send messages to designers?

No. The Actor only returns public research data. Outreach is outside its scope.

#### Can I get more than 30 profiles from one URL?

The current implementation is deliberately limited to the structured cards on
one public directory response. Add several distinct filter URLs when they
represent legitimate research segments rather than trying to bypass site limits.

#### Why is a field null?

Dribbble does not display every field on every card. Missing data remains null or
empty so downstream systems can distinguish absence from an invented value.

#### What should I include in a support issue?

Provide the Apify run ID, a non-secret directory URL, the expected card, and the
field that is missing or incorrect. Do not post API tokens or private data.

### Related Actors

- [Website Contact Extractor](https://apify.com/benthepythondev/website-contact-extractor)
  for public website contact research.
- [Google Maps Email Scraper](https://apify.com/benthepythondev/google-maps-email-scraper)
  for local-business discovery and public website enrichment.
- [Username Availability Checker](https://apify.com/benthepythondev/username-availability-checker)
  for public brand and username research across supported sites.

If the Actor produces useful, accurate data for your workflow, a short honest
Store review helps other users assess it. Reproducible issues are handled fastest
when they include a run ID and the affected non-secret input URL.

**Keywords:** Dribbble designers scraper, Dribbble profile scraper, designer
directory API, graphic designer leads, design talent research, portfolio data
export, creative skills dataset, Dribbble location search, Apify lead research.

# Actor input Schema

## `searchUrls` (type: `array`):

Paste Dribbble designer directory URLs with the location or skill filters you need.

## `maxResults` (type: `integer`):

Maximum unique designer cards returned from each directory URL.

## Actor input object example

```json
{
  "searchUrls": [
    "https://dribbble.com/designers?location=Berlin"
  ],
  "maxResults": 10
}
```

# Actor output Schema

## `results` (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 = {
    "searchUrls": [
        "https://dribbble.com/designers?location=Berlin"
    ],
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("benthepythondev/dribbble-designers-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 = {
    "searchUrls": ["https://dribbble.com/designers?location=Berlin"],
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("benthepythondev/dribbble-designers-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 '{
  "searchUrls": [
    "https://dribbble.com/designers?location=Berlin"
  ],
  "maxResults": 10
}' |
apify call benthepythondev/dribbble-designers-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=benthepythondev/dribbble-designers-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Dribbble Designers Scraper - Profiles & Skills",
        "description": "Scrape public Dribbble designer cards with profile, location, response time, PRO status, skills, avatar and portfolio shots.",
        "version": "1.0",
        "x-build-id": "WoFcMAOiIV1caIa4Q"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/benthepythondev~dribbble-designers-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-benthepythondev-dribbble-designers-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/benthepythondev~dribbble-designers-scraper/runs": {
            "post": {
                "operationId": "runs-sync-benthepythondev-dribbble-designers-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/benthepythondev~dribbble-designers-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-benthepythondev-dribbble-designers-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",
                "properties": {
                    "searchUrls": {
                        "title": "Dribbble designer directory URLs",
                        "type": "array",
                        "description": "Paste Dribbble designer directory URLs with the location or skill filters you need.",
                        "default": [
                            "https://dribbble.com/designers?location=Berlin"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "Maximum designers per URL",
                        "minimum": 1,
                        "maximum": 30,
                        "type": "integer",
                        "description": "Maximum unique designer cards returned from each directory URL.",
                        "default": 10
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
