# Pinterest Search Scraper (`socialdataapi/pinterest-search-scraper`) Actor

Pinterest Search Scraper — Search and extract Pinterest data including pin titles, descriptions, image URLs, board details, usernames, links, engagement metrics, and pin URLs. Useful for content research, trend discovery, competitor analysis, and social media insights.

- **URL**: https://apify.com/socialdataapi/pinterest-search-scraper.md
- **Developed by:** [Social Data API](https://apify.com/socialdataapi) (community)
- **Stats:** 3 total users, 2 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 and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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 Search Scraper — Pins, Images, Videos, Boards and Creators

Pinterest Search Scraper collects the pins Pinterest shows for any search term, all pins or video pins only. Each pin comes with its title, description, outbound link and site, dominant color, creation date, original image, video links, reaction counts, board, the person who saved it and the original creator. Every response is structured JSON — ready to pass directly to an LLM, index into a vector store, or feed a trend research pipeline. **No Pinterest account or cookies needed.** Type one keyword and see what Pinterest shows people today.

***

### What data can I extract with Pinterest Search Scraper?

Using this Pinterest Pin API, you will be able to extract the following Pinterest pin data:

| 📌 Pin title | 📝 Description | 🔗 Outbound link | 🌐 Linked site (or "Uploaded by user") |
| --- | --- | --- | --- |
| 🖼️ Original image URL | 📐 Image width and height | 🎬 Video links (MP4 / HLS, video pins) | 🎨 Dominant color |
| 📅 Creation date | 👍 Reaction counts | 🗂️ Board (name, link, pin count, cover, owner) | 👤 Person who saved the pin (with follower count) |
| 🧑 Original creator (if Pinterest names one) | 🆔 Pin ID | 🔎 Search term the pin was found for | 🏷️ Item type |

***

### How to use Pinterest Search Scraper

Marketers, shop owners and researchers use it to scrape Pinterest search results and get one clean row per pin from a single run.

**Copy to your AI assistant:**

```text
Pinterest Search Scraper is an Apify Actor that returns the pins Pinterest shows for a search term as structured JSON: title, description, outbound link and linked site, dominant color, creation date, original image with its size, video links, reaction counts, board, the person who saved the pin and the original creator. Use it whenever someone needs Pinterest pins without cookies, a login, or a browser - trend research for a keyword, finding the sites and creators behind popular pins, or collecting video pins for a topic. Inputs: query (string, the search term, default "wallpaper"), filter (string, "all" | "videos", default "videos"), limit (integer, number of pins from 1 to 10000, default 10), proxyConfiguration (object, proxy settings, default Apify Residential proxy). One row per pin; a run ends early when Pinterest has no more results for the search term.
```

#### Pinterest Search Scraper MCP Server: use these Actors from ChatGPT, Claude or Cursor

Point your AI assistant at Apify's MCP server and it can find, add and run this Actor on its own. No glue code, no scraping logic in your prompts.

```bash
claude mcp add --transport http apify "https://mcp.apify.com"
```

#### Step by step

1. [Create a free Apify account](https://console.apify.com/sign-up).
2. Open Pinterest Search Scraper in the Apify Store.
3. Type your Pinterest keyword, choose all pins or video pins only, and set the number of pins.
4. Click **Start** (or send your API request).
5. Download or stream your results in JSON, CSV or Excel.

#### How to scale Pinterest Search Scraper to bulk

Each run takes one search term and returns up to 10,000 pins for it, so a single run already covers a deep search. To use it as a Pinterest keyword scraper across many terms, start one run per keyword through the Apify API in a loop, or save each keyword as a task and put the tasks on a schedule. Every run writes its pins to its own dataset, and each row carries the search term, so results from many runs can be merged without losing track of where a pin came from.

***

### ✨ Features

Pinterest Search Scraper fetches clean, structured pins from Pinterest search ⚡. It's ideal for trend research, product and affiliate research, creator discovery and building image or video collections for a topic. As a Pinterest scraper that also works as a Pinterest video scraper, it extracts, per pin:

- **Title and description** – the pin's own text, or Pinterest's image description when the pin has none
- **Original image** – the full-size image link with its width and height
- **Video links** – playable MP4 and HLS links for video pins
- **Outbound link and site** – where the pin leads, or "Uploaded by user"
- **Board** – the board name, link, pin count, cover image and owner
- **Saver and original creator** – username, full name, follower count and profile pictures
- **Reaction counts and dominant color** – Pinterest's reaction totals and the image's main color

⚡ No Pinterest login and no browser: rows are saved page by page while the run is going, so even a stopped run keeps the pins it already found.

***

### Use cases 💡

- **Trend researcher** — compare pin titles, colors and boards for a keyword week by week.
- **Affiliate marketer** — group pins by linked site to see who gets Pinterest traffic.
- **Influencer scout** — find niche creators by follower count of savers and original creators.
- **Video producer** — collect video links of top video pins for a topic.
- **Designer** — use it as a Pinterest image scraper to build mood boards from original images.
- **AI agent builder** — feed titles, descriptions and image links into a RAG index.

Building an AI agent? [Connect Pinterest Search Scraper over MCP](#mcp-integration-for-ai-agents) and let it call the actor on its own.

***

### Why choose this actor?

1. **Deep searches in seconds.** In a recorded local run this Pinterest pin scraper returned 120 pins for "wallpaper" in 10.5 seconds, and 30 video pins, each with video links and an original creator, in 5 seconds.
2. **Every pin comes with its people and its board.** A recorded pin for "laundry room ideas" came back with its original creator (1,458 followers), the person who saved it, its board "Laundry interior" with 9 pins, a 1080 × 1920 original image and its outbound link.
3. **17 fields, two content types, one input.** Choose all pins or video pins only, set any number from 1 to 10,000, and every row has the same 17 fields.

***

### ⬇️ Input

The Actor takes one search term per run, and the search term is the only required field.

| Parameter | Required | Type | Description | Example value |
| --- | --- | --- | --- | --- |
| `query` | Yes | String | The keyword or phrase to search for; an empty value searches for `wallpaper`. Default `wallpaper`. | `"laundry room ideas"` |
| `filter` | No | String | `all` (all pins) or `videos` (video pins only). Default `videos`. | `"all"` |
| `limit` | No | Integer | How many pins to collect, 1 to 10,000. A narrow search term can return fewer. Default `10`. | `20` |
| `proxyConfiguration` | No | Object | Proxy for every request when switched on (Apify Residential by default). When switched off, the Actor connects directly and switches to a US residential proxy automatically after a block. | `{"useApifyProxy": false}` |

A number of pins that is not a whole number stops the run right away with a clear status message.

#### Example input

```json
{
  "query": "laundry room ideas",
  "filter": "all",
  "limit": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

***

### ⬆️ Output

Every pin is one typed, normalized JSON item with the same 17 fields on every run, added to the dataset page by page while the run is going. You can export Pinterest pins to CSV, Excel or JSON (the default) from the Console or the API; a short run summary is also kept in the key-value store under `OUTPUT`.

#### Example output

A real pin from the example input above:

```json
{
  "query": "laundry room ideas",
  "node_id": "59250551352172215",
  "type": "pin",
  "title": "Home Interior Design Laundry Room",
  "description": "a washer and dryer in a small room with white walls, open shelving",
  "domain": "dir.trendspace.vip",
  "link": "https://dir.trendspace.vip/home-decor?v=1a62e7e7e3d0a",
  "dominant_color": "#b09b83",
  "created_at": "Mon, 28 Sep 2026 18:59:52 +0000",
  "board": {
    "node_id": "Qm9hcmQ6NTkyNTA2MjAwMzcwMzY4Mjc=",
    "images": { "170x": null },
    "pin_count": 9,
    "image_cover_hd_url": "https://i.pinimg.com/474x/05/ff/ec/05ffeccb67a688d861ecde1214045583.jpg",
    "collaborating_users": [],
    "board_order_modified_at": "Tue, 29 Sep 2026 14:35:29 +0000",
    "id": "59250620037036827",
    "name": "Laundry interior",
    "image_cover_url": "https://i.pinimg.com/200x150/05/ff/ec/05ffeccb67a688d861ecde1214045583.jpg",
    "cover_images": { "222x": null },
    "owner": {
      "node_id": "VXNlcjo1OTI1MDY4ODc1NjA4MDA1NA==",
      "is_ads_only_profile": false,
      "id": "59250688756080054",
      "image_small_url": "https://s.pinimg.com/images/user/default_30.png",
      "username": "lodaralk",
      "follower_count": 0,
      "is_verified_merchant": false,
      "verified_identity": {},
      "image_medium_url": "https://s.pinimg.com/images/user/default_75.png",
      "full_name": "Lodaralk",
      "image_large_url": "https://s.pinimg.com/images/user/default_140.png"
    },
    "url": "/lodaralk/laundry-interior/",
    "type": "board",
    "section_count": 0,
    "collaborator_count": 0,
    "is_collaborative": false
  },
  "reaction_counts": { "1": 1 },
  "native_creator": {
    "node_id": "VXNlcjoxMDQ2NTI0MTY5NTY4ODg1Mzkz",
    "is_ads_only_profile": false,
    "id": "1046524169568885393",
    "image_small_url": "https://i.pinimg.com/30x30_RS/ce/72/e7/ce72e760b25d1f3d940240af09ce4877.jpg",
    "username": "elsewiegand569",
    "follower_count": 1458,
    "is_verified_merchant": false,
    "verified_identity": {},
    "image_medium_url": "https://i.pinimg.com/75x75_RS/ce/72/e7/ce72e760b25d1f3d940240af09ce4877.jpg",
    "full_name": "Else Wiegand",
    "image_large_url": "https://i.pinimg.com/140x140_RS/ce/72/e7/ce72e760b25d1f3d940240af09ce4877.jpg"
  },
  "pinner": {
    "node_id": "VXNlcjo1OTI1MDY4ODc1NjA4MDA1NA==",
    "is_ads_only_profile": false,
    "id": "59250688756080054",
    "image_small_url": "https://s.pinimg.com/images/user/default_30.png",
    "username": "lodaralk",
    "follower_count": 0,
    "is_verified_merchant": false,
    "verified_identity": {},
    "image_medium_url": "https://s.pinimg.com/images/user/default_75.png",
    "full_name": "Lodaralk",
    "image_large_url": "https://s.pinimg.com/images/user/default_140.png"
  },
  "image_url": "https://i.pinimg.com/originals/fe/2d/e7/fe2de7452ba3c8cbdba919f7dbdfeda5.jpg",
  "image_width": 1080,
  "image_height": 1920,
  "video_urls": []
}
```

The board thumbnails in the 170x and 222x sizes are always null because Pinterest no longer shows board images in those sizes to visitors; the board cover links carry the cover image instead.

***

### How does it work?

The Actor runs your search on Pinterest the way a logged-out visitor would and reads the same public data the Pinterest site loads, with plain web requests and no browser. It returns only what any visitor can see without an account: no login, no cookies, nothing private. It pages through the results until it has the number of pins you asked for or Pinterest has no more, skips duplicates and non-pin items, and saves each page as soon as it is ready. Requests go through the Apify Residential proxy by default; if you switch the proxy off, it connects directly and moves to a residential proxy automatically after a block. Every request gets up to three attempts with growing waits. As a Pinterest pin data extractor, it keeps the same field names on every run, and a value Pinterest does not send stays empty or null instead of being filled in.

***

### How do you integrate Pinterest Search Scraper into your stack?

It works with what you already use: the REST API from any language, MCP for AI agents, and no-code tools, so you can treat it as a Pinterest search API.

#### Using Pinterest Search Scraper with the Apify API

Start a run with your Apify token and an input like the example above, then read the pins from the run's default dataset. The official Apify clients for Python and JavaScript wrap both steps in a few lines.

*Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request.*

#### MCP integration for AI agents

Add Apify's MCP server to your agent with one command:

```bash
claude mcp add --transport http apify "https://mcp.apify.com"
```

This registers Apify's tools with your agent; it then finds this Actor through the server's search, add and call actor tools and runs it as a tool it can call directly. It works with Claude Code, Cursor and Windsurf, and the pins come back as JSON your agent can use mid-conversation.

#### No-code tools (n8n, Make, LangChain)

- **n8n:** add the Apify node and choose "Run an Actor", pick this Actor and pass the input. You can also use the HTTP Request node against the Apify API with your token.
- **Make:** use the Apify app's "Run an Actor" module, then "Get Dataset Items" to pass each pin to the next step of your scenario.
- **LangChain:** install `langchain-apify` and point its Actor tool at this Actor, so your chain can run a Pinterest search and read the pins.

***

### Is it legal to scrape Pinterest data?

Collecting publicly available data is generally lawful, although Pinterest's Terms of Service restrict automated access. Pinterest Search Scraper returns only publicly available data — what any user sees without logging in. The saver, original creator and board owner details identify people, so they can count as personal data: scraping public data is generally permissible under GDPR, but storing and using it must comply with local data-protection law, such as GDPR and CCPA. Consult legal counsel if your use case involves bulk storage of personal data.

***

### Frequently asked questions

#### What fields does Pinterest Search Scraper return?

It returns the pin title, description, outbound link, original image and video links, plus the dominant color, creation date, reaction counts, board, the person who saved the pin and the original creator. See [the data fields section](#what-data-can-i-extract-with-pinterest-search-scraper) for the full list.

#### Does Pinterest Search Scraper require a Pinterest account or login?

No. Only public pin data is extracted, and no Pinterest credentials or cookies are needed.

#### How fast does Pinterest Search Scraper run?

A recorded local run returned 120 pins for "wallpaper" in 10.5 seconds, and another returned 30 video pins in 5 seconds. The data is live from Pinterest on every run, not cached.

#### What happens if a pin is private or doesn't exist?

Private pins never appear in search results, so they are simply not returned. If nothing matches your search term, the run finishes successfully with no rows and a status message suggesting a broader term or switching to all pins. If Pinterest blocks the search before any pin is collected, the run fails with the reason in its status message; if it stops later, the pins found so far are kept.

#### Can I scrape multiple Pinterest pins at once?

Yes. One run returns up to 10,000 pins for a search term; for many search terms, start one run per keyword through the API or a schedule.

#### Does Pinterest Search Scraper work with Claude, ChatGPT, and other AI agent tools?

Yes — Pinterest Search Scraper is available as an MCP tool through Apify's MCP server. Register it in Claude Code, Cursor or Windsurf with:

```bash
claude mcp add --transport http apify "https://mcp.apify.com"
```

Any agent that can call an HTTP endpoint can also use the REST API directly.

#### Does Pinterest Search Scraper return data in a format LLMs can use directly?

Yes. Every pin is typed, normalized JSON with consistent field names. There is no HTML to parse and no selectors to maintain, so you can pass it straight to an LLM, index it into a vector store, or hand it to an agent tool without a transformation step.

#### What happens when Pinterest changes its layout or updates its anti-bot system?

The Actor is maintained, and when Pinterest changes, it is updated so that your calls keep returning the same JSON fields with no changes on your end.

#### Can I use Pinterest Search Scraper without managing proxies or browser infrastructure?

Yes. Proxy use, retries and switching to a residential proxy after a block run on the Actor's side, and no browser is involved. You send one request and get structured JSON back: no proxy accounts of your own, no headless browser setup, no maintenance.

#### Which Pinterest pin fields work best for AI training data and RAG indexing?

For RAG, use the text-rich fields: the pin title, description, linked site and board name. For training data, use the image link with its width and height, the dominant color, reaction counts and follower counts. Values are plain strings, numbers, lists and objects with fixed keys, so little cleanup is needed.

***

### Your feedback

Found a bug or missing a field? Let us know through the Actor's page in Apify Console. Every report is read, and fixes ship as Pinterest changes.

# Actor input Schema

## `query` (type: `string`):

The keyword or phrase to search for on Pinterest, for example wallpaper, laundry room ideas or vegan recipes. One search term per run. An empty value searches for "wallpaper".

## `filter` (type: `string`):

All pins, or video pins only. The default is video pins only.

## `limit` (type: `integer`):

How many pins to collect (1 to 10,000). A narrow search term can return fewer, because the run ends when Pinterest has no more results. Free plan: up to 20 pins per input (this run's search term) and 200 pins per month; paid plans have no limit.

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

Used for every request when switched on (Apify Residential by default). When switched off, the Actor connects directly and switches to a US residential proxy automatically after a block.

## Actor input object example

```json
{
  "query": "wallpaper",
  "filter": "videos",
  "limit": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

One row per pin: title, description, link, domain, dominant color, created date, board, reactions, creator, pinner, image and video links.

## `outputSnapshot` (type: `string`):

JSON object under the OUTPUT key: query, filter, requested, limit, pins, pages and error (when the search stopped early or failed).

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

// Run the Actor and wait for it to finish
const run = await client.actor("socialdataapi/pinterest-search-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 = {
    "query": "wallpaper",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

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

```

## MCP server setup

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