# Pinterest Scraper with AI Image Analysis (`wakeful_outhouse/pinterest-ai-scraper`) Actor

Scrape Pinterest search: pins, images, videos, boards, pinners, links and dates. Optional AI image analysis adds description, category, style, colors, objects and tags. Monitor mode returns only new pins.

- **URL**: https://apify.com/wakeful_outhouse/pinterest-ai-scraper.md
- **Developed by:** [Roman](https://apify.com/wakeful_outhouse) (community)
- **Categories:** Social media, AI
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 pins

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

## Pinterest Scraper with AI Image Analysis

**Search Pinterest by keyword and get every pin as a clean row, with an optional AI analysis of each image.** Enter search terms like `boho living room` or `easy pasta recipes` and get title, description, image links, video links, outbound link, board, creator and engagement for each pin. Turn on AI analysis and every image also gets a description, category, style, colors, objects, tags, mood and commercial intent, or a label from your own category list. For marketers, designers, e-commerce teams and trend researchers. No login, no cookies, no browser.

- 📌 **Pin data**: title, description, alt text, Pinterest topics, created date, reactions, promoted flag.
- 🖼️ **Image and video links**: original, 736px and 474px image URLs, size, dominant color, HLS video URL, duration and thumbnail for video pins.
- 🔗 **Outbound link and domain**: see which shops and blogs a niche sends traffic to.
- 👤 **Board and creator**: board name, URL and pin count, creator name, profile URL and followers.
- 🤖 **AI image analysis** (optional): description, category, subcategory, style, colors, objects, search tags, mood, commercial intent, product type and text on the image.
- 🏷️ **Your own categories**: give a list like `kitchen, bathroom, bedroom` and the AI puts every pin into one of them.
- 🔔 **Monitor mode**: name a search, schedule it, and each run returns only pins you have not seen yet. Old pins are not charged.

**Try it in 1 click:** press **Start**. The prefilled input searches `boho living room` and `minimalist kitchen`, 50 pins each. Then replace the terms with your niche and turn on **Analyze images with AI**.

**Price:** $1.50 per 1,000 pins, +$4.00 per 1,000 pins analyzed by AI. Failed AI analyses are not charged. Set a maximum cost per run and it stops cleanly.

Images are returned as links to Pinterest's CDN; the Actor does not copy or re-host them. Independent tool, not affiliated with Pinterest.

### Use cases

- **Trend research**: see which styles, colors and products dominate a niche right now, counted from hundreds of pins.
- **Product and content ideas**: find the pins that link to shops, what they sell and how they present it.
- **Mood boards and swipe files**: export images, titles and tags for a client brief into a spreadsheet.
- **Auto-tagging and catalog building**: let the AI sort pins into your own categories and add search tags.
- **Competitor and domain research**: see which domains get the most pins for your keywords.

### Input

| Field | Description |
|---|---|
| `searchQueries` | One search term per line, as you would type it on Pinterest |
| `searchType` | `pins` (all pins) or `videos` (video pins only) |
| `maxPinsPerQuery` | Limit per search term (0 = as many as Pinterest returns) |
| `analyzeImages` | Run AI image analysis on each pin (adds the `ai…` fields) |
| `customCategories` | Your own category list; the AI picks one for each pin (`other` if none fits) |
| `maxAnalyzedPins` | Maximum number of pins to analyze in a run (0 = all) |
| `monitorName` | Name a search to get only new pins on each run (see Monitoring new pins) |
| `maxConcurrency` | How many search terms run in parallel |
| `proxyConfiguration` | Apify Proxy settings (Residential by default) |

```json
{
  "searchQueries": ["boho living room", "japandi bedroom"],
  "maxPinsPerQuery": 200,
  "analyzeImages": true,
  "customCategories": ["living room", "bedroom", "kitchen", "bathroom"]
}
```

### Output example

```json
{
  "query": "boho living room",
  "position": 1,
  "pinId": "e1_AfqPShzZ89TZyPOkRFC6Ukv9MrdSl01VissCN1eckdXbTIS98Xx_5Q",
  "pinUrl": "https://www.pinterest.com/pin/e1_AfqPShzZ89TZyPOkRFC6Ukv9MrdSl01VissCN1eckdXbTIS98Xx_5Q/",
  "title": "Elegant Boho Living Room Decor",
  "description": "Transform your space with modern boho living room ideas…",
  "altText": "a living room filled with furniture and lots of plants on top of a wooden table",
  "pinterestTopics": ["home decor"],
  "imageUrl": "https://i.pinimg.com/originals/20/a4/86/20a4864b95e01babd3fc6de20fba215a.png",
  "imageUrl736": "https://i.pinimg.com/736x/20/a4/86/20a4864b95e01babd3fc6de20fba215a.jpg",
  "imageWidth": 1024,
  "imageHeight": 1536,
  "dominantColor": "#926335",
  "isVideo": false,
  "link": null,
  "domain": null,
  "createdAt": "2026-10-07T15:07:38Z",
  "reactionCount": 11,
  "boardName": "boho living",
  "boardUrl": "https://www.pinterest.com/HomeLivingusa/boho-living/",
  "pinnerName": "Home Living",
  "pinnerUrl": "https://www.pinterest.com/HomeLivingusa/",
  "pinnerFollowers": 3
}
```

With `analyzeImages: true` each pin also gets the AI fields (real output for a "Boho Living Room" pin, `customCategories`: living room, bedroom, kitchen):

```json
{
  "aiDescription": "A warm, plant-filled boho living room with a light gray sectional sofa dressed in olive green, cream and patterned cushions, a round slatted wooden coffee table on a jute rug, floating wooden shelves with trailing plants, framed botanical prints, and warm candle and pendant lighting.",
  "aiCategory": "Home decor",
  "aiSubcategory": "Living room",
  "aiCustomCategory": "living room",
  "aiStyle": ["boho", "earthy", "cozy", "natural"],
  "aiColors": ["cream", "beige", "light gray", "olive green", "warm brown"],
  "aiObjects": ["light gray sectional sofa", "round slatted wooden coffee table", "jute area rug", "throw pillows", "chunky knit throw blanket", "potted plants", "framed botanical wall art", "floating wooden shelves", "hanging pendant light", "wooden sideboard"],
  "aiTags": ["boho living room", "cozy home decor", "indoor plants", "jute rug", "neutral living room", "earthy interior", "botanical wall art", "floating shelves", "wood coffee table", "warm lighting", "sectional sofa"],
  "aiMood": "warm and cozy",
  "aiCommercialIntent": "low",
  "aiProductType": null,
  "aiTextInImage": null,
  "aiModel": "deepseek-flash"
}
```

If the AI cannot analyze an image, the pin is still saved with `aiError` and the analysis is not charged.

### Monitoring new pins

Track a niche without paying twice for the same pins:

1. Fill in `searchQueries` as usual and set `monitorName`, for example `boho-trends`.
2. Save the input as a Task and add an Apify **Schedule** (daily or weekly).
3. The first run returns all pins it finds. Each later run with the same `monitorName` returns only pins that earlier runs have not returned. Old pins are skipped and **not charged**.

"New" means not returned by earlier runs, not only freshly created pins: Pinterest shows a slightly different set of pins for the same search each time, so the first few runs of a monitor also pick up older pins that were not shown before. In our test the second run, a few minutes after the first, skipped 1,455 known pins and returned 873 new ones.

The list of seen pins is stored in the `pinterest-pins-monitor` key-value store in your account. To start over, use a new `monitorName` or delete its record from that store.

### Pricing

Pay per result:

- **$1.50 per 1,000 pins** (all pin, image, video, board and creator fields).
- **+ $4.00 per 1,000 pins** analyzed by AI, only when `analyzeImages` is on and the analysis succeeded.

Use `maxAnalyzedPins` to analyze only the first pins of a big run, and set a maximum cost per run in the Apify Console.

### Tips

- Pinterest returns about 25 pins per page and stops after a few hundred to a few thousand pins for one term. For more pins, add more specific terms (`boho living room small apartment`, `boho living room green`).
- `position` is the rank of the pin in the Pinterest search results for that term.
- Video URLs are HLS streams (`.m3u8`). Open them in VLC or download them with `ffmpeg`.
- In monitor mode `maxPinsPerQuery` counts all pins checked, new and old.
- Keep Apify Proxy with the **Residential** group, which is the default.

### Integrations, API and MCP

**REST API.** Run the Actor and get the results in one call (replace `YOUR_APIFY_TOKEN`; it's in Console → Settings → API & Integrations):

```bash
curl -X POST "https://api.apify.com/v2/acts/wakeful_outhouse~pinterest-ai-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN" -H "Content-Type: application/json" \
  -d '{"searchQueries": ["boho living room"], "maxPinsPerQuery": 50}'
```

**Python** (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("wakeful_outhouse/pinterest-ai-scraper").call(run_input={"searchQueries": ["boho living room"], "maxPinsPerQuery": 50})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

**AI agents (MCP).** Give Claude, Cursor or any MCP client this Actor as a tool through the Apify MCP server:

- hosted: `https://mcp.apify.com?tools=wakeful_outhouse/pinterest-ai-scraper`
- local: `npx -y @apify/actors-mcp-server --actors wakeful_outhouse/pinterest-ai-scraper` (set `APIFY_TOKEN`)

**No-code.** Use the Apify integrations for **Make, Zapier, n8n, Google Sheets, Slack** and **webhooks**: for example, run a monitor Task every morning and append new pins with their AI tags to a Google Sheet. All formats are available as JSON, CSV, Excel and HTML from the dataset.

### More marketing research tools

Same author, same data format, same pay-per-result pricing:

- [Google Trends Scraper](https://apify.com/wakeful_outhouse/google-trends-scraper) — interest over time, by region, related queries and trending searches, to check if a Pinterest trend is also rising on Google.
- [Facebook Ads Library Scraper](https://apify.com/wakeful_outhouse/facebook-ads-library-scraper) — ad text, headlines, CTAs, landing pages, images and videos from the Meta Ad Library.
- [Google Ads Transparency Scraper](https://apify.com/wakeful_outhouse/google-ads-transparency-scraper) — a competitor's Search, YouTube and Display ads with headlines, CTAs and run dates.
- [TikTok Ads Library Scraper](https://apify.com/wakeful_outhouse/tiktok-ads-library-scraper) — TikTok ad videos, run dates, CTA, landing page and targeting (EU and UK).
- [LinkedIn Ad Library Scraper](https://apify.com/wakeful_outhouse/linkedin-ad-library-scraper) — B2B ad copy, CTAs, landing pages and impressions by country.

All tools: https://apify.com/wakeful_outhouse

### FAQ

**Is it legal?** The Actor collects only what Pinterest shows publicly in search results without login. It does not download or re-host images. Creator names and profiles are public, but they are personal data in some countries, so use them in line with the GDPR and similar laws. You are responsible for how you use the data.

**Which AI model is used?** A vision model, currently DeepSeek Flash through the DeepSeek API; the `aiModel` field shows the exact model for each pin. Only the public image and the pin title and alt text are sent to the model, only to produce the analysis. The Actor does not store or re-host the image.

**Something broke?** Open an issue on the Issues tab with the run link. I usually reply within a day.

**Missing a field or filter?** Open an issue on the Issues tab and tell me what you need. **Did it save you time?** A short rating on the Reviews tab helps other people find this tool.

# Actor input Schema

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

One Pinterest search per line, e.g. <code>boho living room</code> or <code>minimalist kitchen</code>.

## `searchType` (type: `string`):

All pins or only video pins.

## `maxPinsPerQuery` (type: `integer`):

Stop after this many pins for each query. 0 means as many as Pinterest returns (usually several hundred). In monitor mode this counts all pins checked, new and already seen.

## `analyzeImages` (type: `boolean`):

Let AI look at each image and add a description, category, subcategory, style, colors, objects, tags, mood, commercial intent, product type and text in the image. Charged per analyzed pin, only when the analysis succeeds. No API key needed.

## `customCategories` (type: `array`):

Optional. Your own list of categories, e.g. <code>kitchen</code>, <code>bathroom</code>, <code>bedroom</code>. AI puts each pin into one of them (field <code>aiCustomCategory</code>). Works only with AI analysis on.

## `maxAnalyzedPins` (type: `integer`):

Analyze only the first N pins of the run to cap the AI cost. Other pins are saved without AI fields. 0 means all pins.

## `monitorName` (type: `string`):

Turn on monitoring: give this search any name, for example <code>boho-trends</code>. Each run then saves only pins that earlier runs with the same name have not returned, so you pay only for new pins. Use it with an Apify Schedule. The first run returns everything. The list of seen pins is kept in the <code>pinterest-pins-monitor</code> key-value store of your account. Leave empty for a normal run.

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

How many queries run in parallel and how many images AI analyzes at once.

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

Residential proxy is recommended.

## Actor input object example

```json
{
  "searchQueries": [
    "boho living room",
    "minimalist kitchen"
  ],
  "searchType": "pins",
  "maxPinsPerQuery": 50,
  "analyzeImages": false,
  "customCategories": [],
  "maxAnalyzedPins": 0,
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `pins` (type: `string`):

All scraped pins with images, board, pinner, links and optional AI description, category, style and tags

# 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": [
        "boho living room",
        "minimalist kitchen"
    ],
    "maxPinsPerQuery": 50,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("wakeful_outhouse/pinterest-ai-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": [
        "boho living room",
        "minimalist kitchen",
    ],
    "maxPinsPerQuery": 50,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("wakeful_outhouse/pinterest-ai-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 '{
  "searchQueries": [
    "boho living room",
    "minimalist kitchen"
  ],
  "maxPinsPerQuery": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call wakeful_outhouse/pinterest-ai-scraper --silent --output-dataset

```

## MCP server setup

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