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

Search Pinterest by keyword and export pin images, video URLs, creators, boards, outbound links, positions, and public metadata.

- **URL**: https://apify.com/fetch\_cat/pinterest-search-scraper.md
- **Developed by:** [Hanna Nosova](https://apify.com/fetch_cat) (community)
- **Categories:** Social media, E-commerce, SEO tools
- **Stats:** 99 total users, 40 monthly users, 96.4% runs succeeded, 1 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $0.84 / 1,000 result extracteds

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?

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

Scrape public Pinterest search results by keyword and export clean pin metadata.

Use this Actor when you need repeatable Pinterest pin data for trend research, creative analysis, ecommerce inspiration, content planning, visual SEO research, or brand monitoring. Results can be downloaded as CSV, JSON, Excel, XML, RSS, or used through the Apify Dataset API.

### At a glance

- **Keyword search**: collect public Pinterest pins for one or many search terms.
- **Pin metadata**: save pin URLs, images, thumbnails, titles, descriptions, positions, creators, boards, colors, and outbound domains when visible.
- **Optional detail enrichment**: open pin pages to collect extra public metadata when Pinterest exposes it anonymously.
- **Locale controls**: set browser locale and country labels for research organization.
- **Visual research workflow**: export pins to spreadsheets, dashboards, creative research boards, or AI agents.

### Ready-to-run examples

Use these saved Store examples as starting points. Open any example to prefill the Actor input, then adjust URLs, keywords, limits, or filters for your own run.

- **[Scrape Pinterest DIY Craft Ideas](https://apify.com/fetch_cat/pinterest-search-scraper/examples/scrape-pinterest-diy-craft-ideas)**
- **[Scrape Pinterest Travel Inspiration](https://apify.com/fetch_cat/pinterest-search-scraper/examples/scrape-pinterest-travel-inspiration)**
- **[Scrape Pinterest Recipe Ideas](https://apify.com/fetch_cat/pinterest-search-scraper/examples/scrape-pinterest-recipe-ideas)**
- **[Scrape Pinterest Nail Design Trends](https://apify.com/fetch_cat/pinterest-search-scraper/examples/scrape-pinterest-nail-design-trends)**
- **[Scrape Pinterest Outfit Ideas](https://apify.com/fetch_cat/pinterest-search-scraper/examples/scrape-pinterest-outfit-ideas)**
- **[Scrape Pinterest Kitchen Remodel Inspiration](https://apify.com/fetch_cat/pinterest-search-scraper/examples/scrape-pinterest-kitchen-remodel-inspiration)**
- **[View all ready-to-run examples](https://apify.com/fetch_cat/pinterest-search-scraper/examples)** (10 examples)

### What can it do?

Pinterest Search Scraper turns public Pinterest keyword searches into structured pin rows.

- **Export Pinterest search results** by keyword with position, pin URL, image URL, title, and description.
- **Collect visual and creator context** such as thumbnails, dominant colors, creator names, board names, and outbound domains when visible.
- **Research ecommerce and content trends** by comparing pins across keywords.
- **Build brand or topic monitors** by scheduling recurring keyword searches.
- **Use it as a Pinterest search API workflow** for CSV, JSON, Excel, or direct Dataset API exports.

### Common workflows

- **Creative research**: collect pin images, titles, and source domains around a visual theme.
- **Ecommerce inspiration**: monitor product, decor, fashion, and lifestyle search terms.
- **Content planning**: discover popular visual topics and language for social content.
- **SEO and trend research**: compare Pinterest keyword results over time.
- **Brand monitoring**: track public pins and domains around branded terms.
- **AI image analysis**: feed image URLs and metadata into classification or clustering workflows.

### What data can you collect?

Each dataset row represents one public Pinterest pin search result.

| Field | Description |
| --- | --- |
| `query` | Keyword used for the Pinterest search |
| `position` | Result position within the keyword |
| `pinId` | Pinterest pin identifier |
| `pinUrl` | Public Pinterest pin URL |
| `title` | Public title or image alt text |
| `description` | Public description when available |
| `imageUrl` | Larger image URL when available |
| `thumbnailUrl` | Thumbnail image URL |
| `dominantColor` | Background color exposed in the public card |
| `creatorName` | Creator name when public and available |
| `creatorUsername` | Creator username when public and available |
| `creatorUrl` | Creator URL when public and available |
| `boardName` | Board name when public and available |
| `boardUrl` | Board URL when public and available |
| `domain` | Linked domain when public and available |
| `outboundUrl` | External URL when public and available |
| `repinCount` | Repin count when public and available |
| `saveCount` | Save count when public and available |
| `isVideo` | Whether Pinterest exposed the pin as video content |
| `videoUrl` | Public video URL when Pinterest exposes one |
| `fetchedAt` | Timestamp when the row was saved |

### Pricing

This Actor uses Apify pay-per-event pricing. The prices below come from the current Actor pricing configuration. Apify public plans map to Store discount tiers, so the table shows both the user-facing plan context and the pricing tier name. The final price shown in Apify depends on the user account plan and any custom agreement.

| Event | What is charged | Price |
| --- | --- | ---: |
| `start` | One-time fee charged when a run starts. Covers fixed startup cost (init, proxy warmup, first HTTP setup). | $0.005 |

| Event | What is charged | Free / no discount | Starter / Bronze | Scale / Silver | Business / Gold | Custom / Platinum | Custom / Diamond |
| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: |
| `result` | Charged per result extracted. | $0.18586 / 1,000 | $0.16162 / 1,000 | $0.12606 / 1,000 | $0.09697 / 1,000 | $0.06465 / 1,000 | $0.04525 / 1,000 |

Apify may also charge platform usage for compute, storage, proxies, or data transfer outside this Actor pricing. Check the Actor run and the Apify Pricing tab for the exact cost shown to your account.

### Input configuration

| Setting | JSON key | Use it for | Example |
| --- | --- | --- | --- |
| Pinterest search keywords | `queries` | Keywords to search on Pinterest. | `["home decor","summer outfits"]` |
| Search keywords alias | `searchQueries` | API-compatible alias combined with `queries`. | `["travel ideas"]` |
| Maximum pins per keyword | `maxResultsPerQuery` | Saved public pins per search keyword. | `50` |
| Maximum pins alias | `maxResults` | API-compatible override for `maxResultsPerQuery`. | `25` |
| Try to enrich pin details | `includePinDetails` | Open each pin page for extra public metadata. | `false` |
| Locale | `locale` | Browser locale and Accept-Language header. | `en-US` |
| Country note | `country` | Optional country label for the run. | `US` |
| Concurrent searches | `maxConcurrency` | Bound simultaneous keyword searches. | `2` |
| Concurrent details | `detailConcurrency` | Bound simultaneous pin-detail pages. | `3` |
| Attempt timeout | `requestTimeoutSecs` | Maximum time for one search attempt. | `45` |
| Search retries | `maxRequestRetries` | Fresh-context retries per keyword. | `2` |
| Run work budget | `runBudgetSeconds` | Stop new work early enough to save rows and checkpoints before the platform timeout. | `540` |
| Proxy configuration | `proxyConfiguration` | Optional proxy settings. | `{"useApifyProxy":false}` |

### Example input

```json
{
  "queries": ["home decor", "summer outfits"],
  "maxResultsPerQuery": 25,
  "includePinDetails": false,
  "locale": "en-US",
  "country": "US",
  "proxyConfiguration": { "useApifyProxy": false }
}
```

### Example output

```json
{
  "query": "home decor",
  "position": 1,
  "pinId": "123456789012345678",
  "pinUrl": "https://www.pinterest.com/pin/123456789012345678/",
  "title": "Cozy living room decor ideas",
  "description": null,
  "imageUrl": "https://i.pinimg.com/736x/example.jpg",
  "thumbnailUrl": "https://i.pinimg.com/236x/example.jpg",
  "dominantColor": "rgb(195, 184, 170)",
  "creatorName": null,
  "boardName": null,
  "domain": null,
  "outboundUrl": null,
  "fetchedAt": "2026-07-03T12:00:00.000Z"
}
```

### Tips for best results

- **Use buyer or creative phrases**: specific visual keywords produce more actionable pin datasets.
- **Keep detail enrichment optional**: `includePinDetails=true` is slower and may be blocked by login walls.
- **Use multiple related queries**: compare positions and domains across nearby terms.
- **Treat public counts as optional**: Pinterest often hides save/repin counts from anonymous views.
- **Schedule stable keywords**: recurring runs help track changing visual trends.

### Limits and caveats

- The Actor extracts publicly visible Pinterest search data only.
- It does not access private boards, logged-in feeds, saved pins, messages, or account analytics.
- Some creator, board, outbound URL, and count fields may be null when Pinterest hides them.
- Pinterest layouts and anonymous access can vary by region, query, and time.
- Search results are saved after each bounded keyword batch. A late blocked query cannot discard rows already produced by earlier queries.
- The default 540-second work budget leaves time for `RUN_CHECKPOINT` and `RUN_SUMMARY` before the 600-second platform timeout. Increase both limits together only for deliberately larger tasks.
- If the work budget ends after rows exist, the Actor succeeds with warnings and reports pending queries and skipped detail pages. If no row was saved, it fails loudly.

### API usage

Node.js:

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/pinterest-search-scraper').call({
  queries: ['home decor'],
  maxResultsPerQuery: 25,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

Python:

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("fetch_cat/pinterest-search-scraper").call(
    run_input={"queries": ["home decor"], "maxResultsPerQuery": 25}
)
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
```

cURL:

```bash
curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~pinterest-search-scraper/runs?token=YOUR_APIFY_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"queries":["home decor"],"maxResultsPerQuery":25}'
```

### MCP and AI agents

This Actor can be used through the official Apify MCP server at `https://mcp.apify.com`.

For a focused single-Actor tool setup, use:

```text
https://mcp.apify.com?tools=fetch_cat/pinterest-search-scraper
```

Claude Code:

```bash
claude mcp add --transport http apify-pinterest 'https://mcp.apify.com/?tools=fetch_cat/pinterest-search-scraper'
```

JSON MCP configuration:

```json
{
  "mcpServers": {
    "apify-pinterest": {
      "type": "http",
      "url": "https://mcp.apify.com/?tools=fetch_cat/pinterest-search-scraper"
    }
  }
}
```

Use the same JSON keys shown in the input configuration table, such as `queries`, `maxResultsPerQuery`, `includePinDetails`, `runBudgetSeconds`, `locale`, `country`, and `proxyConfiguration`.

Example prompts:

- “Collect 25 public Pinterest pins for home decor.”
- “Compare summer outfit and capsule wardrobe searches without detail enrichment.”
- “Run these searches with detail enrichment and report any pending queries from the checkpoint.”

### FAQ

#### Can this scrape Pinterest pins by keyword?

Yes. Add one or more search terms to `queries`.

#### Does it download images?

No. It exports public image and thumbnail URLs, not image files.

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

Yes. Apify datasets can be downloaded as CSV, JSON, Excel, XML, RSS, HTML, or accessed through the API.

### Related actors

- [Pinterest Profile Scraper](https://apify.com/fetch_cat/pinterest-profile-scraper)
- [TikTok Profile Scraper](https://apify.com/fetch_cat/tiktok-profile-scraper)
- [Instagram Stories & Highlights Scraper](https://apify.com/fetch_cat/instagram-stories-highlights-scraper)
- [YouTube Channel Videos Scraper](https://apify.com/fetch_cat/youtube-channel-videos-scraper)
- [Shopify Products Scraper](https://apify.com/fetch_cat/shopify-products-scraper)
- [Website Contact Finder](https://apify.com/fetch_cat/website-contact-finder)

### Support

If a run fails, returns no data, or a field looks wrong, open an issue from the Actor page.

Please include the Apify run ID or run URL, input JSON, one example public URL, query, or input item, what you expected, and what the dataset returned. Small reproducible inputs make parsing or site-layout issues much faster to fix.

### Privacy and data handling

This Actor runs with Apify limited permissions and only processes data needed for the documented run. It uses the inputs you provide and the public records needed to produce the documented dataset to produce the output dataset and sends requests to public Pinterest Search pages/endpoints; results are stored in Apify run storage for your account. FetchCat does not use your inputs or outputs for advertising, does not use them for model training, and does not retain them outside the Apify run except for transient support debugging when you explicitly share run details. You are responsible for using the Actor lawfully, respecting the target site's terms, and avoiding unnecessary personal or sensitive data in inputs.

# Actor input Schema

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

Keywords to search on Pinterest. Each keyword is scraped separately and returned with its own positions.

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

Optional alias for queries, supported for compatibility with Pinterest search integrations. Values from both fields are combined and deduplicated.

## `maxResultsPerQuery` (type: `integer`):

How many public pins to save for each search keyword.

## `maxResults` (type: `integer`):

Optional API alias for maxResultsPerQuery. When supplied, this explicit alias overrides the UI default.

## `includePinDetails` (type: `boolean`):

Open each pin page and collect public metadata when Pinterest exposes it anonymously. This is slower and may return the same fields if Pinterest shows a login wall.

## `locale` (type: `string`):

Browser locale and Accept-Language header used for the Pinterest session.

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

Country code for research context. When Apify Proxy is enabled and no proxy country is set, this value is also used for proxy routing.

## `maxConcurrency` (type: `integer`):

Number of keyword searches processed in parallel. Keep this low to reduce Pinterest blocking.

## `detailConcurrency` (type: `integer`):

Number of pin detail pages opened in parallel when detail enrichment is enabled.

## `requestTimeoutSecs` (type: `integer`):

Hard time budget for each Pinterest search attempt. Timed-out attempts are retried with a fresh browser context and proxy session when available.

## `maxRequestRetries` (type: `integer`):

Retry count for blocked, empty, timed-out, or failed Pinterest search attempts.

## `runBudgetSeconds` (type: `integer`):

Stop admitting new keyword and detail work early enough to save rows, RUN\_CHECKPOINT, and RUN\_SUMMARY before the platform timeout. The 540-second default is safe for the Actor's 600-second run limit.

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

Optional proxy settings. Datacenter proxies are usually tried first; switch to residential if Pinterest blocks your workload.

## Actor input object example

```json
{
  "queries": [
    "home decor",
    "summer outfits",
    "apify"
  ],
  "maxResultsPerQuery": 10,
  "includePinDetails": false,
  "locale": "en-US",
  "country": "US",
  "maxConcurrency": 2,
  "detailConcurrency": 3,
  "requestTimeoutSecs": 45,
  "maxRequestRetries": 2,
  "runBudgetSeconds": 540,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `runSummary` (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": [
        "home decor",
        "summer outfits",
        "apify"
    ],
    "maxResultsPerQuery": 10,
    "locale": "en-US",
    "country": "US",
    "runBudgetSeconds": 540,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("fetch_cat/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": [
        "home decor",
        "summer outfits",
        "apify",
    ],
    "maxResultsPerQuery": 10,
    "locale": "en-US",
    "country": "US",
    "runBudgetSeconds": 540,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("fetch_cat/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": [
    "home decor",
    "summer outfits",
    "apify"
  ],
  "maxResultsPerQuery": 10,
  "locale": "en-US",
  "country": "US",
  "runBudgetSeconds": 540,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call fetch_cat/pinterest-search-scraper --silent --output-dataset

```

## MCP server setup

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