# Pinterest Data Extractor (`zerobreak/pinterest-data-extractor`) Actor

Pinterest Data Extractor scrapes pin images, descriptions, and IDs from any board or profile, so content teams can collect Pinterest data without copying it by hand.

- **URL**: https://apify.com/zerobreak/pinterest-data-extractor.md
- **Developed by:** [ZeroBreak](https://apify.com/zerobreak) (community)
- **Categories:** Social media
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$4.99/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period.You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#rental-actors

## 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 Data Extractor: Scrape Pins, Images, and Metadata by Keyword

Pinterest Data Extractor opens Pinterest in a real browser, searches by keyword, and captures every pin the page loads — image URLs in all sizes, descriptions, author details, board names, save counts, video URLs, and dominant colors. It works the same way tools like [SEO Review Tools Bulk Pinterest Checker](https://www.seoreviewtools.com/bulk-pinterest-pins-checker/) and [crawlerbros Pinterest scraper](https://apify.com/crawlerbros/pinterest-data-extractor) do, but runs on Apify so you don't need your own infrastructure.

> **Proxy note:** Pinterest blocks datacenter IPs at the network level. The actor defaults to Residential proxies — keep that setting to get results.

### Use cases

- Content research: pull trending pins for any keyword without scrolling manually
- SEO auditing: check which pins link back to your domain or a competitor's
- Competitor analysis: see which boards and creators dominate a keyword
- Image dataset building: collect image URLs in multiple sizes (170x to original)
- Influencer research: extract author names, usernames, and follower counts
- Trend tracking: run the same keyword on a schedule and watch save counts shift

### Input

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchQuery` | string | | Single keyword to search (e.g. `interior design`) |
| `searchQueries` | array | | Multiple keywords, one per line |
| `maxItems` | integer | 100 | Total pins to collect across all keywords (max 1000) |
| `proxyConfiguration` | object | Residential (Apify) | **Required.** Pinterest blocks datacenter IPs. Leave on the default Residential setting. |

#### Example input

```json
{
    "searchQueries": ["interior design", "wedding cakes", "car photography"],
    "maxItems": 300,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
```

### What data does this actor extract?

Each record is one Pinterest pin with full metadata:

```json
{
    "pinId": "292452569572809169",
    "pinUrl": "https://www.pinterest.com/pin/292452569572809169/",
    "pinTitle": "",
    "pinDescription": "Modern minimalist living room with neutral tones",
    "createdAt": "Mon, 03 Nov 2025 07:46:12 +0000",
    "imageUrl": "https://i.pinimg.com/originals/0b/d6/e9/0bd6e9...jpg",
    "imageSizes": {
        "170x": "https://i.pinimg.com/170x/0b/d6/e9/0bd6e9...jpg",
        "236x": "https://i.pinimg.com/236x/0b/d6/e9/0bd6e9...jpg",
        "474x": "https://i.pinimg.com/474x/0b/d6/e9/0bd6e9...jpg",
        "736x": "https://i.pinimg.com/736x/0b/d6/e9/0bd6e9...jpg",
        "orig": "https://i.pinimg.com/originals/0b/d6/e9/0bd6e9...jpg"
    },
    "dominantColor": "#6c5d56",
    "link": "https://www.instagram.com/reel/DMPX6u3pAN0/",
    "isVideo": true,
    "videoUrl": "https://v1.pinimg.com/videos/iht/hls/8f/03/99/8f0399...m3u8",
    "authorId": "292452706960849245",
    "authorUsername": "dalilacristina1",
    "authorName": "Dalila Cristina",
    "authorFollowers": 11,
    "authorUrl": "https://www.pinterest.com/dalilacristina1/",
    "boardId": "292452638242391545",
    "boardName": "Devocional 2025",
    "boardUrl": "https://www.pinterest.com/dalilacristina1/devocional-2025/",
    "saveCount": 316,
    "commentCount": 0,
    "searchQuery": "interior design",
    "scrapedAt": "2025-11-15T10:23:45.000Z"
}
```

| Field | Type | Description |
|-------|------|-------------|
| `pinId` | string | Pinterest internal ID |
| `pinUrl` | string | Pin page URL |
| `pinTitle` | string | Pin title (often empty) |
| `pinDescription` | string | Pin description text |
| `createdAt` | string | Creation date (RFC 2822) |
| `imageUrl` | string | Best quality image URL (original or 736x) |
| `imageSizes` | object | All sizes: 170x, 236x, 474x, 736x, orig |
| `dominantColor` | string | Dominant hex color of the image |
| `link` | string | External URL the pin links to |
| `isVideo` | boolean | True if the pin contains a video |
| `videoUrl` | string | HLS or MP4 video URL (video pins only) |
| `authorId` | string | Author's Pinterest user ID |
| `authorUsername` | string | Author's Pinterest username |
| `authorName` | string | Author's display name |
| `authorFollowers` | integer | Author's follower count |
| `authorUrl` | string | Author's profile URL |
| `boardId` | string | Board ID |
| `boardName` | string | Board name |
| `boardUrl` | string | Board URL |
| `saveCount` | integer | Number of saves / repins |
| `commentCount` | integer | Number of comments |
| `searchQuery` | string | Keyword that returned this pin |
| `scrapedAt` | string | ISO 8601 scrape timestamp |

### How it works

1. Opens each keyword search in a real Chromium browser with stealth settings
2. Intercepts the JSON API responses Pinterest's own JavaScript fetches automatically
3. Captures full pin metadata straight from the source — no DOM scraping, no HTML parsing
4. Scrolls down to trigger Pinterest's infinite scroll and load more pins
5. Rotates residential proxy IPs between queries to stay under rate limits

### Why Residential proxies are required

Pinterest blocks all non-residential IPs at the network level — the connection never reaches the server from a datacenter IP. The actor defaults to Apify Residential proxies. If you see 0 results or navigation errors, check that the proxy is set to Residential (not Datacenter) in the input form.

### Integrations

Connect this actor with other tools using [Apify integrations](https://apify.com/integrations). Push results directly to Google Sheets, trigger a Zapier workflow, send data to Slack, or connect with Make, Airbyte, and GitHub Actions. Use [webhooks](https://docs.apify.com/integrations/webhooks) to get notified the moment new pins are ready.

### FAQ

**Why am I getting 0 results?**
The proxy is set to Datacenter. Change it to Residential in the Proxy section — Pinterest blocks datacenter IPs completely.

**Does this work for Pinterest boards and profiles?**
Currently the actor supports keyword searches. Board and profile URL scraping is in progress.

**How many pins can I collect per run?**
Up to 1,000 per run. For larger datasets, run multiple actors with different keywords or use Apify's scheduler.

**Does this collect video pins too?**
Yes. Video pins include a `videoUrl` field with an HLS (.m3u8) stream URL.

**Can I run this on a schedule?**
Yes. Use Apify's scheduler to collect Pinterest data automatically on a recurring basis.

Pinterest Data Extractor captures full pin metadata from any public keyword search — the same data you see in tools like SEO Review Tools and Axiom, without building or maintaining your own scraper.

# Actor input Schema

## `searchQuery` (type: `string`):

A single keyword to search on Pinterest (e.g. 'interior design', 'car photography'). Builds the search URL automatically.

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

Run searches for several keywords in one go. Enter one keyword per line. Results from all keywords are combined in the dataset.

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

Total number of pins to collect across all keywords. Default is 100, max is 1000.

## `proxyUrl` (type: `string`):

Your own residential proxy URL, e.g. http://user:pass@host:port. If set, this takes priority over the Proxy configuration below. Use this for Webshare, BrightData, or any other proxy service.

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

Used only if Custom proxy URL above is empty. Defaults to Apify Residential proxies.

## Actor input object example

```json
{
  "searchQuery": "interior design",
  "searchQueries": [
    "interior design",
    "wedding cakes",
    "car photography"
  ],
  "maxItems": 100,
  "proxyUrl": "http://username:password@p.webshare.io:80",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "searchQuery": "interior design",
    "searchQueries": [
        "interior design",
        "wedding cakes"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("zerobreak/pinterest-data-extractor").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 = {
    "searchQuery": "interior design",
    "searchQueries": [
        "interior design",
        "wedding cakes",
    ],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("zerobreak/pinterest-data-extractor").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 '{
  "searchQuery": "interior design",
  "searchQueries": [
    "interior design",
    "wedding cakes"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call zerobreak/pinterest-data-extractor --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/ZQdM7VxpUhIFh5RX5/builds/8cYH5SpoBA9iOoS6o/openapi.json
