# Pinterest Search Scraper — Pins, Boards & People (`apt_marble/pinterest-search-scraper`) Actor

Search Pinterest by keyword and export pins, video pins, boards or people as clean structured data: images, captions, links, destinations, creators and exact ranking. Every search also returns Pinterest's own scored related search terms, free. Add real save, repin and comment counts on demand.

- **URL**: https://apify.com/apt\_marble/pinterest-search-scraper.md
- **Developed by:** [Hamza](https://apify.com/apt_marble) (community)
- **Categories:** Social media, SEO tools, Automation
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 result 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 Search Scraper — Pins, Videos, Boards & People

Type the words you would type into Pinterest's own search box and get the results back as a clean, structured table. One run can cover many search terms at once and can return four different things for the same words: **pins**, **video pins**, **boards**, or **people**. Every row arrives ranked exactly as Pinterest ranked it, with the image, the caption, the outbound link, the destination site, the board it lives on and the creator behind it. Switch on full engagement metrics and each pin also carries its real save, repin, share and comment figures. Marketers, SEO teams, trend researchers and e-commerce brands use it to see what is actually working on Pinterest for any topic — no Pinterest account needed.

### What you can do with it

- **Research a niche end to end** — pull the top few hundred pins for a topic and see which images, captions, destinations and creators dominate the results.
- **Find the accounts and boards that own a topic** — switch to the people or boards list and get follower counts, pin counts and profile links you can sort and shortlist.
- **Build a Pinterest SEO keyword map** — every pin and video search also returns Pinterest's own scored list of related search terms, so one run gives you both the results and the next ten terms worth targeting.
- **Track a competitor's reach** — turn on full engagement metrics and sort a topic by real saves and repins instead of guessing from the grid.
- **Harvest video content ideas** — the video list returns only pins that genuinely carry video, with playable links, dimensions and duration.
- **Feed a content or ads pipeline** — schedule it weekly per keyword and watch which destinations and creators move up and down the rankings.

### What you get

One row per result. This is a real, abridged record from a pin search with full engagement metrics turned on:

```json
{
  "type": "pin",
  "id": "106679084920429920",
  "url": "https://www.pinterest.com/pin/106679084920429920/",
  "title": "Modern Home Office Ideas | Luxury Japandi Workspace Design Inspiration",
  "description": "Upgrade your work-from-home setup with this luxury Japandi-inspired home office featuring a custom walnut built-in workspace, floating oak desk, warm LED shelving…",
  "altText": "A luxurious modern home office featuring a custom walnut and greige built-in workstation with floating oak desk, warm LED-lit display shelves…",
  "createdAt": "2026-07-27T21:14:01.000Z",
  "domain": null,
  "link": null,
  "imageUrl": "https://i.pinimg.com/originals/76/30/bc/7630bc2d0e49b47f25efa455986a2863.png",
  "imageWidth": 1024,
  "imageHeight": 1536,
  "isVideo": false,
  "saveCount": 99,
  "repinCount": 4,
  "commentCount": 0,
  "shareCount": 0,
  "reactionCount": 9,
  "boardName": "Office",
  "boardUrl": "https://www.pinterest.com/ngold90/office/",
  "pinnerUsername": "ngold90",
  "pinnerFollowerCount": 14,
  "creatorUsername": "vistavibe07",
  "creatorFollowerCount": 78,
  "isPromoted": false,
  "promotedBy": null,
  "isRepin": true,
  "searchQuery": "home office ideas",
  "searchScope": "pins",
  "position": 1,
  "hasFullDetails": true,
  "scrapedAt": "2026-08-04T14:03:23.660Z",
  "relatedKeywords": [
    {
      "term": "home office ideas for small spaces",
      "display": "Small spaces",
      "score": 8.394435212583222,
      "url": "https://www.pinterest.com/search/pins/?q=home%20office%20ideas%20for%20small%20spaces",
      "imageUrl": "https://i.pinimg.com/60x60/bb/0c/ed/bb0ceda2be7adb8a78fbbd7151567077.jpg"
    },
    {
      "term": "cozy home office ideas",
      "display": "Cozy",
      "score": 8.379071822164775,
      "url": "https://www.pinterest.com/search/pins/?q=cozy%20home%20office%20ideas",
      "imageUrl": "https://i.pinimg.com/60x60/9b/2c/ae/9b2caede7fc46650239facc7437cb69d.jpg"
    }
  ]
}
```

Board rows and people rows use the same table with the fields that suit them — board name, pin count, owner and visibility for boards; username, full name, follower count, pin count and board count for people.

### Input reference

| Field | Type | Default | What it does |
| --- | --- | --- | --- |
| `queries` | List of text | *required* | The things to search Pinterest for. Plain words such as `coffee recipes`, or paste a Pinterest search page address and the term is read off it. Duplicates are merged; up to 100 terms per run. |
| `scope` | Dropdown | `Pins` | Which of Pinterest's four public result lists to collect: **Pins**, **Video pins**, **Boards** or **People**. |
| `maxItemsPerQuery` | Number (1–2000) | `100` | How many results to collect for each search term before moving on. |
| `includePromoted` | Switch | Off | Pinterest mixes paid placements into results — on some topics they are close to half the grid. Off removes them, so you get organic results only. On keeps them, flagged with `isPromoted` and with the advertiser behind them in `promotedBy`. |
| `enrichEngagement` | Switch | Off | Adds the real `saveCount`, `repinCount`, `shareCount` and `commentCount` to every pin row. Pinterest's search listing does not publish those figures, so each pin is looked up on its own — the run takes longer and this is billed as a second event. Pin and video searches only. |
| `includeRelatedKeywords` | Switch | On | Attaches Pinterest's own scored list of related search terms to the top-ranked row for each search term, in `relatedKeywords`, at no extra cost. |
| `country` | Dropdown | United States | Pinterest personalises results by market. Pick the one you care about; it stays the same for the whole run. |

### Output fields

#### Every row

| Field | Type | Description |
| --- | --- | --- |
| `type` | string | `pin`, `board` or `user`. |
| `id` | string | Pinterest's own identifier. |
| `url` | string | Direct link to the pin, board or profile. |
| `title` | string | The headline Pinterest shows. Often empty on pins — see `altText`. |
| `imageUrl` | string | Largest available image. |
| `searchQuery` | string | The term this row came from. |
| `searchScope` | string | Which of the four lists it came from. |
| `position` | number | Rank in Pinterest's own result order, starting at 1. |
| `relatedKeywords` | array | null | Scored related search terms, on the top-ranked row of each term. |
| `scrapedAt` | string | When the row was collected (ISO 8601). |

#### Pin and video rows

| Field | Type | Description |
| --- | --- | --- |
| `description` | string | The pin's own caption. |
| `altText` | string | Image description — filled in automatically by Pinterest when a pin has no caption of its own. |
| `createdAt` | string | When the pin was published (ISO 8601). |
| `link`, `trackedLink`, `utmLink` | string | Where the pin sends people. |
| `domain` | string | Destination site, or `null` when the pin has no outbound link. |
| `imageWidth`, `imageHeight`, `images` | number, object | Image size, and every size Pinterest publishes. |
| `isVideo`, `videoUrl`, `videoUrls`, `videoWidth`, `videoHeight`, `videoDurationMs`, `videoThumbnailUrl` | mixed | Video details for video pins. |
| `saveCount`, `repinCount`, `shareCount`, `commentCount`, `triedCount` | number | null | Engagement. `null` unless full engagement metrics are switched on. |
| `reactionCount`, `reactions` | number, object | Emoji reactions — these are published on every pin row. |
| `boardId`, `boardName`, `boardUrl`, `boardOwnerUsername` | string | The board the pin sits on. |
| `pinnerUsername`, `pinnerFullName`, `pinnerFollowerCount`, `pinnerImageUrl` | mixed | Who saved this copy of the pin. |
| `creatorUsername`, `creatorFullName`, `creatorFollowerCount`, `creatorDomain`, `creatorDomainVerified` | mixed | The original creator or merchant behind it, which is often a different account. |
| `isPromoted`, `isRepin` | boolean | Whether the row is a paid placement, and whether it is a re-save. |
| `promotedBy` | string | null | The advertiser behind a paid placement, which is usually a different account from the one that pinned it. `null` on organic rows. |
| `isProduct`, `shoppingFlags`, `price`, `priceCurrency`, `richPinType`, `publisher` | mixed | Shopping and rich-pin details, where Pinterest publishes them. |
| `category`, `dominantColor` | string | Topic label and dominant colour. |
| `hasFullDetails` | boolean | `true` when the row carries full engagement metrics. |

#### Board rows

`name`, `description`, `seoDescription`, `pinCount`, `sectionCount`, `privacy`, `isCollaborative`, `createdAt`, `lastPinnedAt`, `imageUrl`, `coverImages`, `ownerUsername`, `ownerFullName`.

#### People rows

`username`, `fullName`, `followerCount`, `pinCount`, `boardCount`, `isVerifiedMerchant`, `domainVerified`, `lastPinSavedAt`, `imageUrl`.

### Pricing

You pay per result, not per minute.

| What you pay for | Price |
| --- | --- |
| **Result scraped** — every row stored, whatever the search type | **$1.20 per 1,000** |
| **Full engagement metrics** — only for pins you asked to enrich | **$4.00 per 1,000** |

**Worked example.** You search five keywords and take 200 pins each — 1,000 rows. Leave full engagement metrics off and the run costs **$1.20**. Turn it on and all 1,000 rows get their real save, repin, share and comment figures, so you pay $1.20 for the rows plus $4.00 for the engagement, **$5.20 in total**. Related search terms are included either way and never add anything to the bill.

### Limits & what this actor cannot do

- Pinterest publishes a limited number of public results for any one search, so a very large target returns what Pinterest makes available rather than an unlimited history.
- Save, repin, share and comment counts are **not** part of Pinterest's search listing. Leave full engagement metrics off and those columns arrive empty; switch it on and they are filled in.
- All counts — saves, repins, comments, followers — are a snapshot at the moment of collection and keep changing afterwards.
- A search that matches nothing still comes back with loosely related pins rather than an empty list, so the number of rows is not a measure of how well your term matched.
- A board search publishes how many pins a board holds, but not how many followers it has. A people search publishes follower, pin and board counts, but no bio or website.
- Many pins are published with no caption of their own; those arrive with an automatically generated image description in `altText` instead.
- Results are personalised to the market the run browses from, so the same words from a different country can return a different set.
- Paid placements appear inside Pinterest's own results, and on some topics — video searches especially — they can be close to half of what Pinterest returns. They are removed by default and flagged when kept, but they cannot be counted as organic.
- Private profiles and secret boards are not publicly viewable and are reported as unavailable rather than returned empty.
- Speed depends on the size of the job and on Pinterest's own response times; no fixed throughput is promised.
- Pinterest's terms govern automated access. You are responsible for using the data lawfully and in line with the source site's terms, and for handling any personal data in line with applicable privacy law.

### FAQ

**Do I need a Pinterest account?**
No. It reads only what Pinterest publishes to the open web.

**Does it need my login or password?**
No, never. There is nothing to connect and nothing to authorise.

**Can I schedule it?**
Yes. Point it at your keywords and run it daily, weekly or monthly — the `position` and `scrapedAt` fields on every row make ranking comparisons between runs straightforward.

**Is the data complete?**
It is complete for what Pinterest publishes openly. Pinterest caps how many public results it will serve for one search, so a very large target stops when Pinterest stops. Engagement figures are only present when you switch them on, and pins with no caption arrive with an automatic image description instead.

**Why is `title` sometimes empty?**
Plenty of pins are published without a headline. When that happens `altText` still describes the image, and that is usually the more useful field for filtering and classification anyway.

**Why does `pinnerUsername` differ from `creatorUsername`?**
Pinterest lets anyone re-save someone else's pin. `pinnerUsername` is the account whose copy appeared in the results; `creatorUsername` is the original creator or merchant behind it. Both are given so you can attribute correctly.

# Actor input Schema

## `queries` (type: `array`):

One or more things to search Pinterest for. Type plain keywords such as "coffee recipes", or paste a Pinterest search page address and the term is taken from it. Up to 100 terms per run.

## `scope` (type: `string`):

Pinterest keeps four separate public result lists for the same words. Pick the one you want: pins, video pins only, boards, or people.

## `maxItemsPerQuery` (type: `integer`):

How many results to collect for each search term before moving on. Pinterest publishes a limited number of public results for any one search, so a very high number simply returns everything Pinterest makes available.

## `includePromoted` (type: `boolean`):

Pinterest mixes paid placements into search results — on some topics they are close to half the grid. Leave this off to get organic results only. When on, they are kept and flagged with isPromoted, with the advertiser behind each one in promotedBy.

## `enrichEngagement` (type: `boolean`):

Pinterest's search results do not publish save, repin, share or comment counts. Turn this on to look each pin up individually and add its real figures. This is billed as a separate paid event and makes the run take longer. Applies to pin and video searches only.

## `includeRelatedKeywords` (type: `boolean`):

Pinterest returns its own scored list of related search terms with every pin and video search. They are attached, at no extra cost, to the top-ranked row for each search term in the relatedKeywords field.

## `country` (type: `string`):

Pinterest personalises results by location, so the same words can return a different set from a different country. Pick the market you care about and it is kept the same for the whole run.

## Actor input object example

```json
{
  "queries": [
    "coffee recipes",
    "home office ideas"
  ],
  "scope": "pins",
  "maxItemsPerQuery": 50,
  "includePromoted": false,
  "enrichEngagement": false,
  "includeRelatedKeywords": true,
  "country": "us"
}
```

# Actor output Schema

## `dataset` (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 = {
    "queries": [
        "coffee recipes",
        "home office ideas"
    ],
    "scope": "pins",
    "maxItemsPerQuery": 50,
    "country": "us"
};

// Run the Actor and wait for it to finish
const run = await client.actor("apt_marble/pinterest-search-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 = {
    "queries": [
        "coffee recipes",
        "home office ideas",
    ],
    "scope": "pins",
    "maxItemsPerQuery": 50,
    "country": "us",
}

# Run the Actor and wait for it to finish
run = client.actor("apt_marble/pinterest-search-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 '{
  "queries": [
    "coffee recipes",
    "home office ideas"
  ],
  "scope": "pins",
  "maxItemsPerQuery": 50,
  "country": "us"
}' |
apify call apt_marble/pinterest-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,apt_marble/pinterest-search-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/27hamXrTrSCNL4KKo/builds/iFcU417pMIMhZcQCU/openapi.json
