# Pinterest Board Scraper (`crw/pinterest-board-scraper`) Actor

Scrapes pins from any Pinterest board or \_created feed. Extracts image URL, title, save counts, source link, pinner profile, original creator, and board details. Up to 500 pins per run, sorted by pin ID descending. Private boards require valid session cookies.

- **URL**: https://apify.com/crw/pinterest-board-scraper.md
- **Developed by:** [CRW](https://apify.com/crw) (community)
- **Categories:** Social media, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.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.

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

## Pinterest Board Scraper

Pinterest boards are curated collections — but the platform gives you no way to export, filter, or analyze what's in them.

This scraper collects pins from any Pinterest board or user's created feed and gives you a clean, structured dataset. Images, save counts, pinner profiles, creator info, board details — all in one place.

### Why use this?

Pinterest is one of the best signals for visual trends, but there's no data export. You can see what's popular, but you can't measure it, compare it, or build on it.

This Actor changes that.

**Great for:**
- 🎨 **Designers & creative teams** — Analyze what content a board contains and which pins get the most saves
- 📦 **E-commerce brands** — Find which pinners and creators are driving saves in your niche
- 📊 **Marketers & analysts** — Benchmark boards and track what content is getting traction
- 🤖 **AI/ML teams** — Collect image datasets from curated boards (board feed provides richer metadata than `_created`)
- 🔍 **Researchers** — Identify original creators vs. curators across any topic area

### Two modes

| Input URL | What you get |
|---|---|
| `https://www.pinterest.com/username/board-name/` | All pins saved to a board — includes both original content and repins from others. Full metadata available. |
| `https://www.pinterest.com/username/board-name/section-slug/` | Pins in a specific board section only. |
| `https://www.pinterest.com/username/_created/` | Only pins the user uploaded themselves. Metadata is limited — title, description, and save count are often empty for directly uploaded images. |

The scraper detects the URL pattern and routes automatically — no extra configuration needed.

### What you get

Each pin comes with:

#### The pin itself

| Field | Description |
|---|---|
| **Image URL** | Direct link to the image (orig → 736x → 474x priority) |
| **Title & Description** | The pin's text content |
| **Save Count** | Saves on this specific pin instance. Available in board feed only — always null in `_created` feed. |
| **Total Save Count** | Aggregated saves across all of Pinterest — a more reliable engagement metric |
| **Repin Count** | How many times this pin has been repinned |
| **Dominant Color** | Hex color extracted from the image |
| **Domain & Link** | Where the pin links to |
| **Created At** | When the pin was created — available in `_created` feed only |
| **Pin URL** | Direct link to the pin page |
| **Is Video** | Whether it's a video pin |
| **Is Repin** | Whether this is a repin of someone else's content |
| **Is Shoppable** | Whether the pin has purchasable products |
| **Is Promoted** | Whether it's a paid ad |
| **Shopping Collection Items** | Product details (name, price, currency, stock status, purchase URL) |
| **Rich Summary** | Article metadata when the pin links to editorial content |

#### The pinner

The user who *saved* this pin to the board.

| Field | Description |
|---|---|
| **Username & Full Name** | Who saved this pin |
| **Profile URL** | Direct link to their Pinterest profile |

#### The original creator

The user who *created* the original content — may differ from the pinner when repinned.

| Field | Description |
|---|---|
| **Username & Full Name** | Who originally created this pin |
| **Profile URL** | Direct link to their Pinterest profile |

#### The board

| Field | Description |
|---|---|
| **Board Name & URL** | Which board this pin belongs to |
| **Board Owner** | Username of whoever created the board |

### How to run

1. Enter a board URL or a user's `_created` feed URL
2. Set how many pins you want (up to **500**)
3. Click **Start**

Results are sorted by pin ID descending and saved to the dataset once all pins are collected.

### Example

**Board feed input:**
```json
{
  "board_url": "https://www.pinterest.com/saraturkphotography/graduation-photography-poses/",
  "max_results": 100
}
````

**User created feed input:**

```json
{
  "board_url": "https://www.pinterest.com/photeeq/_created/",
  "max_results": 200
}
```

**Output (one pin):**

```json
{
  "id": "70437490134276",
  "title": "Graduation Photography Poses",
  "description": "Beautiful outdoor graduation shoot ideas",
  "image_url": "https://i.pinimg.com/originals/ab/cd/ef/abcdef.jpg",
  "pin_url": "https://www.pinterest.com/pin/70437490134276",
  "save_count": 500,
  "total_save_count": 13000,
  "repin_count": 89,
  "dominant_color": "#877c60",
  "domain": "example.com",
  "link": "https://example.com/article",
  "pinner_username": "saraturkphotography",
  "pinner_url": "https://www.pinterest.com/saraturkphotography",
  "native_creator_username": "saraturkphotography",
  "native_creator_url": "https://www.pinterest.com/saraturkphotography",
  "board_name": "Graduation Photography Poses",
  "board_url": "https://www.pinterest.com/saraturkphotography/graduation-photography-poses",
  "is_repin": false,
  "is_video": false,
  "is_shoppable": false,
  "is_promoted": false,
  "created_at": null
}
```

### Notes

- Up to **500 pins** per run
- Results are sorted by **pin ID descending**
- `created_at` is only available in `_created` feed — it is always `null` in board feeds
- `save_count` is only available in board feed — it is always `null` in `_created` feed
- Promoted pins are included and flagged with `is_promoted: true`
- Private boards require cookies from the board owner's account

***

### You Might Also Need

If you already know which board to scrape, great. But if you're still figuring out **what's trending on Pinterest** — or want to discover boards worth diving into — start with a keyword search first.

#### 🔍 [Pinterest Search Scraper](https://apify.com/crw/pinterest-search-scraper)

> Search Pinterest by keyword and get a structured dataset of pins — images, save counts, pinner profiles, and board info.

| | Pinterest Board Scraper | Pinterest Search Scraper |
|---|---|---|
| **Starting point** | You have a specific board URL | You have a keyword or topic |
| **Use case** | Deep-dive into one board's pins | Discover trending pins across all of Pinterest |
| **Coverage** | All pins in a board or section | Up to 200 pins per keyword search |
| **Best for** | Auditing a board, building image datasets | Trend research, finding influential pinners |

→ **[Try Pinterest Search Scraper](https://apify.com/crw/pinterest-search-scraper)**

# Actor input Schema

## `board_url` (type: `string`):

Pinterest board URL (e.g. "https://www.pinterest.com/username/board-name/"), board section URL (e.g. "https://www.pinterest.com/username/board-name/section-slug/"), or user created feed URL (e.g. "https://www.pinterest.com/username/\_created/").

## `max_results` (type: `integer`):

Maximum number of pins to collect. Must be between 10 and 500.

## Actor input object example

```json
{
  "board_url": "https://www.pinterest.com/saraturkphotography/graduation-photography-poses/",
  "max_results": 100
}
```

# Actor output Schema

## `api` (type: `string`):

REST API endpoint to download the collected pins programmatically.

# 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 = {
    "board_url": "https://www.pinterest.com/saraturkphotography/graduation-photography-poses/",
    "max_results": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("crw/pinterest-board-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 = {
    "board_url": "https://www.pinterest.com/saraturkphotography/graduation-photography-poses/",
    "max_results": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("crw/pinterest-board-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 '{
  "board_url": "https://www.pinterest.com/saraturkphotography/graduation-photography-poses/",
  "max_results": 100
}' |
apify call crw/pinterest-board-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Pinterest Board Scraper",
        "description": "Scrapes pins from any Pinterest board or _created feed. Extracts image URL, title, save counts, source link, pinner profile, original creator, and board details. Up to 500 pins per run, sorted by pin ID descending. Private boards require valid session cookies.",
        "version": "0.0",
        "x-build-id": "XeQcZFrDE4MBFb9yL"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/crw~pinterest-board-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-crw-pinterest-board-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/crw~pinterest-board-scraper/runs": {
            "post": {
                "operationId": "runs-sync-crw-pinterest-board-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/crw~pinterest-board-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-crw-pinterest-board-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": [
                    "board_url"
                ],
                "properties": {
                    "board_url": {
                        "title": "Board URL",
                        "type": "string",
                        "description": "Pinterest board URL (e.g. \"https://www.pinterest.com/username/board-name/\"), board section URL (e.g. \"https://www.pinterest.com/username/board-name/section-slug/\"), or user created feed URL (e.g. \"https://www.pinterest.com/username/_created/\")."
                    },
                    "max_results": {
                        "title": "Maximum number of pins",
                        "minimum": 10,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of pins to collect. Must be between 10 and 500.",
                        "default": 100
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
