# Behance Scraper — Designers, Projects & Portfolios (`tortuga/behance-scraper`) Actor

Scrape Behance creatives (location, occupation, fields, tools, availability, social links), projects with stats, portfolios and job listings. Filter by country, city, field, tool. No login.

- **URL**: https://apify.com/tortuga/behance-scraper.md
- **Developed by:** [Trevor Ortega](https://apify.com/tortuga) (community)
- **Categories:** Lead generation, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.20 / 1,000 person, project or jobs

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

## Behance Scraper — Designers, Projects & Portfolios

Find designers and other creatives on **Behance** and export them as clean leads: name, profile URL, occupation, company, city and country, creative fields, tools (Figma, Photoshop, Blender...), followers, appreciations, project views, **available for freelance / full-time** flags, website and social links, work history, education and languages. Search **people** or **projects** by keyword and filter by **country, state, city, creative field, tool and availability**, scrape a **profile with its whole portfolio**, get **full project pages**, or list the **Behance job board**.

No login, no cookies, no browser: the Actor reads the same public JSON Behance's own web app loads for logged-out visitors, 48 people or projects per request. Download the results as JSON, CSV or Excel, or pull them through the API into your CRM, Google Sheets or an LLM pipeline. You pay per item you get.

Built for recruiters, agencies and studios looking for designers, and for anyone tracking creative work on Behance.

### What data does Behance Scraper extract?

People (`type: "person"`) from people searches and profile URLs:

| Field | Description |
|---|---|
| `id`, `username`, `url` | Behance user id, username and profile URL |
| `displayName`, `firstName`, `lastName` | Name as shown on the profile |
| `occupation`, `company` | Headline occupation and company |
| `location`, `city`, `state`, `country` | Location as shown (`"London, United Kingdom"`) and its parts |
| `creativeFields` | Up to 3 creative fields (`["Branding", "Logo Design", "Graphic Design"]`) |
| `tools` | Tools the creative uses most (`["Figma", "Adobe Photoshop", ...]`) |
| `followers`, `following`, `appreciations`, `projectViews` | Profile stats |
| `availableForFreelance`, `availableForFullTime` | "Available for hire" flags (`null` when the creative never set them) |
| `openToRelocation`, `openToRemote` | Full-time job preferences |
| `freelanceMinBudget`, `freelanceBudgetCurrency` | Minimum project budget the creative set for freelance inquiries |
| `offersFreelanceServices`, `featuredFreelancer`, `completedFreelanceProjects`, `freelanceReviews` | Behance freelance (hire) data |
| `creatorPro` | Has a Behance Pro badge |
| `website`, `webLinks` | Website and other links from the profile |
| `socialLinks` | Social accounts as published: `{service, url, verified}` (Instagram, LinkedIn, Dribbble, X, YouTube, ...) |
| `workExperience` | `{position, organization, location, start, end}` (`"2023-10"`, `"present"`) |
| `education` | `{school, degree, location, start, end}` |
| `languages` | `{language, proficiency}` |
| `avatarUrl`, `memberSince` | Profile picture (276 px) and sign-up date |
| `about`, `teams` | Profile URLs only: the "About me" sections and teams |
| `source`, `scrapedAt` | Which search or URL the item came from, and when |

Projects (`type: "project"`) from project searches, profile URLs and project URLs:

| Field | Description |
|---|---|
| `id`, `url`, `title` | Project id, URL and title |
| `ownerUsername`, `ownerName`, `ownerUrl`, `ownerLocation`, `owners` | First owner and the full list of co-owners |
| `creativeFields`, `tools` | Fields and tools tagged on the project |
| `appreciations`, `views`, `comments` | Project stats |
| `publishedAt` | Publish date (ISO 8601, UTC) |
| `isFeatured`, `featuredIn` | Behance curation ("Featured in Branding") with date |
| `coverUrl`, `coverOriginalUrl` | Cover image (808 px and original) |
| `matureContent` | Marked as adult content |
| `description`, `tags`, `license`, `imageUrls`, `text`, `embedCount` | With **Fetch full project details** and for project URLs: description, tags, licence, every image of the project (1200 px), the text blocks and the number of embedded videos/media |

Jobs (`type: "job"`) from the job board: `id`, `url`, `title`, `jobType` (`full-time` / `freelance` / `contract`), `companyName`, `location`, `locations`, `isRemote`, `remoteStatus`, `budgetMin`, `budgetMax`, `currency`, `salaryTimeframe`, `expiresAt`, `status`, `hiringContactName`, `hiringContactUrl`, `companyLogoUrl`.

### How to use Behance Scraper

1. Pick **What to search** (`people`, `projects` or `jobs`) and type **Search terms**, one per line. You can also leave the terms empty and search by filters only.
2. Narrow the search with **Country** (`US`, `GB`, `DE`...), **State / region**, **City**, **Creative field**, **Tool**, **Available for hire**, **Sort** and, for projects, **Time period**.
3. Or paste **Behance URLs**:

   | URL | What you get |
   |---|---|
   | `https://www.behance.net/grapheine` | Profile item + the creative's projects, newest first |
   | `https://www.behance.net/gallery/234862147/...` | That project with full details |
   | `https://www.behance.net/search/users?search=logo&country=US&city=New+York` | People search with the URL's filters |
   | `https://www.behance.net/search/projects?search=packaging&sort=published_date` | Project search with the URL's filters |
   | `https://www.behance.net/joblist?search=motion` | Job board listings |
4. Set **Max results** (total, caps the cost) and, with several searches, **Max results per search / URL**.
5. Click **Start**. Results appear in the **Dataset** tab (People, Projects and Jobs views); export from there or use the API.

### Input example

```json
{
  "searchType": "people",
  "searchTerms": ["logo designer", "brand designer"],
  "country": "US",
  "city": "New York",
  "tool": "Figma",
  "availability": "freelance",
  "maxItemsPerSource": 200,
  "maxItems": 400,
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
```

### Output example

A person from a people search (shortened):

```json
{
  "type": "person",
  "id": 1211613747,
  "username": "wolfpixelbranding",
  "url": "https://www.behance.net/wolfpixelbranding",
  "displayName": "Wolfpixel Branding",
  "occupation": "Logo Design & Brand Identity Specialists",
  "company": "Wolfpixel",
  "location": "WY, USA",
  "state": "Wyoming",
  "country": "United States",
  "website": "https://www.wolfpixel.agency/",
  "creativeFields": ["Branding", "Logo Design", "Web Design"],
  "tools": ["Adobe Photoshop", "Adobe Illustrator", "Figma", "Adobe InDesign", "Adobe After Effects"],
  "appreciations": 17208,
  "followers": 1810,
  "following": 328,
  "projectViews": 202447,
  "availableForFreelance": true,
  "availableForFullTime": false,
  "freelanceMinBudget": 100,
  "freelanceBudgetCurrency": "USD",
  "offersFreelanceServices": true,
  "creatorPro": true,
  "completedFreelanceProjects": 1,
  "freelanceReviews": 1,
  "socialLinks": [],
  "workExperience": [],
  "education": [],
  "avatarUrl": "https://pps.services.adobe.com/api/profile/C46A3CA86222D6760A495E1C@AdobeID/image/193ac0d6-90db-48c2-8932-b3849fea9227/276",
  "memberSince": "2022-03-05T03:18:23Z",
  "source": "people: logo designer",
  "scrapedAt": "2026-10-10T06:10:08Z"
}
```

A project with full details (shortened):

```json
{
  "type": "project",
  "id": 234862147,
  "url": "https://www.behance.net/gallery/234862147/Arome-Visual-Identity-Bakery-Branding",
  "title": "Arome Visual Identity & Bakery Branding",
  "ownerUsername": "woblcreativeagency",
  "ownerName": "WOBL Creative",
  "ownerUrl": "https://www.behance.net/woblcreativeagency",
  "ownerLocation": "Bali, Indonesia",
  "creativeFields": ["Branding", "Graphic Design", "Illustration"],
  "tools": ["Adobe Photoshop", "Adobe After Effects"],
  "appreciations": 3186,
  "views": 52114,
  "comments": 256,
  "publishedAt": "2025-09-18T06:35:44Z",
  "isFeatured": true,
  "featuredIn": [{ "name": "Branding", "url": "https://www.behance.net/galleries/graphic-design/branding", "featuredAt": "2026-05-15T00:36:50Z" }],
  "coverUrl": "https://mir-s3-cdn-cf.behance.net/projects/808/...",
  "description": "The heart and soul of Arôme is steeped in Alix’s obsession for time-honoured French baking techniques ...",
  "tags": ["bakery", "Food", "menu", "bread", "visual identity", "branding"],
  "license": "cc by-nc-nd",
  "imageUrls": ["https://mir-s3-cdn-cf.behance.net/project_modules/max_1200/4827ec234862147.68cba6ab65e26.png", "..."]
}
```

A job:

```json
{
  "type": "job",
  "id": 365869,
  "url": "https://www.behance.net/joblist/fulltime/365869/Product-Development-Designer",
  "title": "Product Development Designer",
  "jobType": "full-time",
  "companyName": "Exchange Life",
  "location": "Anywhere",
  "isRemote": true,
  "budgetMin": 20,
  "budgetMax": 20,
  "currency": "USD",
  "salaryTimeframe": "HOURLY",
  "expiresAt": "2026-10-29T21:28:18Z",
  "status": "ACTIVE"
}
```

### How to find designers on Behance by location, tool and availability

Choose **People**, type what the person does (`logo designer`, `ui ux designer`, `3d artist`) and set **Country** plus **City** or **State / region**. Add a **Creative field** (`Branding`, `UI/UX`, `Illustration`, ...) and a **Tool** (`Figma`, `Blender`, `Adobe Illustrator`, ...) to narrow it down, and **Available for hire** to keep only creatives open to freelance or full-time work. **Sort** by `Most followed` or `Most appreciated` to start with the best-known people. A search goes up to 10,000 people deep. **School** keeps only people whose profile lists that school in their education (Behance has no school search, so it is checked on each profile; put the school name in the search term too).

### How to scrape a Behance portfolio and its projects

Paste a profile URL (`behance.net/<username>`): you get the profile item (with the "About me" text, work history, social links) and every project of the portfolio, newest first, with appreciations, views, comments, fields and tools. Turn off **Include projects of profile URLs** to get just the profile, or use **Max results per search / URL** to take, say, the 20 newest projects of each creative. Project URLs (`behance.net/gallery/...`) return the full project: description, tags, licence and all image URLs.

### How to scrape Behance projects by keyword

Choose **Projects**, type keywords and optionally filter by creative field, tool, country of the owner and **Time period**. Sort by `Most appreciated`, `Most viewed`, `Most discussed` or `Most recent`. Turn on **Fetch full project details** to add description, tags and all image URLs (one extra request per project, same price per result).

### Monitor changes on a schedule

Turn on **Only new or changed items** and save the input as a task: each run then outputs only items earlier runs of the same task have not returned: new people matching your search, new projects in a portfolio or a project search (sort by `Most recent`), new job listings, plus people whose freelance / full-time availability changed. Items already returned are dropped before any detail request and are not charged, so a daily run where nothing changed costs almost nothing. Each run looks at the first **Max results per search / URL** results of every source (or **Max results** when that is empty). To schedule it, open the saved task in Apify Console and choose **Schedule**, for example daily at 07:00. New items carry `changeType: "new"`; changed people carry `changeType: "changed"` and `previousValues` with the old availability. Use **Monitoring key** to keep several schedules on the same input separate.

### Does it work without a Behance login?

Yes. It reads only what Behance shows logged-out visitors: no account, cookies or session are needed. E-mail addresses and phone numbers are not on public Behance profiles and are not collected; contact the creatives through the website and social links they publish.

### How much does it cost to scrape Behance?

You pay per saved item (person, project or job), plus the small platform usage of the run (paid by you). A people search returns 48 people per request; 1,000 people took 21 requests, 0.5 MB of residential proxy traffic and about $0.01 of platform usage. People dropped by the **School** or availability checks and items already seen in monitoring mode are not charged.

### Proxy note

Use Apify **RESIDENTIAL** proxy (the default). Behance's CDN refuses most datacenter IPs (HTTP 403 before the request reaches Behance); the Actor retries refused requests on a new IP. The answers are small JSON (about 2 KB per person, 1 KB per project), so residential traffic stays at a few MB per 1,000 results.

### Integrations and API

Use the run in Zapier, Make, n8n, Google Sheets, or call it from Python/Node with the Apify client. See the **API** tab for ready-made snippets.

### Is it legal to scrape Behance?

The Actor collects only data Behance shows publicly to any logged-out visitor: public profiles, projects and job listings, including the names, locations, links and work history creatives chose to publish on their profiles. It does not log in and does not collect anything private, hidden or behind a login. You are responsible for how you use the data and for complying with Behance's terms and applicable law (for example GDPR when you contact people or store their personal data).

### Support

Found a bug or need a field added? Open an issue in the **Issues** tab; it is usually answered within a day.

# Actor input Schema

## `searchType` (type: `string`):

What the search terms look for: `people` (creatives / designers with location, occupation, fields, tools, availability, social links, work history), `projects` (portfolio projects with owners, fields, tools, appreciations, views) or `jobs` (Behance job board: full-time and freelance listings).

## `searchTerms` (type: `array`):

Keywords, one per line (for example `logo designer`, `motion designer`, `packaging`). Each term is one Behance search, paged until the limits below. Leave empty to search by filters only (for example every branding designer in Berlin).

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

Profile URLs (`behance.net/username`: the profile plus its projects), project URLs (`behance.net/gallery/123/...`: full project details), search URLs copied from Behance (`/search/users?...`, `/search/projects?...`, with their filters) and job board URLs (`/joblist`).

## `country` (type: `string`):

Two-letter country code, for example `US`, `GB`, `DE`, `IN`. People search: where the creative lives; project search: where the owner lives.

## `state` (type: `string`):

Full state or region name as Behance shows it, for example `California` or `New York` (not `CA`). Use together with Country.

## `city` (type: `string`):

City name, for example `London`, `New York`, `Berlin`. Use together with Country.

## `creativeField` (type: `string`):

One Behance creative field, for example `Branding`, `UI/UX`, `Illustration`, `Graphic Design`, `Motion Graphics`, `Photography`, `Architecture`, `Logo Design`, `Web Design`, `3D Art` (110 fields; the numeric id from a Behance URL's `field=` works too).

## `tool` (type: `string`):

One tool the creative or project uses, for example `Figma`, `Adobe Photoshop`, `Adobe Illustrator`, `Blender`, `Cinema 4D`, `Procreate`, `Adobe After Effects`. Names Behance knows are looked up automatically; the numeric id from a URL's `tools=` works too.

## `availability` (type: `string`):

Only creatives who marked themselves available for freelance work or for full-time jobs (project search: projects by such creatives).

## `school` (type: `string`):

Only people whose Behance education lists a school containing this text, for example `Parsons` or `Central Saint Martins`. Checked on each profile (Behance has no school search), so put the school in the search term too for faster results. People without education on their profile are skipped and not charged.

## `sort` (type: `string`):

Order of search results. `followed` is for people, `comments` for projects; `newest` = most recently published projects / newest members.

## `timePeriod` (type: `string`):

Project search only: limit to projects from today, this week or this month.

## `jobType` (type: `string`):

Job board search only: full-time jobs, freelance projects, contract jobs, or all of them.

## `includeProfileProjects` (type: `boolean`):

For every profile URL, also save the creative's projects (newest first), not just the profile. Each project is one charged result.

## `includeDetails` (type: `boolean`):

Make one extra request per project for its description, tags, licence, text and all image URLs. Project URLs always include them. Same price per result; the run takes longer.

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

Stop after this many items (people, projects, jobs) are saved in total. Every saved item is one charged result, so this caps the cost.

## `maxItemsPerSource` (type: `integer`):

Optional cap for each search term or URL, so several sources share the total fairly. With monitoring on, this is the window each run looks at (the first N results of every source; Max results is used when empty).

## `onlyNewOrChanged` (type: `boolean`):

Remember what earlier runs of this search returned and output only new items or items whose price/status changed. Use with a Schedule; unchanged items are not charged. Here: new people matching a search, new projects of a profile or search, new jobs, and people whose freelance / full-time availability changed.

## `monitoringKey` (type: `string`):

Name for this watch, so several schedules on the same search stay separate; defaults to a key derived from the search input

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

Apify RESIDENTIAL proxy (the default) is needed: Behance's CDN refuses most datacenter IPs. Requests are small JSON answers (about 2 KB per person, 1 KB per project), so 1,000 results use a few MB of residential traffic.

## Actor input object example

```json
{
  "searchType": "people",
  "searchTerms": [
    "logo designer"
  ],
  "availability": "any",
  "sort": "recommended",
  "timePeriod": "all",
  "jobType": "any",
  "includeProfileProjects": true,
  "includeDetails": false,
  "maxItems": 100,
  "onlyNewOrChanged": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "searchTerms": [
        "logo designer"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("tortuga/behance-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 = {
    "searchTerms": ["logo designer"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("tortuga/behance-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 '{
  "searchTerms": [
    "logo designer"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call tortuga/behance-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tortuga/behance-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/MemPMRstM2HBKSL5W/builds/3oMd2849Avj9l4L5o/openapi.json
