# Pinterest Scraper — pins, boards, profiles & search (no login) (`istmobot/pinterest-scraper`) Actor

Scrape Pinterest without login: search pins by keyword or pull pins from pin URLs, boards and profiles. Get images, titles, saves, comments, outbound links, product prices, videos, hashtags, pinner and board. Pinterest API alternative for trend and product research. Export JSON, CSV, Excel.

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

## Pricing

Pay per event

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 & Pinterest API — pins, boards, profiles & search (no login)

Scrape **Pinterest pins** at scale without logging in: run a **Pinterest search** by keyword, or pull pins from pin URLs, public **boards** and **profiles**. For every pin you get the full-size image, title, description, **save count**, comments, reactions, the outbound product link and domain, **product price**, video URL, hashtags, pinner and board. Use it as an unofficial **Pinterest API** for **Pinterest trends**, product research and visual datasets.

### What is Pinterest Scraper?

Pinterest Scraper is a **Pinterest scraper** that reads the same public JSON that pinterest.com loads for logged-out visitors and turns it into one clean, flat record per pin.

- **No login, no cookies, no account** — it only reads public pins, boards and profiles. Your Pinterest account is never involved, so it can never be banned.
- **No official Pinterest API key needed**: the official API only gives access to your own boards and requires app approval. This Actor works on any public keyword, pin, board or profile.
- **Four modes**: keyword search, specific pins (URLs, pin.it short links or IDs), board pins and profile pins (with profile follower and pin counts).
- **Real engagement numbers**: saves, repins, comments, shares and reactions for each pin — the signals that show what is trending.
- **Polite by design**: low concurrency, spaced requests, automatic retry with backoff on HTTP 429 and server errors.
- Download your data as **JSON, CSV, Excel, HTML** or XML, or read it via the Apify API.

#### What data can I extract from Pinterest?

| Field | Description |
|---|---|
| `id` / `url` | Pin ID and pin URL |
| `title` / `description` / `altText` | Pin title, description and Pinterest's image alt text |
| `imageUrl` / `imageWidth` / `imageHeight` | Largest (original) image and its size |
| `dominantColor` | Dominant image color as hex, e.g. `#6c5942` |
| `link` / `domain` / `siteName` | Outbound destination URL (product page, blog, shop) and its domain |
| `price` / `currency` | Product price when Pinterest shows one (product pins) |
| `saveCount` / `repinCount` | How many times the pin was saved / repinned |
| `commentCount` / `shareCount` / `reactionCount` | Comments, shares and reactions |
| `isVideo` / `videoUrl` | Video flag and MP4 (or HLS) video URL |
| `hashtags` | Hashtags on the pin |
| `createdAt` | Pin creation date (ISO 8601) |
| `pinner` | Username, full name, follower count and profile URL of the pinner |
| `board` | Board name and URL |
| `profile` | `user` mode: followers, following, pin count, board count, monthly views, about, website |
| `searchQuery` / `source` / `scrapedAt` | Which keyword or input produced the pin, and when |

### How can I use Pinterest data?

- **Product & trend research for e-commerce and dropshipping** — search a niche ("kitchen gadgets", "summer dress") and sort by `saveCount` to see which US products and styles people save most, with the outbound shop link and price.
- **Competitor & brand monitoring** — track a brand's profile and boards: which pins get saved, which domains they drive traffic to, how follower counts move.
- **Visual inspiration datasets** — collect full-size images, dominant colors, alt texts and hashtags for mood boards, design research or ML training sets (mind image copyright, see FAQ).
- **Influencer discovery** — find pinners with high follower counts and highly saved pins in your niche.
- **SEO for Pinterest** — study titles, descriptions and hashtags of top-saved pins for your keywords before you write your own.

### How to scrape Pinterest

1. Click **Try for free** on this Actor's page (you need a free Apify account).
2. Choose a **Mode**: search by keyword, specific pins, board pins or profile pins.
3. Enter your keywords, pin URLs, board URLs or profiles, and set **Max pins** per keyword / board / profile.
4. Click **Start** and wait for the run to finish (about 2 pins per second with details).
5. Download the dataset as JSON, CSV, Excel or HTML, or connect it to your tools via the API.

### How much does it cost to scrape Pinterest?

This Actor uses **pay-per-event** pricing — you only pay for pins you actually get:

| Event | Price |
|---|---|
| Actor start | $0.005 per run |
| `pin-result` (one pin in the dataset) | $0.0015 per pin = **$1.50 per 1,000 pins** |

Pin details, profile stats and video URLs are included at no extra charge. Error items (invalid inputs, pins/boards/profiles not found, failed fetches) are **never charged**.

Example: 1 run × 1,000 pins = $0.005 + $1.50 = **$1.505**.

The Apify free plan includes **$5 of monthly credit**, which covers roughly **3,300 pins** per month. You can set a **maximum cost per run**; once it is reached the Actor stops cleanly and keeps everything scraped so far.

### ⬇️ Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | `search` | `pins` | `board` | `user` | `search` | What to scrape (required) |
| `searchQueries` | list of strings | — | `search` mode: keywords, e.g. `home decor` |
| `pinUrls` | list of strings | — | `pins` mode: pin URLs, pin.it links or pin IDs |
| `boardUrls` | list of strings | — | `board` mode: board URLs, e.g. `https://www.pinterest.com/dominomag/kitchen-ideas/` |
| `profiles` | list of strings | — | `user` mode: profile URLs or usernames |
| `maxItems` | integer | `50` | Max pins per keyword / board / profile (ignored in `pins` mode) |
| `includeDetails` | boolean | `true` | Fetch each pin's detail data (saves, repins, comments, hashtags, video, price). Off = ~2x faster, fewer fields in search results |

```json
{
  "mode": "search",
  "searchQueries": ["home decor", "wireless earbuds"],
  "maxItems": 100,
  "includeDetails": true
}
```

All pins of a board: `{ "mode": "board", "boardUrls": ["https://www.pinterest.com/dominomag/kitchen-ideas/"], "maxItems": 500 }`

### ⬆️ Output

One item per pin. The **Overview** table view in Apify Console shows image, title, saves, comments, domain, price, pinner and board at a glance.

```json
{
  "id": "1065171749412592714",
  "url": "https://www.pinterest.com/pin/1065171749412592714/",
  "title": "DIY jellyfish light 🪼💗✨",
  "description": "Follow @roomtery for more 🎀 cr: ek_graphic_\n\nDIY jellyfish made out of pipe cleaners💗\n\n\n#diy #handmade #crafts #artsandcrafts #gift #giftideas #decor #jellyfish #pipecleaners",
  "imageUrl": "https://i.pinimg.com/originals/ef/9b/1a/ef9b1ac0a01fd77669712a3749e3b085.jpg",
  "imageWidth": 720,
  "imageHeight": 1280,
  "dominantColor": "#795a48",
  "link": "https://roomtery.com/products/hanging-jellyfish-lights",
  "domain": "roomtery.com",
  "createdAt": "2025-07-19T21:59:05.000Z",
  "saveCount": 186377,
  "repinCount": 120536,
  "commentCount": 792,
  "shareCount": 9803,
  "reactionCount": 45355,
  "isVideo": true,
  "videoUrl": "https://v1.pinimg.com/videos/iht/expMp4/26/d7/41/26d7416859947c294c0796811c13d67a_720w.mp4",
  "price": null,
  "currency": null,
  "siteName": "roomtery",
  "hashtags": ["#diy", "#handmade", "#crafts", "#artsandcrafts", "#gift", "#giftideas", "#decor", "#jellyfish", "#pipecleaners"],
  "pinner": { "username": "roomtery", "fullName": "roomtery", "followers": 336489, "url": "https://www.pinterest.com/roomtery/" },
  "board": { "name": "DIY AESTHETIC ROOM DECOR | roomtery", "url": "https://www.pinterest.com/roomtery/diy-aesthetic-room-decor-roomtery/" },
  "altText": "DIY jellyfish light made out of pipe cleaners, jellyfish hanging tutorial",
  "searchQuery": null,
  "source": "1065171749412592714",
  "scrapedAt": "2026-10-05T02:32:09.462Z"
}
```

Notes on fields:

- `link` and `domain` are `null` for pins uploaded directly to Pinterest (no outbound link).
- `price` / `currency` are filled only when Pinterest exposes a product price to logged-out visitors; most pins have none.
- With `includeDetails: false`, search results have no `saveCount`, `repinCount`, `commentCount`, `shareCount`, `videoUrl` or hashtag list (board and profile pins still include `saveCount` and videos).
- `videoUrl` is an MP4 when available, otherwise an HLS (`.m3u8`) stream.
- In `user` mode every item also carries a `profile` object with the profile's followers, following, pinCount, boardCount, monthlyViews, about and websiteUrl.

#### Error items

```json
{ "input": "https://www.pinterest.com/erinturnage/nope-nope-nope/", "mode": "board", "errorType": "NOT_FOUND", "error": "Board not found." }
```

`errorType` is `NOT_FOUND` (deleted or private pin / board / profile), `INVALID_INPUT`, `BLOCKED` (Pinterest refused the request) or `FETCH_FAILED`. **Error items are never charged.**

### Integrations and API

**Apify API** — start a run and get results over HTTP:

```bash
curl -X POST "https://api.apify.com/v2/acts/istmobot~pinterest-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"mode": "search", "searchQueries": ["home decor"], "maxItems": 20}'
```

**Python** (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("istmobot/pinterest-scraper").call(run_input={
    "mode": "search",
    "searchQueries": ["kitchen gadgets"],
    "maxItems": 100,
})
for pin in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(pin.get("saveCount"), pin.get("title"), pin.get("link"))
```

**Node.js** (`npm install apify-client`):

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('istmobot/pinterest-scraper').call({
    mode: 'board',
    boardUrls: ['https://www.pinterest.com/dominomag/kitchen-ideas/'],
    maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

- **Schedules** — run it daily or weekly to track how Pinterest trends and save counts change over time.
- **Webhooks** — get notified or trigger your own pipeline when a run finishes.
- **Make, Zapier, n8n** — send pins to Google Sheets, Airtable, Shopify tools, Slack or a database without code.
- **AI agents** — use it from Claude, ChatGPT or any MCP client via the Apify MCP server (https://mcp.apify.com).

### FAQ

**Do I need a Pinterest account or login?** No. The Actor never logs in and uses no cookies of any account. It only reads what any logged-out visitor can see on pinterest.com.

**Is it legal to scrape Pinterest?** This Actor only collects publicly available data and does not bypass any login. Public data is generally fine to collect, but you are responsible for how you use it. **Images and videos remain the copyright of their owners** — use them for research and analysis, and get permission before republishing them. Pins and profiles can contain personal data (names, usernames), so if you store or process it, be mindful of **GDPR** and similar privacy laws. If unsure, consult a lawyer.

**Can I scrape private boards or secret pins?** No. Only public pins, boards and profiles are accessible.

**Why are some fields `null`?** Pinterest does not expose every field for every pin: pins uploaded directly have no outbound `link`, most pins have no `price`, and older pins may have no reactions. Search results also need `includeDetails: true` for counters such as `saveCount`.

**How many pins can I get per search?** Search follows Pinterest's own pagination, usually several hundred pins per keyword. For more coverage, add related keywords.

**Which Pinterest countries work?** Any public pin URL works (pinterest.com, pinterest.co.uk, de.pinterest.com…). Search results reflect Pinterest's default (US English) results.

**Do I need proxies?** No. Requests are few, lightweight and spaced out.

**Can I schedule it?** Yes. Use Apify Schedules to run it on any interval and combine with webhooks or integrations to push the results wherever you need them.

### Other Actors you might like

- [Steam Game Intelligence](https://apify.com/istmobot/steam-game-intelligence)
- [Metacritic Scraper](https://apify.com/istmobot/metacritic-scraper)
- [BoardGameGeek Scraper](https://apify.com/istmobot/boardgamegeek-scraper)

### Your feedback

Found a bug or want a new field? Open an issue in the **Issues** tab of this Actor — we read every one.

### Disclaimer

This is an **unofficial** tool. It is not affiliated with, endorsed by or sponsored by Pinterest, Inc.

# Actor input Schema

## `mode` (type: `string`):

"search": pins matching keywords. "pins": the pin URLs / IDs you list. "board": pins of public boards. "user": pins of public profiles (plus profile stats).

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

Used in "search" mode. One Pinterest search per keyword, e.g. "home decor" or "wireless earbuds".

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

Used in "pins" mode. Pin URLs from any Pinterest domain (pinterest.com/pin/123…/), pin.it short links or numeric pin IDs.

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

Used in "board" mode. Public board URLs like https://www.pinterest.com/dominomag/kitchen-ideas/ (or "username/board-slug").

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

Used in "user" mode. Profile URLs (https://www.pinterest.com/dominomag/) or usernames.

## `maxItems` (type: `integer`):

How many pins to return for each search keyword, board or profile. Ignored in "pins" mode.

## `includeDetails` (type: `boolean`):

Open every pin's detail data for save, repin, comment and share counts, hashtags, video URLs and product prices. Search results lack most of these without it. Turn off for ~2x faster runs.

## Actor input object example

```json
{
  "mode": "search",
  "searchQueries": [
    "home decor"
  ],
  "pinUrls": [
    "https://www.pinterest.com/pin/225039312627881892/"
  ],
  "boardUrls": [
    "https://www.pinterest.com/dominomag/kitchen-ideas/"
  ],
  "profiles": [
    "dominomag"
  ],
  "maxItems": 20,
  "includeDetails": true
}
```

# Actor output Schema

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

No description

# 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 = {
    "mode": "search",
    "searchQueries": [
        "home decor"
    ],
    "pinUrls": [
        "https://www.pinterest.com/pin/225039312627881892/"
    ],
    "boardUrls": [
        "https://www.pinterest.com/dominomag/kitchen-ideas/"
    ],
    "profiles": [
        "dominomag"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("istmobot/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 = {
    "mode": "search",
    "searchQueries": ["home decor"],
    "pinUrls": ["https://www.pinterest.com/pin/225039312627881892/"],
    "boardUrls": ["https://www.pinterest.com/dominomag/kitchen-ideas/"],
    "profiles": ["dominomag"],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("istmobot/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 '{
  "mode": "search",
  "searchQueries": [
    "home decor"
  ],
  "pinUrls": [
    "https://www.pinterest.com/pin/225039312627881892/"
  ],
  "boardUrls": [
    "https://www.pinterest.com/dominomag/kitchen-ideas/"
  ],
  "profiles": [
    "dominomag"
  ],
  "maxItems": 20
}' |
apify call istmobot/pinterest-scraper --silent --output-dataset

```

## MCP server setup

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