# Pinterest Scraper - $1 / 1000 Results (`scrapeunblocker/pinterest-scraper`) Actor

Scrape Pinterest as clean JSON: pin search (pins, videos, boards, users), boards with their pins, profiles with stats and pins, and single pins with saves, comments and every image size. No login. $1 per 1000 results.

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

## Pricing

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

## Pinterest Scraper

Scrape **Pinterest** as clean, structured JSON - **search results** (pins, video pins, boards or users), **every pin of a board** (its sections included), **profiles** with the pins their owner created and their boards, and **single pins** with saves, repins, comment and share counts and hashtags. Each pin comes with its **title**, **description**, **creation date**, **outbound link** and domain, **image URLs in every size**, the **video URL** for video pins, the pinner and the board. No Pinterest account, API key or proxies to set up.

### Features

- **Search** - pins, video pins, boards or users for any keyword, in Pinterest's order (`position`), up to 1000 per search.
- **Boards** - the board (name, description, pin, follower and section counts, owner) and all its pins, up to 2000.
- **Profiles** - bio, website, follower, following, pin and board counts and monthly views, the pins the owner created (with numeric ids) and, optionally, all their boards.
- **Single pins** - full detail: saves, repins, comments, shares, hashtags, every image size from 236 px to the original.
- **Images and videos** - image URLs in sizes 236x, 474x, 564x, 736x and original, video pins with an HLS or MP4 URL, duration and thumbnail.
- **Paging handled** - set how many results you want per input; the scraper follows Pinterest's pages until it has them.
- **Deduplicated** - the same board, profile or pin given twice is read once.

### Use cases

- **Trend research** - what gets pinned and saved for a keyword in your niche.
- **Content and design inspiration** - collect pins, images and outbound links by topic.
- **Brand and competitor monitoring** - follow a brand's profile, its boards and the reach of its pins.
- **E-commerce** - find pins linking to your shop or your competitors' product pages.
- **Influencer discovery** - search users and compare follower counts and activity.

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `searches` | array | - | Keywords or pinterest.com/search links (one search each). |
| `searchScope` | string | `pins` | What searches return: `pins`, `videos`, `boards` or `users`. |
| `boardUrls` | array | - | Board links or `user/board`. |
| `profiles` | array | - | Usernames or profile links. |
| `includeBoards` | boolean | `false` | Also return each profile's boards. |
| `pinUrls` | array | - | Pin links or numeric pin ids. |
| `maxResultsPerInput` | integer | `50` | Results per search (up to 1000), board or profile (pins, up to 2000); 0 = a profile without pins. |
| `concurrency` | integer | `3` | Inputs read at the same time (1-5). |

Give any mix of the four lists. With all of them empty the run searches the example `living room ideas`.

#### Example input

```json
{
  "searches": ["scandinavian kitchen", "home office ideas"],
  "searchScope": "pins",
  "boardUrls": ["https://www.pinterest.com/potterybarn/outdoor-oasis/"],
  "profiles": ["potterybarn"],
  "pinUrls": ["https://www.pinterest.com/pin/264938390612050665/"],
  "maxResultsPerInput": 100
}
```

### Output

One dataset item per pin, board, user or profile. Every item has `type` (`pin`, `board`, `user` or `profile`), `source` (`search`, `board`, `profile` or `pin` - which input list it came from) and `input` (the search, board, profile or pin you gave). A pin from a search:

```json
{
  "type": "pin",
  "id": "e1_AfqPShwaTkPtRbl_y7gih9_iOTVOMHb7_t2_K470HNTikTWOx00b",
  "numericId": null,
  "url": "https://www.pinterest.com/pin/e1_AfqPShwaTkPtRbl_y7gih9_iOTVOMHb7_t2_K470HNTikTWOx00b/",
  "title": "Bright Living Room: Cozy, Light-Filled Space",
  "description": "Discover a stylish living room with abundant natural light and spacious windows. Explore cozy furniture layouts, premium textures, and airy design ideas to elevate your home",
  "altText": "a living room filled with furniture and lots of windows",
  "createdAt": "2026-10-08T21:35:33Z",
  "link": null,
  "domain": null,
  "dominantColor": "#79583c",
  "imageUrl": "https://i.pinimg.com/originals/01/ef/c8/01efc833665d9f08b5a7527d5037e002.jpg",
  "images": {
    "236x": {"url": "https://i.pinimg.com/236x/01/ef/c8/01efc833665d9f08b5a7527d5037e002.jpg", "width": 236, "height": 348},
    "orig": {"url": "https://i.pinimg.com/originals/01/ef/c8/01efc833665d9f08b5a7527d5037e002.jpg", "width": 1206, "height": 1779}
  },
  "isVideo": false,
  "video": null,
  "reactionCount": 7,
  "saveCount": null,
  "repinCount": null,
  "commentCount": null,
  "isPromoted": false,
  "pinner": {"username": "user_a", "fullName": "User A", "followerCount": 73},
  "board": {"id": "919367780121935417", "name": "Living room", "url": "https://www.pinterest.com/user_a/living-room/", "pinCount": 602},
  "position": 1,
  "source": "search",
  "input": "living room ideas"
}
```

A board input first returns the board itself, then its pins (which also carry `saveCount` and `repinCount`):

```json
{
  "type": "board",
  "id": "264938459268229319",
  "name": "Outdoor Oasis",
  "url": "https://www.pinterest.com/potterybarn/outdoor-oasis/",
  "description": "Create an outdoor oasis crafted to weather the elements with all the comforts of home. Embrace the fresh air with seamless spaces that blur the lines between indoors and out.",
  "pinCount": 319,
  "followerCount": 1021313,
  "sectionCount": 6,
  "coverImageUrl": "https://i.pinimg.com/custom_covers/200x150/264938459268229319_1741640548.jpg",
  "isCollaborative": false,
  "owner": {"username": "potterybarn", "fullName": "Pottery Barn", "followerCount": null},
  "source": "board",
  "input": "https://www.pinterest.com/potterybarn/outdoor-oasis/"
}
```

A profile input returns the profile, then the pins its owner created (with `numericId`) and, with `includeBoards`, its boards:

```json
{
  "type": "profile",
  "id": "264938527987338255",
  "username": "potterybarn",
  "fullName": "Pottery Barn",
  "url": "https://www.pinterest.com/potterybarn/",
  "about": "Ideas & inspiration for real life. Mindfully made. Crafted to last.",
  "websiteUrl": "http://potterybarn.com",
  "followerCount": 1122417,
  "followingCount": 222,
  "pinCount": 19315090,
  "boardCount": 90,
  "monthlyViews": 10000001,
  "isVerifiedMerchant": true,
  "verified": true,
  "createdAt": "2012-02-20T23:13:20Z",
  "imageUrl": "https://i.pinimg.com/280x280_RS/c0/c2/52/c0c252100791f0a4ed29e7bb31b85a0f.jpg",
  "source": "profile",
  "input": "potterybarn"
}
```

A pin input returns the pin in full: `saveCount`, `repinCount`, `commentCount`, `shareCount`, `hashtags` and the image in every size.

The **Pins** view shows one row per item with the image, title, link and counts; the **Boards, users and profiles** view shows the account and board items. Inputs that return nothing or cannot be read go to the `ERRORS` record in the run's key-value store, with the reason. They are not billed.

### Pricing

**$1 per 1000 results** (pay per result) - one dataset item is one pin, board, user or profile; a board or profile input also yields one item for the board or profile itself. Failed inputs are free.

### Notes

- Images and videos are returned as URLs only; nothing is downloaded or stored.
- Pinterest shows signed-out visitors search and board pins under an opaque id (`e1_...`, with `numericId` null): stable, so it works for deduplication, but such a pin cannot be looked up on its own. Pin inputs need the numeric id, as in a pinterest.com/pin/<number>/ link; profile pins carry it.
- Pins in search results carry a reaction count but not saves or comments; board and profile pins add saves and repins, and pin inputs add comments, shares and hashtags.
- People appear only as username, full name and follower count.
- Powered by [ScrapeUnblocker](https://www.scrapeunblocker.com).

# Actor input Schema

## `searches` (type: `array`):

Keywords to search on Pinterest (one search each), e.g. 'living room ideas'. A pinterest.com/search/... link works too. 'Search for' below picks pins, videos, boards or users.

## `searchScope` (type: `string`):

What the searches return.

## `boardUrls` (type: `array`):

Board links (https://www.pinterest.com/<user>/<board>/) or 'user/board'. Each returns the board (name, description, pin and follower counts, owner) and its pins, those in its sections included.

## `profiles` (type: `array`):

Usernames or profile links (https://www.pinterest.com/<user>/). Each returns the profile (bio, website, follower, following, pin and board counts, monthly views) and the pins its owner created.

## `includeBoards` (type: `boolean`):

On: each profile also returns its boards (up to 500), one item per board.

## `pinUrls` (type: `array`):

Pin links (https://www.pinterest.com/pin/<number>/) or numeric pin ids. Each returns the pin with saves, repins, comment and share counts, hashtags and every image size.

## `maxResultsPerInput` (type: `integer`):

How many results to collect for each search (up to 1000), board or profile (pins, up to 2000). For a profile, 0 returns the profile (and boards) only. Pages are followed until the number is reached or the results end.

## `concurrency` (type: `integer`):

How many inputs to read at the same time (1-5).

## Actor input object example

```json
{
  "searches": [
    "living room ideas"
  ],
  "searchScope": "pins",
  "includeBoards": false,
  "maxResultsPerInput": 50,
  "concurrency": 3
}
```

# Actor output Schema

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

One item per pin, board, user or profile, with its type, the input it came from and image URLs

## `errors` (type: `string`):

Searches, boards, profiles or pins that returned nothing or could not be read, with the reason (not billed)

# 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 = {
    "searches": [
        "living room ideas"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapeunblocker/pinterest-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 = { "searches": ["living room ideas"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapeunblocker/pinterest-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 '{
  "searches": [
    "living room ideas"
  ]
}' |
apify call scrapeunblocker/pinterest-scraper --silent --output-dataset

```

## MCP server setup

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