# Pinterest Scraper API: Pins, Boards, Profiles & Search (`sauliusautomatesit/pinterest-scraper-api`) Actor

Scrape Pinterest: search pins, videos, boards and profiles by keyword, profile and board pins, pin details with saves, repins and comments, video MP4 links and related pins. No login, no cookies; also via MCP. $2 per 1,000 pins.

- **URL**: https://apify.com/sauliusautomatesit/pinterest-scraper-api.md
- **Developed by:** [Saulius AutomatesIT](https://apify.com/sauliusautomatesit) (community)
- **Categories:** Social media, Marketing, E-commerce
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.70 / 1,000 pins

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 API: Pins, Boards, Profiles & Search

Get [Pinterest](https://www.pinterest.com) data in bulk: **search pins, video pins, boards and profiles by keyword**, **every pin on a profile or board**, **single pins with saves, repins and comments**, **video MP4 links** and **related pins** ("more like this"). Each pin comes with title, description, outbound link and domain, full size image, creation date, engagement counts, topics, the pinner and the board.

No Pinterest account, no cookies of yours, no browser. **$2 per 1,000 pins**, profiles and boards $2 per 1,000.

### What you can use it for

- **Trend and product research**: what pins rank for `fall nails`, `kitchen island` or `capsule wardrobe` right now, and which ones people save.
- **Competitor and creator research**: a brand's or creator's followers, monthly views, boards and newest pins with saves and repins.
- **Content and SEO ideas**: titles, descriptions and topics of the pins that win a keyword, and the websites they link to.
- **E-commerce**: product pins with price, the shops behind them and how often they get saved.
- **Datasets for AI**: images with alt text, titles and descriptions, or video pins as MP4.

### Why not call Pinterest yourself

Pinterest's official API only reads your own account's pins and needs an approved app. The website loads its data from internal JSON resources that change shape, need the right page headers and give datacenter IPs a different answer for some feeds. This Actor handles all of that, pages through results with Pinterest's own bookmarks, opens each search hit for its engagement counts, and returns plain JSON: one call from Python, JavaScript, cURL or an AI agent.

### How to use it

1. Add **Search keywords** (pick pins, video pins, boards or profiles), or **Pinterest links** (pins, profiles, boards, `pin.it` short links), or both.
2. Set how many results you want per keyword, profile or board.
3. Run it and download the results as JSON, CSV or Excel, or read them through the API.

#### Input example

```json
{
  "searchQueries": ["modern kitchen", "fall nails"],
  "searchType": "pins",
  "maxResultsPerSearch": 200,
  "urls": [
    "https://www.pinterest.com/nasa/",
    "https://www.pinterest.com/nasa/space/",
    "https://www.pinterest.com/pin/99360735500167749/"
  ],
  "maxPinsPerProfile": 50,
  "maxPinsPerBoard": 100,
  "maxRelatedPins": 25
}
```

### Output

Each item has a `type`: `pin`, `profile` or `board`, and a `source` saying where it came from (`search`, `profile`, `profile-pins`, `profile-boards`, `board`, `board-pins`, `pin`, `related`).

#### Pin

```json
{
  "type": "pin",
  "id": "3377768469142487",
  "url": "https://www.pinterest.com/pin/3377768469142487/",
  "title": "Kitchen Trends to Avoid in 2026",
  "description": "Learn the kitchen design trends that are officially out for 2026...",
  "link": "https://thewoodmeter.com/kitchen-trends-to-avoid-in-2026-styles-that-are-officially-out/",
  "domain": "thewoodmeter.com",
  "createdAt": "2026-06-08T21:39:58.000Z",
  "imageUrl": "https://i.pinimg.com/originals/d2/49/92/d249923adb96e533e708dd318fbeccea.png",
  "imageWidth": 1000,
  "imageHeight": 1500,
  "isVideo": false,
  "videoUrl": null,
  "saves": 679,
  "repins": 292,
  "comments": 0,
  "shares": 106,
  "reactions": 34,
  "price": null,
  "topics": [],
  "pinnerUsername": "example_pinner",
  "pinnerFollowers": 86,
  "boardName": "home ideas",
  "boardUrl": "https://www.pinterest.com/example_pinner/home-ideas/",
  "source": "search",
  "searchQuery": "modern kitchen",
  "position": 6
}
```

Video pins carry `videoUrl` (MP4 when Pinterest has one, else the HLS playlist), `videoFormat` and `videoDurationSec`. Product pins carry `price` and `currency`.

#### Profile

```json
{
  "type": "profile",
  "username": "nasa",
  "url": "https://www.pinterest.com/nasa/",
  "fullName": "NASA",
  "about": "Explore the universe and discover our home planet with the official NASA boards on Pinterest.",
  "websiteUrl": "http://www.nasa.gov/",
  "domainVerified": true,
  "followers": 556515,
  "following": 5,
  "pins": 10551,
  "boards": 82,
  "monthlyViews": 1949134,
  "createdAt": "2012-03-05T16:37:07.000Z",
  "lastPinSavedAt": "2026-09-03T13:52:00.000Z"
}
```

#### Board

```json
{
  "type": "board",
  "name": "Neutral Kitchen Ideas & Coffee Stations",
  "url": "https://www.pinterest.com/thewarmhouseedit/neutral-kitchen-ideas-coffee-stations/",
  "pins": 14,
  "followers": 0,
  "sections": 0,
  "lastPinnedAt": "2026-09-25T10:28:07.000Z",
  "coverImageUrl": "https://i.pinimg.com/200x150/25/a1/99/25a1995ae321c4d900dc26ca6deff003.jpg",
  "ownerUsername": "thewarmhouseedit"
}
```

### Good to know

- **Search depth**: Pinterest stops scrolling a keyword at about 900 pins (890 for `home decor` in our test). For more, add related keywords. Turn **Saves, repins and comments for search results** off if you only need images and links: it is about a third faster, but a third of search pins then have no title (the pin page has it).
- **Profile pins** are the pins on the profile's Pins tab, newest first. **Board pins** come in board order.
- **Private content**: secret boards and private profiles are not visible to a logged-out visitor, so they come back as free `NOT_FOUND` rows.
- **No contact details**: the Actor does not collect e-mail addresses or phone numbers of Pinterest users.

### Pricing

Pay per result, no subscription:

| Item | Price |
|---|---|
| Pin | $0.002 ($2 per 1,000) |
| Profile | $0.002 |
| Board | $0.002 |
| Run start | $0.00005 |

Bronze, Silver and Gold Apify plans pay 5%, 10% and 15% less. The engagement lookup for search results is included in the pin price. Inputs that give nothing (deleted pin, unknown profile, a keyword with no results) come back as free `error` rows that say why.

### Use it from code or an AI agent

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("sauliusautomatesit/pinterest-scraper-api").call(run_input={
    "searchQueries": ["modern kitchen"],
    "maxResultsPerSearch": 100,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["saves"], item["title"], item["url"])
```

As an MCP tool for Claude, Cursor or any MCP client: `https://mcp.apify.com/?tools=sauliusautomatesit/pinterest-scraper-api`.

### Related Actors

- [YouTube Transcript Scraper](https://apify.com/sauliusautomatesit/youtube-transcript-scraper): subtitles and transcripts of YouTube videos and channels.
- [Threads Search API](https://apify.com/sauliusautomatesit/threads-search-api): Meta Threads posts by keyword.

### Notes

The Actor reads only public data that Pinterest shows to any logged-out visitor. Use the data in line with Pinterest's terms and the privacy laws that apply to you.

# Actor input Schema

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

One keyword per line, as you would type it on Pinterest: `modern kitchen`, `wedding dress`, `fall nails`. Each keyword gives up to `maxResultsPerSearch` results of the type below.

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

`pins` (default), `videos` (video pins only), `boards` or `profiles`.

## `maxResultsPerSearch` (type: `integer`):

Pinterest stops a keyword at about 900 pins; add related keywords for more.

## `urls` (type: `array`):

Pinterest links, one per line: a pin (`https://www.pinterest.com/pin/99360735500167749/` or just the number), a profile (`https://www.pinterest.com/nasa/` or `@nasa`), a board (`https://www.pinterest.com/nasa/space/`) or a `pin.it` short link. Any Pinterest country domain works.

## `maxPinsPerProfile` (type: `integer`):

Pins saved by each profile, newest first, with saves and repins. 0 gives the profile row only.

## `includeProfileBoards` (type: `boolean`):

Adds one row per public board of each profile (name, pins, followers, sections, cover).

## `maxPinsPerBoard` (type: `integer`):

Pins on each board link you add, in board order. 0 gives the board row only.

## `maxRelatedPins` (type: `integer`):

"More like this" pins for each pin link you add, with saves. 0 turns it off.

## `pinDetails` (type: `boolean`):

Pinterest search results carry no engagement counts. On (default), each pin found by search is opened to add saves, repins, comment count and the MP4 video link. Off is about a third faster but leaves a third of the pins without a title.

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

Keywords and links worked on at once.

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

Apify Proxy datacenter IPs work. Change only if you need to.

## Actor input object example

```json
{
  "searchQueries": [
    "modern kitchen"
  ],
  "searchType": "pins",
  "maxResultsPerSearch": 50,
  "urls": [
    "https://www.pinterest.com/nasa/"
  ],
  "maxPinsPerProfile": 20,
  "includeProfileBoards": false,
  "maxPinsPerBoard": 100,
  "maxRelatedPins": 0,
  "pinDetails": true,
  "concurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Items of type pin, profile and board. Download as JSON, CSV or Excel, or read it from this API endpoint.

## `summary` (type: `string`):

Rows delivered per type, inputs not found, empty searches and failures.

# 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": [
        "modern kitchen"
    ],
    "maxResultsPerSearch": 50,
    "urls": [
        "https://www.pinterest.com/nasa/"
    ],
    "maxPinsPerProfile": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("sauliusautomatesit/pinterest-scraper-api").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": ["modern kitchen"],
    "maxResultsPerSearch": 50,
    "urls": ["https://www.pinterest.com/nasa/"],
    "maxPinsPerProfile": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("sauliusautomatesit/pinterest-scraper-api").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": [
    "modern kitchen"
  ],
  "maxResultsPerSearch": 50,
  "urls": [
    "https://www.pinterest.com/nasa/"
  ],
  "maxPinsPerProfile": 20
}' |
apify call sauliusautomatesit/pinterest-scraper-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sauliusautomatesit/pinterest-scraper-api"
        }
    }
}
```

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/Dqwgtrsu1YIneAcvM/builds/TeBeXKZogIbCdnt6x/openapi.json
