# 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:** 2 total users, 1 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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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.

### 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

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Pinterest Scraper - Pins, Boards, Profiles & Leads",
        "description": "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.",
        "version": "0.1",
        "x-build-id": "QNogvcZMb7KkEQuEj"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapesage~pinterest-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapesage-pinterest-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/scrapesage~pinterest-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapesage-pinterest-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/scrapesage~pinterest-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapesage-pinterest-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchQueries": {
                        "title": "Search keywords",
                        "type": "array",
                        "description": "One or more keywords to search Pinterest for. Use the 'Search type' below to pick whether each keyword returns pins, boards or profiles.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchType": {
                        "title": "Search type",
                        "enum": [
                            "pins",
                            "boards",
                            "users"
                        ],
                        "type": "string",
                        "description": "What your keyword searches return: Pins (images/videos with links & prices), Boards, or Profiles (creators).",
                        "default": "pins"
                    },
                    "pinUrls": {
                        "title": "Pin URLs",
                        "type": "array",
                        "description": "Specific pin URLs (e.g. `https://www.pinterest.com/pin/12345/`) or pin IDs to scrape in full (image/video, link, saves, comments, price).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "boardUrls": {
                        "title": "Board URLs",
                        "type": "array",
                        "description": "Board URLs (e.g. `https://www.pinterest.com/username/board-slug/`). Returns the board details and, by default, its pins.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "usernames": {
                        "title": "Profiles / usernames",
                        "type": "array",
                        "description": "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.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Start URLs (any Pinterest URL)",
                        "type": "array",
                        "description": "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.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "includePinDetails": {
                        "title": "Enrich pins with full details",
                        "type": "boolean",
                        "description": "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).",
                        "default": false
                    },
                    "includeBoardPins": {
                        "title": "Include board pins",
                        "type": "boolean",
                        "description": "When scraping a board, also extract the pins inside it (not just the board summary).",
                        "default": true
                    },
                    "maxPinsPerBoard": {
                        "title": "Max pins per board",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Limit pins scraped per board (0 = no limit).",
                        "default": 100
                    },
                    "includeUserPins": {
                        "title": "Include profile pins",
                        "type": "boolean",
                        "description": "When scraping a profile, also extract the creator's own pins.",
                        "default": true
                    },
                    "includeUserBoards": {
                        "title": "Include profile boards",
                        "type": "boolean",
                        "description": "When scraping a profile, also extract the creator's boards.",
                        "default": false
                    },
                    "maxPinsPerUser": {
                        "title": "Max pins per profile",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Limit pins scraped per profile (0 = no limit).",
                        "default": 100
                    },
                    "outputCreatorLeads": {
                        "title": "Output creator leads",
                        "type": "boolean",
                        "description": "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.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Max results",
                        "minimum": 1,
                        "type": "integer",
                        "description": "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.",
                        "default": 200
                    },
                    "monitorMode": {
                        "title": "Monitor mode (only new pins)",
                        "type": "boolean",
                        "description": "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.",
                        "default": false
                    },
                    "monitorKey": {
                        "title": "Monitor key",
                        "type": "string",
                        "description": "Names the memory bucket for monitor mode. Use a different key per saved search/board so their 'seen' histories don't mix.",
                        "default": "default"
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 16,
                        "type": "integer",
                        "description": "Maximum parallel requests.",
                        "default": 6
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "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.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
