# Pinterest Search Scraper (`anyxsolutions/pinterest-search-scraper`) Actor

Scrapes Pinterest search results and pin pages without logging in. Get pin titles, descriptions, images, videos, product links, boards and pinners for any keyword.

- **URL**: https://apify.com/anyxsolutions/pinterest-search-scraper.md
- **Developed by:** [Anyx Solutions](https://apify.com/anyxsolutions) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

![banner](https://anyx.solutions/banners/pinterest-search-scraper.png)

## Pinterest Search Scraper

**Turn any Pinterest keyword or pin URL into clean, structured pin data — no login, no browser.**

Scrapes Pinterest search results and pin pages without logging in. Get pin titles, descriptions, images, videos, product links, boards and pinners for any keyword. Built for marketers tracking visual trends, e-commerce teams mining product pins, researchers collecting image datasets, and anyone who needs Pinterest data in a spreadsheet instead of an endless scroll.

### ⚡ Quick start

```json
{
  "startUrls": [{ "url": "https://www.pinterest.com/search/pins/?q=modern%20kitchen" }],
  "searchQueries": ["wedding hairstyles"],
  "maxItems": 5
}
```

### 🧩 Input

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `startUrls` | array | yes | — | Pinterest search URLs (`https://www.pinterest.com/search/pins/?q=<keyword>`) or pin URLs (`https://www.pinterest.com/pin/<id>/`). Any Pinterest country domain works. |
| `searchQueries` | array | no | — | Plain keywords to search for. Each keyword is scraped like a search URL and gets its own `maxItems` budget. |
| `maxItems` | integer | no | `5` | Maximum number of pins per start URL or search query. |
| `proxyConfiguration` | object | no | `{ "useApifyProxy": false }` | Apify proxy settings. Pinterest answers without a proxy; enable one if runs start returning empty pages. |

### 📤 Output

Every pin is pushed to the dataset as one row. Search results and pin pages share the same shape; pins found through a search carry the `query` they came from, while pins scraped from a pin URL also carry `repin_count` (the save count), which Pinterest only exposes on the pin page.

#### Fields

| Field | Type | Description |
|---|---|---|
| `itemType` | string | Always `pin`. |
| `pin_id` | string | Pinterest pin id. |
| `url` | string | Canonical pin URL. |
| `title` | string | Pin title (empty string when the pin has none). |
| `description` | string | null | Pin description text. |
| `alt_text` | string | null | Alt text describing the image. |
| `image` | string | null | Full-resolution image URL. |
| `image_thumb` | string | null | 236px-wide thumbnail URL. |
| `destination_link` | string | null | External link the pin points to. |
| `video_url` | string | null | Video stream URL for video pins. |
| `is_product` | boolean | `true` when Pinterest flags the pin as a shoppable product. |
| `board` | string | null | Name of the board the pin is saved to. |
| `owner` | string | null | Username of the pinner. |
| `query` | string | null | Search keyword that surfaced the pin; `null` for pins scraped from a pin URL. |
| `created_at` | string | null | When the pin was created (RFC 2822 date). |
| `repin_count` | integer | null | Number of saves; only available on pin pages. |
| `pinner_url` | string | null | Profile URL of the pinner. |
| `board_url` | string | null | URL of the board. |
| `dominant_color` | string | null | Dominant image colour as a hex code. |
| `width` | integer | null | Original image width in pixels. |
| `height` | integer | null | Original image height in pixels. |

<details><summary>Example output</summary>

```json
{
  "itemType": "pin",
  "pin_id": "435441857742802519",
  "url": "https://www.pinterest.com/pin/435441857742802519/",
  "title": "Mid-century Modern Home Paint Palette Sherwin Williams Complementary Hues Whole House Color Scheme Guide",
  "description": "Youthful Home Colors, Saturated Paint Tones, Color Blocking Ideas, Modern Vibrant Paint, Eclectic Room Colors",
  "alt_text": "a kitchen with white cabinets and wood flooring is shown in this image, there are lights hanging from the ceiling",
  "image": "https://i.pinimg.com/originals/ee/a9/36/eea936a0aacafb70bda6a41f6b50fb22.jpg",
  "image_thumb": "https://i.pinimg.com/236x/ee/a9/36/eea936a0aacafb70bda6a41f6b50fb22.jpg",
  "destination_link": "https://www.etsy.com/listing/1744469622/mid-century-modern-home-paint-palette",
  "video_url": null,
  "is_product": true,
  "board": "Ideas for the House",
  "owner": "nmbtooth",
  "query": "modern kitchen",
  "created_at": "Sun, 30 Nov 2025 17:03:38 +0000",
  "repin_count": 760,
  "pinner_url": "https://www.pinterest.com/nmbtooth/",
  "board_url": "https://www.pinterest.com/nmbtooth/ideas-for-the-house/",
  "dominant_color": "#bcafa2",
  "width": 470,
  "height": 836
}
```

</details>

### 💡 Use cases

- **Trend research** — track which kitchens, outfits or recipes dominate a keyword week over week.
- **Product discovery** — filter `is_product` pins and their `destination_link` to find what sells on Pinterest.
- **Image datasets** — collect full-resolution images with alt text and dominant colours for design or ML work.
- **Competitor monitoring** — see which boards and pinners own a keyword and how their pins are described.

### ❓ FAQ

- **Do I need a proxy?** No. Pinterest answers without one. If your runs start returning empty pages, switch on Apify proxy in `proxyConfiguration`.
- **Do I need a Pinterest account?** No. The Actor reads the public search and pin pages only.
- **How many results can I get?** `maxItems` caps pins per start URL or search query. Add more keywords to widen coverage.
- **Why is `repin_count` empty?** Pinterest only exposes the save count on the pin page, so it is filled for pin URLs and `null` for search results.
- **Why did a run return fewer items than expected?** Pinterest may have changed its page format. Open an issue and we will update the Actor.

### 🔗 More scrapers by Anyx

- [TikTok Trending Hashtags Scraper](https://apify.com/anyxsolutions/tiktok-trending-hashtags-scraper)
- [YouTube Search Scraper](https://apify.com/anyxsolutions/youtube-search-scraper)
- [Reddit Scraper](https://apify.com/anyxsolutions/reddit-scraper)
- [Bluesky Scraper](https://apify.com/anyxsolutions/bluesky-scraper)

### 🤝 Anyx Solutions

We build custom scrapers and data-extraction pipelines.

- Email: tantosthor@gmail.com

# Actor input Schema

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

Pinterest search or pin URLs to scrape, for example https://www.pinterest.com/search/pins/?q=modern%20kitchen or https://www.pinterest.com/pin/435441857742802519/. Any pinterest country domain works.

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

Keywords to search for on Pinterest, for example "modern kitchen" or "wedding hairstyles". Each keyword is scraped like a search URL and counts as its own start URL for maxItems.

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

Maximum number of pins to return per start URL or search query. Pinterest returns roughly 15 to 25 pins per page.

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

Apify proxy settings used for the run. Pinterest answers without a proxy; enable one if your runs start returning empty pages.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.pinterest.com/search/pins/?q=modern%20kitchen"
    },
    {
      "url": "https://www.pinterest.com/search/pins/?q=minimalist%20bedroom"
    }
  ],
  "searchQueries": [],
  "maxItems": 5,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "startUrls": [
        {
            "url": "https://www.pinterest.com/search/pins/?q=modern%20kitchen"
        },
        {
            "url": "https://www.pinterest.com/search/pins/?q=minimalist%20bedroom"
        }
    ],
    "searchQueries": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("anyxsolutions/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 = {
    "startUrls": [
        { "url": "https://www.pinterest.com/search/pins/?q=modern%20kitchen" },
        { "url": "https://www.pinterest.com/search/pins/?q=minimalist%20bedroom" },
    ],
    "searchQueries": [],
}

# Run the Actor and wait for it to finish
run = client.actor("anyxsolutions/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 '{
  "startUrls": [
    {
      "url": "https://www.pinterest.com/search/pins/?q=modern%20kitchen"
    },
    {
      "url": "https://www.pinterest.com/search/pins/?q=minimalist%20bedroom"
    }
  ],
  "searchQueries": []
}' |
apify call anyxsolutions/pinterest-search-scraper --silent --output-dataset

```

## MCP server setup

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