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

Scrape Pinterest search results with images, pins, titles, descriptions, boards, creators, URLs, engagement data, and more. Extract keyword-based Pinterest content for SEO, trend analysis, competitor research, market insights, and data collection at scale.

- **URL**: https://apify.com/shahidirfan/pinterest-search-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Categories:** SEO tools, Social media, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

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

### What does Pinterest Search Scraper do?

Pinterest Search Scraper collects pins, boards, and ideas from Pinterest search results for any keyword or Pinterest search URL. Enter a term such as "Flowers", "Interior Design", or "Wallpaper 4k", or paste a Pinterest search page link, and the Actor returns structured data for every result: pin titles and descriptions, image URLs in multiple resolutions, pinner and board details, visual tags, engagement counts, and direct links.

The Actor reads the public Pinterest search feed directly, so results include the same pins, boards, and ideas you see when you search Pinterest yourself. Output is saved to an Apify dataset and can be exported as JSON, CSV, Excel, or XML, or sent to Google Sheets, Make, Zapier, or your own system through the Apify API.

### Why use Pinterest Search Scraper?

- **Clean, structured datasets** - Turn Pinterest search results into tidy rows with consistent fields instead of copying and pasting from the browser.
- **Keyword and URL driven** - Scrape by plain keyword or by any Pinterest search page URL, including pin, board, and idea searches.
- **Rich image data** - Get original image URLs plus multiple downscaled sizes (236x, 474x, 736x) for every pin, ready for content pipelines or media archives.
- **Automation ready** - Run on demand or schedule repeat runs, then export or push results anywhere through Apify integrations.
- **Proxy aware** - Configure Apify Proxy (residential recommended) to reduce rate limiting during large or frequent runs.

### What data can you extract from Pinterest?

| Field              | Description                                                       |
| ------------------ | ----------------------------------------------------------------- |
| `id`               | Unique Pinterest pin or board ID                                  |
| `title`            | Pin title                                                         |
| `description`      | Pin description text when published                               |
| `url`              | Direct Pinterest link to the pin                                  |
| `image_url`        | Original resolution image URL                                     |
| `images`           | Image URLs and dimensions at 236x, 474x, 736x, and original sizes |
| `dominant_color`   | HEX color extracted from the pin image                            |
| `tags`             | Visual annotation tags describing the pin                         |
| `like_count`       | Number of reactions on the pin                                    |
| `pinner_username`  | Username of the person who created the pin                        |
| `pinner_full_name` | Full name of the pin creator                                      |
| `board_name`       | Board the pin belongs to                                          |
| `board_url`        | Direct link to the board                                          |
| `search_keyword`   | Keyword used to find the result                                   |
| `search_url`       | Search URL used to find the result                                |

Board search results include board name, description, URL, pin count, follower count, and owner details.

### How to use Pinterest Search Scraper

1. Open Pinterest Search Scraper on Apify Store.
2. Enter a search keyword such as `Flowers`, or paste a Pinterest search URL such as `https://www.pinterest.com/search/pins/?q=Flowers&rs=typed`.
3. Set the maximum number of results and the optional page cap.
4. Run the Actor.
5. Open the dataset and download results, or connect the run to an integration.

If you provide both a URL and a keyword, the URL takes priority. When only a keyword is given, the Actor builds the Pinterest pin search URL for you.

### Input Parameters

| Parameter            | Type    | Required | Default                 | Description                                                                     |
| -------------------- | ------- | -------- | ----------------------- | ------------------------------------------------------------------------------- |
| `startUrl`           | String  | No       | -                       | Pinterest search URL to scrape. Takes priority over `keyword` when both are set |
| `keyword`            | String  | No       | `Flowers`               | Search term to look up on Pinterest                                             |
| `results_wanted`     | Integer | No       | `20`                    | Maximum number of results to collect across all searches                        |
| `max_pages`          | Integer | No       | `10`                    | Safety cap on the number of pagination pages per search query                   |
| `proxyConfiguration` | Object  | No       | Apify Proxy residential | Proxy settings used to avoid rate limiting                                      |

At least one of `startUrl` or `keyword` must resolve to a search term. A URL to a non-search Pinterest page will be skipped.

### Output Data

| Field                   | Type    | Description                                                       |
| ----------------------- | ------- | ----------------------------------------------------------------- |
| `id`                    | String  | Pinterest pin or board ID                                         |
| `node_id`               | String  | Encoded node identifier from Pinterest                            |
| `type`                  | String  | `pin` or `board`                                                  |
| `title`                 | String  | Pin title                                                         |
| `description`           | String  | Pin description text                                              |
| `link`                  | String  | Outbound destination link when the pin points to an external site |
| `domain`                | String  | Source domain of the pin                                          |
| `url`                   | String  | Direct Pinterest pin URL                                          |
| `image_url`             | String  | Original resolution image URL                                     |
| `image_width`           | Integer | Width of the original image                                       |
| `image_height`          | Integer | Height of the original image                                      |
| `images`                | Object  | Image URLs and dimensions at multiple sizes                       |
| `dominant_color`        | String  | HEX dominant color of the pin image                               |
| `created_at`            | String  | Date the pin was created                                          |
| `alt_text`              | String  | Accessibility alt text for the pin image                          |
| `tags`                  | Array   | Visual annotation tags for the pin                                |
| `like_count`            | Integer | Reaction count on the pin                                         |
| `saves_count`           | Integer | Number of times the pin was saved                                 |
| `pinner_id`             | String  | Pinterest ID of the pin creator                                   |
| `pinner_username`       | String  | Username of the pin creator                                       |
| `pinner_full_name`      | String  | Full name of the pin creator                                      |
| `pinner_follower_count` | Integer | Follower count of the pin creator                                 |
| `board_id`              | String  | Pinterest ID of the board                                         |
| `board_name`            | String  | Name of the board                                                 |
| `board_url`             | String  | Direct link to the board                                          |
| `search_keyword`        | String  | Keyword used to find this result                                  |
| `search_url`            | String  | Search URL used to find this result                               |
| `source`                | String  | Always `pinterest`                                                |

Empty and whitespace-only fields are removed from each record so the dataset stays compact and clean.

### Usage Examples

#### Basic keyword search

Collect the first 20 pins for a keyword:

```json
{
    "keyword": "Flowers",
    "results_wanted": 20
}
```

#### Search by Pinterest URL

Use any Pinterest search page URL, including board searches:

```json
{
    "startUrl": "https://www.pinterest.com/search/pins/?q=Interior+Design&rs=typed",
    "results_wanted": 100,
    "max_pages": 5
}
```

#### Board search

Scrape board search results instead of pins:

```json
{
    "startUrl": "https://www.pinterest.com/search/boards/?q=Minimalist+Design",
    "results_wanted": 25,
    "max_pages": 3
}
```

#### Higher volume run with proxy

Pull a larger dataset while rotating residential proxies to reduce rate limiting:

```json
{
    "keyword": "Wallpaper 4k",
    "results_wanted": 500,
    "max_pages": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
```

### Sample Output

```json
{
    "id": "614952524168493466",
    "node_id": "UGluOjYxNDk1MjUyNDE2ODQ5MzQ2Ng==",
    "type": "pin",
    "domain": "Uploaded by user",
    "url": "https://www.pinterest.com/pin/614952524168493466/",
    "image_url": "https://i.pinimg.com/originals/ab/a5/a8/aba5a8844c33eee3224b3e4c17cda17d.jpg",
    "image_width": 675,
    "image_height": 1200,
    "images": {
        "236x": {
            "url": "https://i.pinimg.com/236x/ab/a5/a8/aba5a8844c33eee3224b3e4c17cda17d.jpg",
            "width": 236,
            "height": 419
        },
        "474x": {
            "url": "https://i.pinimg.com/474x/ab/a5/a8/aba5a8844c33eee3224b3e4c17cda17d.jpg",
            "width": 474,
            "height": 842
        },
        "orig": {
            "url": "https://i.pinimg.com/originals/ab/a5/a8/aba5a8844c33eee3224b3e4c17cda17d.jpg",
            "width": 675,
            "height": 1200
        }
    },
    "dominant_color": "#9a83b7",
    "created_at": "Mon, 13 Jul 2026 19:11:09 +0000",
    "alt_text": "pink flowers are blooming on the branches of trees",
    "tags": ["Pictures Of Flowers Photography", "Floral Iphone Wallpaper", "Flowers Aesthetic"],
    "like_count": 20,
    "pinner_id": "614952661527183236",
    "pinner_username": "cindy_lemaitre",
    "pinner_full_name": "Cindy Lemaitre",
    "pinner_follower_count": 44,
    "board_id": "614952592809050737",
    "board_name": "Enregistrements rapides",
    "board_url": "https://www.pinterest.com/cindy_lemaitre/_quick_saves/",
    "board_pin_count": 218,
    "search_keyword": "Flowers",
    "search_url": "https://www.pinterest.com/search/pins/?q=Flowers&rs=typed",
    "source": "pinterest"
}
```

### Tips for Best Results

- Use a complete Pinterest search URL when you want a specific scope such as boards or ideas. Pin search is used by default for plain keywords.
- Start with `results_wanted` at 20 to test a keyword, then raise the limit once the data looks right.
- Some pins do not publish a description, alt text, or reaction counts. Missing fields are omitted from the record rather than filled with empty values.
- For large runs, enable Apify Proxy with the residential group to reduce rate limiting.
- Pinterest pages and their search feed can change over time. If a run returns unexpected results, check the Actor page for updates or open an issue.

### Integrations

- **Google Sheets** - Send scraped pins and boards to spreadsheets for analysis.
- **Webhooks** - Trigger downstream workflows after each run.
- **Make or Zapier** - Connect results to no-code automations.
- **API** - Access datasets programmatically from your own systems.
- **Export formats** - Download results as JSON, CSV, Excel, XML, or other supported formats.

### Frequently Asked Questions

#### Can I export Pinterest data to CSV or Excel?

Yes. Apify datasets can be downloaded in CSV, Excel, JSON, XML, and other supported formats directly from the dataset preview page.

#### Can I run this Actor on a schedule?

Yes. You can schedule the Actor in Apify Console to refresh data hourly, daily, weekly, or at another interval, which is useful for monitoring Pinterest trends over time.

#### Can I scrape boards and ideas too?

Yes. Use a board search URL such as `https://www.pinterest.com/search/boards/?q=Minimalist+Design` or an ideas URL. Board records include pin counts, follower counts, and owner details.

#### What if some fields are missing from my results?

Pinterest does not publish every field for every pin. Fields such as descriptions and reaction counts may be absent. The Actor removes empty fields, so missing data is a source limitation, not a scrape failure.

#### What is the best proxy setting?

Residential proxies generally work best with Pinterest. Set `apifyProxyGroups` to `["RESIDENTIAL"]` for large or frequent runs.

#### Is it legal to scrape Pinterest?

Scraping public web data can be legal, but you are responsible for complying with applicable laws, Pinterest terms of service, and privacy rules.

### Related Actors

- [Pinterest Ads Scraper](https://apify.com/shahidirfan/pinterest-ads-scraper) - Extract Pinterest ads and promoted pins with creatives, targeting details, and advertiser data.
- [Pexels Stock Image Scraper](https://apify.com/shahidirfan/pexels-stock-image-scraper) - Bulk collect high-resolution royalty-free images from Pexels with photographer details and metadata.
- [Unsplash Image Scraper](https://apify.com/shahidirfan/unsplash-image-scraper) - Collect image metadata and download URLs from Unsplash search, collections, topics, and profiles.
- [Pixabay Image Scraper](https://apify.com/shahidirfan/pixabay-image-scraper) - Extract image URLs, tags, and uploader metadata from Pixabay search results.

### Support

For issues, feature requests, or custom Actor work, use the Issues tab on the Actor page or contact the developer through Apify.

### Legal Notice

This Actor is designed for legitimate data collection from publicly available Pinterest search results. Users are responsible for using the data responsibly and complying with applicable laws, Pinterest terms of service, and privacy rules.

# Actor input Schema

## `startUrl` (type: `string`):

Pinterest search URL to scrape, e.g. https://www.pinterest.com/search/pins/?q=Flowers\&rs=typed. If provided, this takes priority over the keyword field.

## `keyword` (type: `string`):

Search term to look up on Pinterest, e.g. 'Flowers', 'Interior Design', 'Wallpaper 4k'. Used when no URL is provided.

## `results_wanted` (type: `integer`):

The maximum number of results to collect across all searches.

## `max_pages` (type: `integer`):

Safety cap on the number of pagination pages visited per search query.

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

Use Apify Proxy (RESIDENTIAL recommended for Pinterest) to avoid rate limiting.

## Actor input object example

```json
{
  "startUrl": "https://www.pinterest.com/search/pins/?q=Flowers&rs=typed",
  "keyword": "Flowers",
  "results_wanted": 20,
  "max_pages": 10,
  "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 = {
    "startUrl": "https://www.pinterest.com/search/pins/?q=Flowers&rs=typed",
    "keyword": "Flowers",
    "results_wanted": 20,
    "max_pages": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/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 = {
    "startUrl": "https://www.pinterest.com/search/pins/?q=Flowers&rs=typed",
    "keyword": "Flowers",
    "results_wanted": 20,
    "max_pages": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/pinterest-search-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 '{
  "startUrl": "https://www.pinterest.com/search/pins/?q=Flowers&rs=typed",
  "keyword": "Flowers",
  "results_wanted": 20,
  "max_pages": 10
}' |
apify call shahidirfan/pinterest-search-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/jgnjO4O1xBUpWOLnW/builds/jI1GjduOB7RnXdmmb/openapi.json
