# Pinterest Trends & Pin Scraper - Keywords, Saves & Boards (`webdata_labs/pinterest-trends-scraper`) Actor

\[💵 $3 / 1K · no start fee] Pinterest keyword research plus full pin, board and profile extraction. Related keywords scored with real engagement, accurate save counts, outbound destination links, full-resolution images and direct video URLs. No login, no API key.

- **URL**: https://apify.com/webdata\_labs/pinterest-trends-scraper.md
- **Developed by:** [WebData Labs](https://apify.com/webdata_labs) (community)
- **Categories:** For creators, Marketing, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Trends & Pin Scraper

**Find the Pinterest keywords that actually get saved, then pull every pin, board and profile behind them - with the destination link and the real save count attached.**

Pinterest keyword research normally means logging into Pinterest Trends, reading a chart, and guessing. And most Pinterest scrapers hand you a wall of image URLs with no engagement numbers and no destination links, which are the two things that tell you whether a pin is worth copying. This Actor does both jobs: it expands a seed keyword into the related keywords Pinterest itself ranks for it, measures the top pins behind every one of them, and returns pins carrying `saveCount`, the `outboundLink` they point at, the full-resolution image and a direct `videoUrl`. No login, no API key, no Pinterest developer account.

### ✅ What you get / ❌ what this isn't

| ✅ What you get | ❌ What this isn't |
|---|---|
| **Keyword research rows** with median and peak saves measured from real pins | Not a trend chart you have to read by eye and retype |
| **`outboundLink`** - the destination URL a pin sends traffic to | Not just an image URL with the money field missing |
| **`saveCount`** from the pin detail endpoint, the accurate aggregated number | Not `repin_count`, which is routinely 1000x smaller and looks like a dead pin |
| **`videoUrl`** as a direct MP4 file | Not an HLS playlist you cannot download |
| **`imageUrl`** at full original resolution | Not the 236px grid thumbnail |
| **Five entry modes** in one Actor - keywords, search, boards, profiles, pins | Not three separate Actors you chain and pay start fees for |
| **Deterministic `dominantColour`**, hashtags and domain rollups | Not a guessed sentiment label dressed up as analysis |
| **No start fee**, pay only for rows you keep | Not a per-run charge on top of the per-result price |

### 🔎 Why use this Actor

- **Keyword expansion with evidence.** For each seed, Pinterest's own ranked related keywords come back with its relevance score, and each one is measured against the top 25 pins actually behind it: `medianSaves`, `maxSaves`, `outboundLinkShare`, `videoShare`. Every number is plain arithmetic over rows you can see, so you can recompute it yourself.
- **The destination link, not just the pin.** `outboundLink` and `sourceDomain` are populated wherever Pinterest exposes them. This is the field affiliate and SEO researchers need and the one most competing Actors leave out or fill inconsistently.
- **The save count that is actually right.** Pin detail is the only endpoint where Pinterest returns the aggregated save total. Search results omit it entirely, so anything reading save counts off search is reporting nulls or the much smaller per-pin repin count. Both `saveCount` and `repinCount` ship, labelled honestly.
- **Video pins are detected properly.** Pinterest sets `is_video: false` on plenty of genuine video pins. This Actor keys off the video payload instead, so `pinType: "video"` does not quietly miss half the video pins.
- **Competitor input JSON just runs.** `queries`, `keywords`, `usernames`, `pinIds`, `startUrls`, `urls`, `limit`, `maxResults` and `type` are all accepted as aliases, so a config copied from another Pinterest Actor's docs does not fail validation on the first run.
- **100% run success across a 30-run sample**, measured 2026-07-31 across all five modes before release. The figure is published because it is checkable, and because a leading Actor in this niche runs at 86%.
- **Nothing to tune.** No proxy, concurrency, retry or delay fields. Session rotation and pacing are handled internally and included in the price.

### 👥 Who it's for

Content marketers, SEO and affiliate researchers, e-commerce merchandisers and social media agencies who need to know what Pinterest audiences save before committing to a content calendar.

- Build a keyword map for a niche and rank it by median saves, not by guesswork.
- Pull the destination domains already winning a keyword, to find affiliate programmes and competitors.
- Collect the top-saved pins for a topic as a creative brief for a designer.
- Track a competitor's boards and profile on a schedule and see what they publish.
- Download the full-resolution images or MP4s behind the best-performing pins in a niche.

### Example tasks

Ready-made configurations, each set up for one job:

- [Pinterest keyword research for SEO and content planning](https://apify.com/webdata_labs/pinterest-trends-scraper/examples/pinterest-keyword-research)
- [Find trending Pinterest keywords in a niche](https://apify.com/webdata_labs/pinterest-trends-scraper/examples/pinterest-trending-keywords-by-niche)
- [Find the destination links behind top Pinterest pins](https://apify.com/webdata_labs/pinterest-trends-scraper/examples/pinterest-affiliate-link-research)
- [Scrape the most saved Pinterest pins for a keyword](https://apify.com/webdata_labs/pinterest-trends-scraper/examples/pinterest-most-saved-pins-by-keyword)
- [Scrape all pins from a Pinterest board](https://apify.com/webdata_labs/pinterest-trends-scraper/examples/pinterest-board-scraper)
- [Scrape a Pinterest profile with its boards and pins](https://apify.com/webdata_labs/pinterest-trends-scraper/examples/pinterest-profile-scraper)
- [Scrape Pinterest video pins with direct MP4 URLs](https://apify.com/webdata_labs/pinterest-trends-scraper/examples/pinterest-video-pin-scraper)
- [Monitor a competitor's new Pinterest pins every week](https://apify.com/webdata_labs/pinterest-trends-scraper/examples/pinterest-competitor-monitoring)

### ⚙️ How to research a Pinterest keyword

1. Open the Actor and put one or more seed topics into `trendKeywords` (for example `home office`).
2. Leave `relatedKeywordDepth` at 1 to measure the seed plus the related keywords Pinterest ranks for it. Set it to 2 to expand the strongest of those one level further.
3. Set `country` to the market you sell into. Pinterest ranks pins and related keywords differently per market, so this changes the results, not just the labels.
4. Set `maxItems` to cap the run. Keyword rows are the expensive ones, because each is measured from 25 real pins.
5. Click **Start**. Results appear in the **Keyword research** view on the Output tab, and export as CSV, JSON or Excel.

To collect the pins themselves instead, use `searchQueries`, `boardUrls`, `profiles` or `pinUrls` and read the **Pins** view.

#### Track a competitor every week

Create a Saved Task with the competitor's profile in `profiles`, then add a schedule on the Actor's **Schedules** tab. Each run returns their profile row, their boards and their newest pins, so you can diff week over week in your own warehouse.

### 📥 Input

```json
{
  "trendKeywords": ["home office"],
  "relatedKeywordDepth": 1,
  "country": "US",
  "maxItems": 25
}
```

Or to collect pins with a destination link and proven engagement:

```json
{
  "searchQueries": ["kitchen organization hacks"],
  "minSaves": 500,
  "onlyWithOutboundLink": true,
  "maxItems": 100
}
```

**Sources** (any one is enough, and they can be mixed in one run):

- `searchQueries` - Pinterest keyword searches. A `pinterest.com/search/pins/?q=...` URL works here too; the keyword is read out of it. Aliases: `queries`, `query`, `keywords`, `search`.
- `trendKeywords` - seed keywords for keyword research. Returns keyword rows rather than pin rows.
- `boardUrls` - full board URLs. Returns the board row, then the board's pins.
- `profiles` - usernames, `@handles` or profile URLs. Returns the profile, its boards, then its pins. Aliases: `usernames`, `users`.
- `pinUrls` - pin URLs or bare numeric pin IDs. Always fetches full detail. Alias: `pinIds`.
- `startUrls` - a mixed bag of pin, board, profile and search URLs, routed by shape automatically. Aliases: `urls`, `url`.

**Filters** (filtered-out pins are never charged):

- `maxItems` - total rows for the whole run. Default `100`, `0` means unlimited, no hard ceiling. Aliases: `maxResults`, `limit`.
- `maxPinsPerSource` - cap pins taken from each individual query, board or profile. Default `0` (no per-source cap).
- `pinType` - `all`, `image` or `video`. Alias: `type`.
- `minSaves` - drop pins saved fewer times than this.
- `onlyWithOutboundLink` - keep only pins that link off Pinterest. The filter for affiliate and SEO work.
- `relatedKeywordDepth` - `1` or `2`. Only used by `trendKeywords`.
- `country` - the market to collect from. Sets both the results and the locale.

**Output shape:**

- `includeBoards` - when scraping a profile, also return one row per board before the pins. Default `true`.

There is no proxy, concurrency, retry or delay setting, by design. See [Limits and caveats](#️-limits-and-caveats).

### 📤 Output

| `pinUrl` | `title` | `saveCount` | `outboundLink` | `sourceDomain` | `dominantColour` |
|---|---|---|---|---|---|
| pinterest.com/pin/53972895529306045/ | 27 Stunning Minimalist Modern Kitchen Ideas | 5752 | uniquedesignblog.com/minimalist-modern-kitchen-ideas/ | uniquedesignblog.com | #afa093 |
| pinterest.com/pin/703756189470269/ | Under-sink organization | 4236 | | | #d8cfc4 |
| pinterest.com/pin/140806231400324/ | Pantry reset | 36048 | | | #c0a78c |

Every row carries a `resultType` of `pin`, `keyword`, `board`, `profile` or `error`, so a mixed run is easy to split.

**Pin rows**

| Field | What it is |
|---|---|
| `pinId`, `pinUrl` | Pinterest's pin identifier and its canonical URL |
| `title`, `description` | Pin title and description, falling back to Pinterest's own alt text |
| `mediaType` | `image` or `video`, detected from the video payload rather than the unreliable `is_video` flag |
| `imageUrl`, `imageWidth`, `imageHeight` | Full original resolution where Pinterest stores one |
| `videoUrl`, `videoDurationMs`, `videoThumbnailUrl` | Direct MP4 file for video pins, not an HLS playlist |
| `outboundLink`, `sourceDomain` | The destination the pin sends traffic to, and its domain |
| `saveCount` | Aggregated saves across every copy of the image. `null` when not measured, never a fake `0` |
| `repinCount` | Repins of this one pin. A different, much smaller number than `saveCount` |
| `commentCount`, `reactionCount`, `triedCount` | Remaining engagement counters |
| `dominantColour` | Pinterest's own dominant colour hex for the image |
| `hashtags` | Explicit hashtags, falling back to hashtags parsed out of the description |
| `createdAt` | Pin creation time, ISO-8601 |
| `pinnerUsername`, `pinnerFullName`, `pinnerFollowers` | Who published the pin |
| `boardName`, `boardUrl` | The board the pin sits on |
| `isPromoted` | Whether Pinterest served the pin as an ad |
| `sourceType`, `sourceInput`, `searchQuery` | Which input produced the row |

**Keyword rows** (from `trendKeywords`)

| Field | What it is |
|---|---|
| `keyword`, `seedKeyword`, `isSeed`, `depth` | The keyword, the seed it expanded from, and how far out |
| `rank`, `relevanceScore` | Pinterest's own ordering and relevance score for the related keyword |
| `pinsAnalysed` | How many pins the numbers below were computed from |
| `medianSaves`, `maxSaves`, `totalSaves` | Save distribution across those pins |
| `pinsWithOutboundLink`, `outboundLinkShare` | How commercial the keyword is |
| `videoPins`, `videoShare` | How much of the keyword is video |
| `topDomains` | The domains already ranking, with a pin count each |
| `topPinUrl`, `searchUrl` | The best-performing pin, and the Pinterest search to eyeball it |

**Board and profile rows**

| Field | What it is |
|---|---|
| `boardId`, `boardName`, `boardUrl`, `pinCount`, `followerCount`, `sectionCount`, `isPrivate`, `ownerUsername`, `ownerFullName` | Board metadata |
| `userId`, `username`, `fullName`, `profileUrl`, `about`, `websiteUrl`, `followerCount`, `followingCount`, `pinCount`, `boardCount`, `isVerified` | Profile metadata |

Four ready-made views are available on the Output tab: **Pins**, **Keyword research**, **Destination links** and **Boards & profiles**.

### 💵 How much does it cost?

`pin-scraped` is **$0.003 per result** on the free tier, dropping to **$0.0012** at GOLD. **There is no start fee**, so a small lookup costs exactly what its rows cost.

| Tier | Price per result | 100 results | 1,000 results |
|---|---|---|---|
| FREE | $0.003 | $0.30 | $3.00 |
| BRONZE | $0.0024 | $0.24 | $2.40 |
| SILVER | $0.0018 | $0.18 | $1.80 |
| GOLD and above | $0.0012 | $0.12 | $1.20 |

You pay per row written to the dataset. Pins removed by `minSaves`, `pinType` or `onlyWithOutboundLink` are never charged, so a strict filter lowers the bill rather than raising it. A keyword research run costs one row per keyword, and a depth-1 seed typically produces 11 keyword rows.

Because there is no start fee, small baskets are where the difference shows: a 10-pin lookup costs $0.03 here against $0.0445 on an Actor charging $0.00345 plus a $0.01 start fee.

### 🔁 Run it on the Apify platform

Schedule the Actor for a recurring keyword or competitor report, call it from the Apify API or any [Apify client](https://docs.apify.com/api/client/js), and export results as JSON, CSV, Excel, XML or RSS. Datasets connect to Make, Zapier, Google Sheets, Airtable and webhooks, so a weekly keyword report can land in a spreadsheet or your warehouse without any glue code.

#### Use with AI agents via MCP

The Actor is exposed over Apify's MCP server, so an agent can call it directly.

**Claude Code**

```bash
claude mcp add apify --transport http https://mcp.apify.com --header "Authorization: Bearer <YOUR_APIFY_TOKEN>"
```

**Cursor or Claude Desktop** - add to your MCP config:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com",
      "headers": { "Authorization": "Bearer <YOUR_APIFY_TOKEN>" }
    }
  }
}
```

Then ask the agent to run `webdata_labs/pinterest-trends-scraper`. Structured parameters exist precisely so an agent can fill `trendKeywords: ["home office"]` without having to construct a Pinterest URL.

#### Use this Actor in n8n

n8n ships an Apify node. Add it, authenticate with your Apify API token, choose **Run Actor**, select `webdata_labs/pinterest-trends-scraper`, and paste the input JSON above. Use **Run Actor and get dataset** to get rows back in the same step, then feed them into Sheets, Notion, Airtable or a database node. Pair it with an n8n Schedule Trigger for a recurring keyword report.

### ⚠️ Limits and caveats

Written so these do not surprise you later.

- **Save counts come from pin detail, not search.** Pinterest returns no engagement stats on search results at all. Setting `minSaves` or `pinType: "video"` therefore makes search runs fetch each pin's detail, which is slower. Board and profile runs already carry save counts and need no extra fetch.
- **`saveCount` can be `null`.** When a payload does not carry stats, the field is `null`, not `0`. A `minSaves` filter drops those rows rather than passing them, because an unmeasured pin is not a proven one.
- **Not every pin has an outbound link.** User-uploaded pins link nowhere; Pinterest labels their domain with the literal text "Uploaded by user", which this Actor emits as `null` rather than as a domain. Use `onlyWithOutboundLink` when you need the link.
- **Pinterest Trends itself is behind a login.** `trends.pinterest.com` serves nothing to a logged-out client, so this Actor does not scrape it and does not report its absolute search-volume index. What it gives instead is Pinterest's own ranked related keywords plus engagement measured from real pins. That is a different measurement, and it is one you can verify from the pin rows.
- **`relevanceScore` is Pinterest's number, not ours.** It ranks how related a keyword is to the seed. It is not a search volume and should not be read as one.
- **No sentiment or AI scoring.** Everything returned is either a field Pinterest published or arithmetic over pins in the same dataset. There is deliberately no sentiment label, because a crude one is a liability rather than a feature.
- **Private and deleted content returns an error row.** A missing board, profile or pin produces a `resultType: "error"` row naming the input and the reason, and the run continues. Error rows are not charged.
- **`pin.it` short links are not accepted.** They contain no pin ID until they redirect. Open one and paste the `pinterest.com/pin/...` URL it lands on.
- **Proxying is handled internally.** There is nothing to configure and nothing to pay for separately. Rotation and pacing are part of how the Actor works, not a knob.

### Is it legal to scrape Pinterest?

This Actor collects only content Pinterest serves publicly to a logged-out browser: public pins, public boards, public profiles and the related keywords Pinterest itself shows on its search pages. It does not log in, does not bypass any access control, and never touches private boards, secret boards, direct messages or personal data behind an account.

Scraping publicly available data is broadly lawful in the EU and the US, and the US Ninth Circuit's decision in *hiQ Labs v. LinkedIn* held that scraping public pages does not violate the Computer Fraud and Abuse Act. That is not the whole story for you, though: what you then do with the data is regulated separately. Copyright stays with the people who made the images and videos, so treat pin media as licensed material and not as free stock. If you handle anything that identifies a person, GDPR and similar laws apply to your use of it. Pinterest's own Terms of Service govern your relationship with Pinterest. None of this is legal advice - if your use case is commercial redistribution rather than research, talk to a lawyer.

### 🧩 Related Actors

Part of a visual marketing and creative research stack. Each one answers a different half of "what should we publish, and what is already working?"

- **[TikTok Hashtag Trends Scraper](https://apify.com/webdata_labs/tiktok-hashtag-trends-scraper)** - the same trend question on TikTok, so you can compare which platform a topic is peaking on before committing a content calendar.
- **[TikTok Creative Center Ad Intelligence](https://apify.com/webdata_labs/tiktok-creative-center-ad-intelligence)** - the paid creative behind a trend, when you want to know what a topic looks like once someone puts budget on it.
- **[Meta Ads Library Scraper](https://apify.com/webdata_labs/meta-ads-library-scraper)** - run the `sourceDomain` values from a keyword report through it to see what those advertisers are running on Facebook and Instagram.
- **[Google Ads Transparency Scraper](https://apify.com/webdata_labs/google-ads-transparency-scraper)** - the same competitors' search and display ads, to confirm whether Pinterest traffic is their main channel or a side bet.
- **[Google Shopping Scraper](https://apify.com/webdata_labs/google-shopping-scraper)** - for product pins, the prices and merchants behind the products people are saving.

### ❓ FAQ

#### Do I need a Pinterest account or API key?

No. The Actor reads the same public endpoints a logged-out browser reads. There is nothing to authenticate and no developer account to apply for.

#### Am I charged for pins that my filters remove?

No. You are charged per row written to the dataset. Pins dropped by `minSaves`, `pinType` or `onlyWithOutboundLink` never reach it. Error rows are not charged either.

#### Why is `saveCount` empty on some rows?

Because Pinterest did not return stats for that pin in that payload. Search results carry no engagement data at all, so a plain search run without `minSaves` returns `null` there by design. Set `minSaves`, or use `pinUrls`, `boardUrls` or `profiles`, to get measured save counts.

#### What is the difference between `saveCount` and `repinCount`?

`saveCount` is Pinterest's aggregated total across every copy of the same image, which is the number Pinterest itself displays. `repinCount` counts only the specific pin you asked for. On one measured pin these were 5,752 and 6. Both ship because they answer different questions: how strong the image is, versus how strong that one posting of it is.

#### Does this scrape Pinterest Trends?

Not the `trends.pinterest.com` product, which requires a login. It returns Pinterest's own ranked related keywords for your seed, plus engagement measured from the top pins behind each one. See [Limits and caveats](#️-limits-and-caveats).

#### How reliable is it?

100% of runs succeeded across a 30-run pre-release sample on 2026-07-31, spread over search, board, profile, pin and keyword modes. Two of those runs were pointed at board URLs that do not exist; they returned a named error row and stayed green rather than failing, which is the intended behaviour. The live figure on the Store card is the one to trust as runs accumulate.

#### Which countries are supported?

`country` accepts United States, United Kingdom, Canada, Australia, Germany, France, Spain, Italy, Netherlands, Portugal, Brazil, Mexico, Poland, Sweden, Japan and India. Each one changes which pins and keywords Pinterest ranks, not just the interface language.

#### Can I download the images and videos?

Yes. `imageUrl` is the full-resolution file and `videoUrl` is a direct MP4. Both are ordinary URLs you can fetch. Copyright in the media belongs to whoever made it, so check before republishing.

#### How do I get only pins that link to a website?

Set `onlyWithOutboundLink` to `true`. Combine it with `minSaves` to get only pins that both drive traffic somewhere and have proven they get saved.

### 🛠️ Support

Something wrong or missing? Open an issue on the Actor's **Issues** tab with the run URL, the input you used and what you expected. That is the fastest route to a fix, and issues drive what gets built next.

### ⭐ Rate this Actor

If this saved you time, please leave a rating on the **Reviews** tab. Review count is the main trust signal a new Actor has, and reviews tell us which parts of the output are worth deepening. If something is broken, please open an issue first so it can be fixed - that helps you faster than a low rating does.

### Changelog

#### 0.1 - 2026-07-31

- First release. Five entry modes: keyword research, search, boards, profiles and individual pins.
- Keyword rows with Pinterest's ranked related keywords plus median, peak and total saves, outbound-link share, video share and domain rollups measured from real pins.
- Pin rows with the outbound destination link, aggregated save count, repin count, full-resolution image, direct MP4 video URL, dominant colour, hashtags and board and pinner context.
- Competitor field-name aliases accepted so existing input JSON runs unchanged.
- Pay per result as `pin-scraped`, no start fee.

# Actor input Schema

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

Pinterest keyword searches. Each query is paged until the per-source cap or the total result cap is reached. Example: "minimalist kitchen". Paste a pinterest.com/search/pins/?q=... URL here and the keyword is read out of it.

## `trendKeywords` (type: `array`):

Seed keywords for keyword research. For each seed the Actor pulls the related keywords Pinterest itself ranks for it, then measures the top pins behind every one of them - median and peak saves, share of pins carrying an outbound link, share of video, and the domains that already rank. Returns keyword rows, not pin rows.

## `boardUrls` (type: `array`):

Full Pinterest board URLs such as https://www.pinterest.com/homedit/kitchen-decor-remodel/. Returns one board row with pin count, follower count and section count, followed by the board's pins.

## `profiles` (type: `array`):

Pinterest usernames or profile URLs - "homedit", "@homedit" and https://www.pinterest.com/homedit/ all work. Returns the profile row, its boards, then the pins the creator published.

## `pinUrls` (type: `array`):

Individual pins as full URLs (https://www.pinterest.com/pin/53972895529306045/) or bare numeric IDs. This mode always fetches the full pin detail, which is the only place Pinterest exposes the accurate aggregated save count. pin.it short links are not supported - open one and paste the URL it lands on.

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

A catch-all for any mix of pin, board, profile and search URLs - each one is routed to the right mode automatically. Use this when you have a list of links and do not want to sort them by type first.

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

Total rows for the whole run, across every source. The default keeps a first run cheap; set 0 for unlimited - there is no hard ceiling.

## `maxPinsPerSource` (type: `integer`):

Cap pins taken from each individual query, board or profile, so one huge board cannot consume the whole run. 0 means no per-source cap.

## `pinType` (type: `string`):

Keep only image pins, only video pins, or everything. Choosing "video" makes search runs fetch full pin detail, because Pinterest omits video URLs from search results.

## `minSaves` (type: `integer`):

Drop pins saved fewer times than this - the simplest way to get only pins that already proved they work. Search runs fetch full pin detail when this is set, because Pinterest omits save counts from search results.

## `onlyWithOutboundLink` (type: `boolean`):

Keep only pins that carry a destination URL to another site, dropping user-uploaded pins that link nowhere. This is the filter for affiliate and SEO research, where a pin without a destination is worthless.

## `relatedKeywordDepth` (type: `integer`):

Only used by keyword research seeds. 1 measures the seed plus the related keywords Pinterest ranks for it. 2 expands the strongest of those one level further, for a much wider keyword map and a proportionally longer run.

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

Which country's Pinterest results to collect. Pinterest ranks pins and related keywords differently per market, so this changes what comes back, not just the labels.

## `includeBoards` (type: `boolean`):

When scraping a profile, also return one row per board the creator owns, before their pins. Turn this off to get pins only.

## Actor input object example

```json
{
  "searchQueries": [
    "kitchen organization hacks",
    "capsule wardrobe autumn"
  ],
  "trendKeywords": [
    "home office",
    "meal prep"
  ],
  "boardUrls": [
    "https://www.pinterest.com/homedit/kitchen-decor-remodel/"
  ],
  "profiles": [
    "homedit",
    "https://www.pinterest.com/thekitchn/"
  ],
  "pinUrls": [
    "https://www.pinterest.com/pin/53972895529306045/"
  ],
  "startUrls": [
    {
      "url": "https://www.pinterest.com/search/pins/?q=scandinavian%20living%20room"
    }
  ],
  "maxItems": 20,
  "maxPinsPerSource": 0,
  "pinType": "all",
  "minSaves": 0,
  "onlyWithOutboundLink": false,
  "relatedKeywordDepth": 1,
  "country": "US",
  "includeBoards": true
}
```

# Actor output Schema

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

No description

## `keywords` (type: `string`):

No description

## `outboundLinks` (type: `string`):

No description

## `boardsAndProfiles` (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 = {
    "searchQueries": [
        "minimalist kitchen"
    ],
    "maxItems": 20,
    "pinType": "all",
    "relatedKeywordDepth": 1,
    "country": "US"
};

// Run the Actor and wait for it to finish
const run = await client.actor("webdata_labs/pinterest-trends-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": ["minimalist kitchen"],
    "maxItems": 20,
    "pinType": "all",
    "relatedKeywordDepth": 1,
    "country": "US",
}

# Run the Actor and wait for it to finish
run = client.actor("webdata_labs/pinterest-trends-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 '{
  "searchQueries": [
    "minimalist kitchen"
  ],
  "maxItems": 20,
  "pinType": "all",
  "relatedKeywordDepth": 1,
  "country": "US"
}' |
apify call webdata_labs/pinterest-trends-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/amSHYz0VYBGo7f7Mp/builds/NLz2d1qhAVbOqtGcF/openapi.json
