# Pinterest Scraper - Pins, Boards, Profiles & Leads (`scrapesage/pinterest-scraper`) Actor

Scrape Pinterest by keyword, pin, board or profile URL: pins with images, videos, outbound links, saves and prices, full boards, creator profiles, and contact-ready creator leads. Monitor for new pins. No login. Export to JSON, CSV or Excel.

- **URL**: https://apify.com/scrapesage/pinterest-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (community)
- **Categories:** Social media, Lead generation, Automation
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 pin scrapeds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Pinterest Scraper — Pins, Boards, Profiles & Creator Leads

Extract **structured data from [Pinterest](https://www.pinterest.com)** at scale — search results, individual pins, whole boards and creator profiles. Get the **image and video, the outbound link and domain, saves, comments, prices and product data, hashtags, the creator and the board** behind every pin. Turn the creators into **contact-ready leads** (website, Instagram, verified-merchant status, follower count) and **monitor any keyword, board or profile for new pins**.

No login, no cookies, no browser — fast, reliable extraction straight from Pinterest's own public data feeds.

### Why this Pinterest scraper?

Most Pinterest scrapers grab a thumbnail and a title and stop there. This actor reads Pinterest's full pin, board and profile data and ships the **richest dataset in the category** — the parts that actually drive marketing, e-commerce and lead-gen decisions: the **outbound destination link and domain**, **save counts**, **price and stock for shopping pins**, **video URLs**, and the **creator's website and social links**.

| Data | Generic crawlers | This actor |
|---|---|---|
| Pin title, description, image | partial | ✅ |
| **Outbound link + domain** (where the pin sends traffic) | ❌ | ✅ when set |
| **Video URL + duration** for video/Idea pins | ❌ | ✅ |
| Saves & comments (with *Enrich details*) | ❌ | ✅ |
| **Price, currency, list price, in-stock, price-drop** (shopping pins) | ❌ | ✅ |
| Hashtags, dominant color, creator, board | ❌ | ✅ |
| Search by **pins, boards *or* profiles** | partial | ✅ |
| Whole boards (details + pins) | partial | ✅ |
| Creator profiles (followers, website, Instagram, merchant status) | ❌ | ✅ |
| **Creator leads** with website/Instagram + lead score | ❌ | ✅ |
| **Monitor mode** — only new pins since last run | ❌ | ✅ |
| One clean table per record type (no empty columns) | ❌ | ✅ |

### Use cases

- **Trend & content research** — pull the top pins for any keyword with their save counts, hashtags and dominant colors to see what's resonating, then plan content that fits.
- **E-commerce & affiliate intelligence** — shopping pins expose the **price, currency, in-stock status and the exact destination domain**, so you can track who is pinning which products, at what price, and where the traffic goes.
- **Influencer & creator outreach** — every pin resolves to its creator; output **creator leads** with website, Instagram and a lead score and feed them straight into your CRM or outreach tool.
- **Merchant & brand prospecting** — find verified-merchant profiles and shopping showcases in your niche and pitch them.
- **Competitive monitoring** — watch a competitor's profile or a category keyword and capture **only the new pins** each run.
- **SEO & visual discovery** — board and pin descriptions, hashtags and outbound domains are a rich seed for keyword and link research.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up) — the free plan is enough to try this actor.
2. Open the **Pinterest Scraper**, add some **Search keywords** (and pick *Pins*, *Boards* or *Profiles*), and/or paste **pin / board / profile URLs**.
3. Click **Start** and watch results stream into the dataset table.
4. **Export** as JSON, CSV, Excel, XML or RSS — or pull results programmatically via the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "searchQueries": ["home office desk setup"],
    "searchType": "pins",
    "boardUrls": ["https://www.pinterest.com/hometalk/home-office/"],
    "usernames": ["nike"],
    "includePinDetails": false,
    "outputCreatorLeads": true,
    "maxItems": 200
}
```

- **searchQueries** — keywords to search. **searchType** chooses what each keyword returns: `pins` (default), `boards` or `users` (profiles).
- **pinUrls / boardUrls / usernames** — scrape specific pins, boards or profiles directly (full URLs or bare IDs/handles).
- **startUrls** — a mixed list of any Pinterest URLs (pins, boards, profiles, search pages); each is auto-routed.
- **includePinDetails** *(default false)* — open each pin for exact **price, currency, product rating, aggregated saves and comment count** (one extra request per pin).
- **includeBoardPins / maxPinsPerBoard** — also scrape the pins inside each board (default on, 100).
- **includeUserPins / includeUserBoards / maxPinsPerUser** — also scrape a profile's pins and/or boards.
- **outputCreatorLeads** *(default false)* — output a contact-ready lead for every unique creator behind the pins (website, Instagram, merchant status, follower count, lead score).
- **maxItems** *(default 200)* — overall cap on pins + boards + profiles.
- **monitorMode / monitorKey** — remember pins from previous runs and emit **only new ones** (see *Automate & schedule*).
- **maxConcurrency** *(default 6)* and **proxyConfiguration** — Pinterest is light on anti-bot, so the default Apify datacenter proxy is plenty.

### Output

Each row is tagged with a `type` (`pin`, `board`, `profile`, or `creatorLead`); use the **Pins / Boards / Profiles / Creator leads** dataset views to get a clean, dense table for each.

A pin record (`type: "pin"`):

```json
{
    "type": "pin",
    "id": "432134526768114928",
    "pinUrl": "https://www.pinterest.com/pin/432134526768114928/",
    "title": "Minimalist Green Home Office Desk Setup",
    "description": "Transform your workspace into a calm and productive retreat…",
    "link": "https://www.holtrenfrew.com/p/20515585004",
    "outboundDomain": "holtrenfrew.com",
    "dominantColor": "#b7a891",
    "isVideo": false,
    "isProduct": true,
    "saveCount": 27,
    "commentCount": 0,
    "price": 170,
    "priceCurrency": "CAD",
    "priceDisplay": "CA$170.00",
    "inStock": true,
    "hasPriceDrop": false,
    "brand": "Nike",
    "merchantName": "Holt Renfrew",
    "imageUrl": "https://i.pinimg.com/originals/01/1b/a7/011ba7802b6e5fbf533c27f3640b1c15.jpg",
    "videoUrl": null,
    "hashtags": ["#homeoffice", "#desksetup", "#workspaceinspiration"],
    "createdAt": "Wed, 03 Jun 2026 14:44:48 +0000",
    "pinner": { "username": "holtrenfrew", "fullName": "Holt Renfrew", "followerCount": 2981 },
    "board": { "name": "Products", "url": "https://www.pinterest.com/holtrenfrew/products/" },
    "searchQuery": "home office desk setup"
}
```

A board record (`type: "board"`) carries `name`, `boardUrl`, `description`, `pinCount`, `followerCount`, `sectionCount`, `owner` and `coverImageUrl`. A profile record (`type: "profile"`) carries `username`, `fullName`, `bio`, `followerCount`, `followingCount`, `pinCount`, `boardCount`, `website`, `instagramUrl`, `isVerifiedMerchant`, `avatarUrl` and more. A creator lead (`type: "creatorLead"`) is the contact-focused subset plus a `leadScore` (0–100).

#### What to expect (field coverage)

Pinterest is creator-entered data, so some fields are populated only when the pinner filled them in. Verified across categories, you can typically expect:

| Entity | Always present | Usually present | Present when published |
|---|---|---|---|
| **Pin** | id, pinUrl, title, imageUrl, pinner, board, createdAt | description ~90%, hashtags (when in caption) | `link`/`outboundDomain` (pins that link out, not user uploads), `videoUrl` (video pins), `price`/`brand`/`inStock` (shopping pins), `saveCount`/`commentCount` (with *Enrich details*) |
| **Board** | id, name, boardUrl, pinCount, owner | description, followerCount, coverImage | sectionCount, collaborators |
| **Profile** | username, profileUrl, follower/pin/board counts | fullName, bio, avatar | website, Instagram, verified-merchant (creators who added them) |

A blank field means the creator didn't publish it for that record — not that scraping failed. Nothing is dropped, so you always get the richest dataset available. (Save counts aren't shown on grid cards by Pinterest — turn on **Enrich pin details** to capture them.)

### Automate & schedule

Run this actor on autopilot and pull results into your own stack:

- **[Apify API](https://docs.apify.com/api/v2)** — start runs, fetch datasets, and manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[apify-client for Python](https://docs.apify.com/api/client/python/)** — official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)** — run it hourly/daily to capture pins as they're published.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** — trigger downstream actions (CRM import, Slack alert, email sequence) the moment a run finishes.

**Monitor mode** pairs perfectly with Schedules: turn on `monitorMode` (with a `monitorKey` per saved search/board/profile) and the actor remembers every pin it has seen and emits **only new pins** on each run — so a scheduled run becomes a clean "new pins for this keyword" feed, with no duplicates. It works *alongside* the Apify scheduler (the scheduler triggers the run; monitor mode decides what's new), not instead of it.

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

const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });

const run = await client.actor('scrapesage/pinterest-scraper').call({
    searchQueries: ['home office desk setup'],
    searchType: 'pins',
    outputCreatorLeads: true,
    maxItems: 200,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} records`);
```

### Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** — multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** — push new pins or creator leads straight into your CRM.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** — get notified when a monitored keyword or profile adds pins.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** — auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** — pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)** — trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** — ask your assistant to "find the top home-office pins on Pinterest and list the creators with their websites" and let it run the scraper for you.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready** — AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)** — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) — no account, no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)** — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

### More scrapers from scrapesage

Build a complete **social, creator & e-commerce intelligence stack**:

- **[Linktree Scraper](https://apify.com/scrapesage/linktree-scraper)** — link-in-bio pages → every creator's links and contact details.
- **[YouTube Scraper](https://apify.com/scrapesage/youtube-scraper)** — channels and videos with creator contact links.
- **[Bluesky Scraper](https://apify.com/scrapesage/bluesky-scraper)** — posts, profiles and follower data from Bluesky.
- **[Threads Scraper](https://apify.com/scrapesage/threads-scraper)** — posts and profiles from Meta's Threads.
- **[SoundCloud Scraper](https://apify.com/scrapesage/soundcloud-scraper)** — tracks, artists and booking-email leads.
- **[Behance Scraper](https://apify.com/scrapesage/behance-scraper)** — creative-talent profiles and for-hire leads.
- **[Amazon Scraper](https://apify.com/scrapesage/amazon-scraper)** — products, prices, reviews and seller leads.
- **[Shopify Store Scraper](https://apify.com/scrapesage/shopify-store-scraper)** — products, prices and merchant leads from any Shopify store.
- **[Website Contact Scraper](https://apify.com/scrapesage/website-contact-scraper)** — turn the creator websites you find here into emails, phones and socials.

### Tips

- **Pick a single record type per export.** Use the *Pins / Boards / Profiles / Creator leads* dataset views for clean, fully-populated tables.
- **Want saves, comments and exact prices?** Turn on **Enrich pin details** — it adds one fast request per pin and fills in the engagement and commerce fields Pinterest hides on grid cards.
- **Creator leads**: keep `outputCreatorLeads` on — it's the difference between a pin and a contactable creator. Pair it with the [Website Contact Scraper](https://apify.com/scrapesage/website-contact-scraper) to pull emails from the websites it finds.
- **Recurring monitoring**: combine `monitorMode` with [Schedules](https://docs.apify.com/platform/schedules) to track a keyword, board or competitor for new pins.

### FAQ

**How do I scrape a specific board or profile?** Put its URL in `boardUrls` or `usernames` — full URL or just the handle (`nike`). Boards return their details and, by default, their pins.

**Does it need the Pinterest API or a key?** No. Pinterest's official API is approval-gated and limited; this actor reads the same public data the website uses — no key or login needed.

**Can I get the price of shopping pins?** Yes. Product pins include `price`, `priceCurrency`, `priceDisplay`, `listPrice`, `inStock`, `hasPriceDrop`, `brand` and `merchantName`. Turn on **Enrich pin details** for the most complete commerce data.

**Why is `saveCount` empty on some pins?** Pinterest no longer shows save counts on grid cards. Turn on **Enrich pin details** and the actor reads the aggregated save and comment counts from each pin.

**Why is `link`/`outboundDomain` empty on some pins?** Those pins are images uploaded directly to Pinterest with no destination link. Pins that link to a website always include the link and domain.

**Can I export to Google Sheets, CSV, or Excel?** Yes — one click in the dataset view, or automatically on every run via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**How do I get only new pins?** Turn on `monitorMode`, give it a `monitorKey`, and schedule the run. Each run emits only pins it hasn't seen before.

**Is scraping Pinterest legal?** This actor collects publicly available data only. You're responsible for using the data in compliance with applicable laws (e.g. GDPR/CCPA for personal data) and Pinterest's terms.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome — this actor is actively maintained.

# Actor input Schema

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

One or more keywords to search Pinterest for. Use the 'Search type' below to pick whether each keyword returns pins, boards or profiles.

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

What your keyword searches return: Pins (images/videos with links & prices), Boards, or Profiles (creators).

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

Specific pin URLs (e.g. `https://www.pinterest.com/pin/12345/`) or pin IDs to scrape in full (image/video, link, saves, comments, price).

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

Board URLs (e.g. `https://www.pinterest.com/username/board-slug/`). Returns the board details and, by default, its pins.

## `usernames` (type: `array`):

Pinterest usernames or profile URLs (e.g. `nike` or `https://www.pinterest.com/nike/`). Returns the full profile and, by default, the creator's pins.

## `startUrls` (type: `array`):

Mixed list of Pinterest URLs — pins, boards, profiles or search pages. Each is auto-routed to the right scraper. Handy when you have a list and don't want to sort it.

## `includePinDetails` (type: `boolean`):

Open each pin for its full detail — exact price, currency, product rating, aggregated save stats and comment count. Adds one request per pin (billed as 'pinDetail'). Off = the rich search/board/profile card (already includes image, link, saves, video).

## `includeBoardPins` (type: `boolean`):

When scraping a board, also extract the pins inside it (not just the board summary).

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

Limit pins scraped per board (0 = no limit).

## `includeUserPins` (type: `boolean`):

When scraping a profile, also extract the creator's own pins.

## `includeUserBoards` (type: `boolean`):

When scraping a profile, also extract the creator's boards.

## `maxPinsPerUser` (type: `integer`):

Limit pins scraped per profile (0 = no limit).

## `outputCreatorLeads` (type: `boolean`):

For every unique creator behind the pins you scrape, output a contact-ready lead record — website, Instagram, verified-merchant status, follower count and a lead score. Great for influencer/affiliate outreach and merchant prospecting.

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

Overall cap on the number of pins + boards + profiles in the dataset (creator leads are not counted against this). Use a small number for quick test runs.

## `monitorMode` (type: `boolean`):

Remember pins seen on previous runs (in a named key-value store keyed by 'Monitor key') and emit ONLY pins that are new since last time. Pair with Apify Schedules to build a 'new pins for this keyword/board/profile' feed. Works alongside — not instead of — the scheduler.

## `monitorKey` (type: `string`):

Names the memory bucket for monitor mode. Use a different key per saved search/board so their 'seen' histories don't mix.

## `maxConcurrency` (type: `integer`):

Maximum parallel requests.

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

Proxy settings. Pinterest is light on anti-bot, so the default Apify datacenter proxy is plenty; switch the group to RESIDENTIAL if you ever see blocks at high volume.

## Actor input object example

```json
{
  "searchQueries": [
    "home office desk setup"
  ],
  "searchType": "pins",
  "includePinDetails": false,
  "includeBoardPins": true,
  "maxPinsPerBoard": 100,
  "includeUserPins": true,
  "includeUserBoards": false,
  "maxPinsPerUser": 100,
  "outputCreatorLeads": false,
  "maxItems": 200,
  "monitorMode": false,
  "monitorKey": "default",
  "maxConcurrency": 6,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All scraped records in the default dataset. Each row is tagged with a `type` (pin, board, profile, or creatorLead).

# 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": [
        "home office desk setup"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/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": ["home office desk setup"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/pinterest-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [
    "home office desk setup"
  ]
}' |
apify call scrapesage/pinterest-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapesage/pinterest-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/QRLWDbeYTFXC9RCVu/builds/jii3Fleql4M4IDg7c/openapi.json
