# Pinterest Scraper — Pins from Search, Boards & Profiles (`khadinakbar/pinterest-scraper`) Actor

Scrape Pinterest pins from searches, boards, profiles and pin links, with full-size image, video link, saves, hashtags, outbound link, board, creator and date. No login needed; works with Apify MCP and the API.

- **URL**: https://apify.com/khadinakbar/pinterest-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** MCP servers, SEO tools, Social media
- **Features:** Limited permissions
- **Stats:** 116 total users, 16 monthly users, 99.1% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 pin scrapeds

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

### What is Pinterest Scraper?

Pinterest Scraper turns Pinterest searches, board links, pin links and profile links into one row per pin. Each row has the title, description, full-size image with its dimensions and dominant color, video link for video pins, save count, hashtags, outbound link and domain, board, creator and publish date. Marketers, ecommerce teams, trend researchers and AI agents use it to study visual trends, track brand boards and collect pin data in bulk, with no Pinterest login.

### Why marketers use it for trend research

- **Four ways in, one dataset.** Mix keyword searches, boards, single pins and profiles in one run.
- **Full-size media.** `image_url` points at the original image, and video pins include a direct `video_url`.
- **Engagement and timing.** `save_count` and `created_at` show what people save and when it was posted.
- **Where pins lead.** `link` and `source_domain` show which websites a pin sends traffic to.
- **Pay per pin.** One charge per pin saved; removed pins are listed in the run summary and free.

### How to use it

**Research a design trend:**

```json
{
  "searchQueries": ["minimalist kitchen design", "japandi living room"],
  "maxPins": 50
}
```

**Collect a brand's boards, profile and specific pins:**

```json
{
  "boardUrls": ["https://www.pinterest.com/pinterest/official-news/"],
  "profileUrls": ["https://www.pinterest.com/marthastewart/"],
  "pinUrls": ["https://www.pinterest.com/pin/424605071146015538/"],
  "maxPins": 25
}
```

| Input | What it controls |
|---|---|
| `searchQueries` | Keywords or hashtags to search |
| `boardUrls` | Board links, such as `https://www.pinterest.com/pinterest/official-news/` |
| `pinUrls` | Single pin links |
| `profileUrls` | Profile links, such as `https://www.pinterest.com/marthastewart/` |
| `maxPins` | Pins per search, board or profile (default 50) |
| `proxy` | Apify Proxy settings |

Add at least one search, board, pin or profile. Want follower counts and profile details for the creators you find? Continue with **Pinterest Profile Scraper** linked below.

### Output: Pinterest pin data you receive

A real row for a pin on Pinterest's own account (null fields left out):

```json
{
  "pin_id": "424605071146015538",
  "title": "Burgundy food table",
  "description": "#food #dinner",
  "pin_url": "https://www.pinterest.com/pin/424605071146015538/",
  "image_url": "https://i.pinimg.com/originals/c8/98/df/c898dfc1cfd4c48d0040699e2bfd6c94.jpg",
  "image_width": 675,
  "image_height": 1200,
  "dominant_color": "#5a3c34",
  "is_video": false,
  "save_count": 345,
  "comment_count": 0,
  "hashtags": ["food", "dinner"],
  "board_name": "Your ultimate holiday starter pack",
  "board_url": "https://www.pinterest.com/pinterest/your-ultimate-holiday-starter-pack/",
  "pinner_username": "pinterest",
  "pinner_display_name": "Pinterest",
  "pinner_follower_count": 6265382,
  "pinner_profile_url": "https://www.pinterest.com/pinterest/",
  "created_at": "2026-09-30T03:01:46.000Z",
  "scraped_at": "2026-10-01T05:45:08.979Z",
  "source_url": "https://www.pinterest.com/pin/424605071146015538/"
}
```

| Field | What it contains |
|---|---|
| `pin_id`, `pin_url`, `title`, `description` | The pin and its text |
| `image_url`, `image_width`, `image_height`, `dominant_color` | Original image, size and main color |
| `is_video`, `video_url` | Video flag and a direct video link for video pins |
| `save_count`, `comment_count` | How many people saved the pin, and comments when Pinterest shows them |
| `hashtags` | Hashtags on the pin or in its description |
| `link`, `source_domain`, `price` | Outbound website link, its domain, and price on product pins |
| `board_name`, `board_url` | The board the pin is saved to |
| `pinner_username`, `pinner_display_name`, `pinner_profile_url`, `pinner_follower_count` | Who posted it, with follower count when Pinterest includes it |
| `created_at`, `scraped_at`, `source_url` | Publish date, collection time and the input that found the pin |

`OUTPUT` in the default key-value store reports the run `outcome`, pins saved and any pin links that were removed from Pinterest.

### Example workflow: finding what to make next

A home-decor shop plans its spring range. They search five style keywords with `maxPins` at 100, sort by `save_count`, and keep pins from the last six months using `created_at`. They group `source_domain` to see which shops and blogs those pins link to. Then they collect the top creators' profiles with [Pinterest Profile Scraper](https://apify.com/khadinakbar/pinterest-profile-scraper) to find partners for a launch.

### Pricing

This Actor uses **Pay per event** plus **Apify platform usage**. You pay one event per pin saved, plus a start event and the platform usage of the run. The live Pricing tab on this page shows the current price.

- 3 searches × 50 pins = 150 pin events + platform usage.
- `maxPins` caps each search, board or profile, so it doubles as a cost ceiling.
- Removed pins are free.

#### Free Apify plan

Runs started from a free Apify plan return up to 80 results per run, with every input mode and output field available. Paid Apify plans have no per-run limit, so your usual result settings apply.

### Pinterest research with AI agents (MCP)

Connect this Actor to an AI agent through [Apify MCP](https://mcp.apify.com) and ask in plain language:

> Find the 30 most-saved Pinterest pins about "capsule wardrobe" and list which websites they link to.

Agent checklist:

1. Put keywords in `searchQueries`, or links in `boardUrls`, `pinUrls` or `profileUrls`.
2. Keep `maxPins` close to the request.
3. Read rows with `get-dataset-items`; sort by `save_count` and group by `source_domain`.
4. Read `OUTPUT.outcome` to confirm the outcome before answering.

### API example

```bash
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~pinterest-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries": ["fall outfits"], "maxPins": 30}'
```

### Related Pinterest tools from the same developer

| Your next step | Use | Why |
|---|---|---|
| When you then want creator profiles and follower counts | [Pinterest Profile Scraper](https://apify.com/khadinakbar/pinterest-profile-scraper) | Followers, bio, website and recent pins |
| When you want every board of an account | [Pinterest Boards Scraper](https://apify.com/khadinakbar/pinterest-boards-scraper) | All boards of a profile, or every pin on a board |
| When you want to save the videos | [Pinterest Video Downloader](https://apify.com/khadinakbar/pinterest-video-downloader) | Direct MP4 files for video pins |
| When you research Pinterest ads | [Pinterest Ads Library Scraper](https://apify.com/khadinakbar/pinterest-ads-library-scraper) | Ad creatives, flight dates and disclosed targeting |

### Best results

| Starting situation | Helpful action | Expected outcome |
|---|---|---|
| Studying a trend | Run several related keywords | A broad view of the trend across searches |
| Tracking a brand | Add its profile and key boards | The brand's latest pins with save counts |
| Large research sets | Raise `maxPins` up to a few hundred | More pins per search, board or profile |
| Finding traffic sources | Read `link` and `source_domain` | The websites behind popular pins |

### Builder's note

I found that most people use pin data to decide what to create, so every row keeps the save count, publish date and the website the pin links to. I learned that boards, profiles and searches answer different questions, so one run can mix all of them and each row records the input that found it in `source_url`.

### FAQ

#### Do I need a Pinterest account?

No. The Actor reads public Pinterest data and needs no login or cookies.

#### How many pins can I get?

`maxPins` sets the number per search, board or profile. Searches and profiles page through results until that number is reached.

#### Does it download videos?

Video pins include a direct `video_url`. To save the files themselves, use Pinterest Video Downloader.

#### What happens with a pin that was removed?

It is listed in `OUTPUT.notFound` and is free.

#### Why is price empty on most pins?

`price` is filled for product pins that show a price. Regular idea and image pins have no price.

### Responsible use

This Actor collects public Pinterest data, which can include creators' usernames and public profile details. Use it for research and analysis with a lawful basis, respect creators' rights to their images, and follow Pinterest's terms. Read Apify's guide on [whether web scraping is legal](https://blog.apify.com/is-web-scraping-legal/) for more context. Pinterest is a trademark of Pinterest, Inc. This independent Actor is not affiliated with, associated with, or endorsed by Pinterest. For questions or bugs, open a ticket in the Issues tab.

# Changelog

This Actor's version history is a separate document: https://apify.com/khadinakbar/pinterest-scraper/changelog.md

# Actor input Schema

## `searchQueries` (type: `array`):

Use this field when the user wants to search Pinterest by keyword, topic, niche, or hashtag. Enter one or more terms. Each query returns up to maxPins results. Do NOT use this when you have specific board or profile URLs — use boardUrls or profileUrls instead.

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

Use this field when the user provides a specific Pinterest board URL. Scrapes all pins from the board. Format: https://www.pinterest.com/username/board-name/. Do NOT use this for keyword searches — use searchQueries instead.

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

Use this field when the user provides individual Pinterest pin URLs. Scrapes data for each specific pin. Format: https://www.pinterest.com/pin/PIN_ID/. Use for targeted extraction of known pins.

## `profileUrls` (type: `array`):

Use this field when the user provides a Pinterest profile or username URL. Scrapes recent pins from those profiles. Format: https://www.pinterest.com/username/. Do NOT use this for boards — use boardUrls instead.

## `maxPins` (type: `integer`):

Maximum number of pins to extract per search query, board, or profile. Lower values run faster and cost less. Use 25–50 for quick research; 500+ for bulk datasets. Range: 1–10000. Free Apify plan runs return up to 80 results per run.

## `proxy` (type: `object`):

Proxy settings for the scraper. Apify Proxy is recommended for reliable Pinterest access.

## Actor input object example

```json
{
  "searchQueries": [
    "minimalist kitchen design"
  ],
  "boardUrls": [
    "https://www.pinterest.com/pinterest/official-news/"
  ],
  "pinUrls": [
    "https://www.pinterest.com/pin/424605071146015538/"
  ],
  "profileUrls": [
    "https://www.pinterest.com/pinterest/"
  ],
  "maxPins": 25,
  "proxy": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All scraped Pinterest pins as structured JSON records. Export as JSON, CSV, or Excel.

## `runOutput` (type: `string`):

Machine-readable terminal outcome, useful result count, failure details, and PPE charge counts.

## `runSummary` (type: `string`):

Detailed terminal status for automation, monitoring, and AI-agent workflows.

# 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 = {
    "searchQueries": [
        "minimalist kitchen design"
    ],
    "boardUrls": [
        "https://www.pinterest.com/pinterest/official-news/"
    ],
    "pinUrls": [
        "https://www.pinterest.com/pin/424605071146015538/"
    ],
    "profileUrls": [
        "https://www.pinterest.com/pinterest/"
    ],
    "maxPins": 25,
    "proxy": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/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 = {
    "searchQueries": ["minimalist kitchen design"],
    "boardUrls": ["https://www.pinterest.com/pinterest/official-news/"],
    "pinUrls": ["https://www.pinterest.com/pin/424605071146015538/"],
    "profileUrls": ["https://www.pinterest.com/pinterest/"],
    "maxPins": 25,
    "proxy": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/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 '{
  "searchQueries": [
    "minimalist kitchen design"
  ],
  "boardUrls": [
    "https://www.pinterest.com/pinterest/official-news/"
  ],
  "pinUrls": [
    "https://www.pinterest.com/pin/424605071146015538/"
  ],
  "profileUrls": [
    "https://www.pinterest.com/pinterest/"
  ],
  "maxPins": 25,
  "proxy": {
    "useApifyProxy": true
  }
}' |
apify call khadinakbar/pinterest-scraper --silent --output-dataset

```

## MCP server setup

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