# Pinterest Trends Scraper (`maximedupre/pinterest-trends-scraper`) Actor

Find Pinterest trend terms and related searches for selected markets. Compare relative interest, growth momentum, seasonality, weekly history, and audience context when Pinterest publishes them.

- **URL**: https://apify.com/maximedupre/pinterest-trends-scraper.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** SEO tools, Marketing, Social media
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 trend terms

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

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

## What's an Apify Actor?

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

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

## How to integrate an Actor?

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

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

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

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

# README

### 📈 Pinterest trends for content research

Content planners, SEO researchers, ecommerce teams, and agencies can use Pinterest Trends Scraper to find ranked Pinterest trend terms and related searches for selected markets. It returns relative search interest, relative volume, growth momentum, seasonality, weekly history, audience context, and Pinterest source links so you can compare demand signals before planning content, products, or SEO work.

- Export structured **[Pinterest Trend Data](https://apify.com/maximedupre/pinterest-trends-scraper/examples/pinterest-trend-data)** for a selected market before building a content or product plan.
- Compare **[Pinterest Seasonal Trends](https://apify.com/maximedupre/pinterest-trends-scraper/examples/pinterest-seasonal-trends)** when planning around seasonal search interest.
- Expand a seed phrase into **[Pinterest Related Keywords](https://apify.com/maximedupre/pinterest-trends-scraper/examples/pinterest-related-keywords)** for new topic ideas.
- Review **[Pinterest Search Trends](https://apify.com/maximedupre/pinterest-trends-scraper/examples/pinterest-search-trends)** to compare relative demand in a market.
- Find rising terms with **[Pinterest Trending Keywords](https://apify.com/maximedupre/pinterest-trends-scraper/examples/pinterest-trending-keywords)** for a content brief.

#### 📊 Ranked Pinterest terms and related searches

Published trend-list runs return rows for Pinterest trend terms. Seed-keyword runs return related search terms and keep the `originatingTerm` that led to each suggestion. Each row includes its market and the date or period described by Pinterest.

The data uses relative signals, not absolute search counts. Pinterest may omit a metric when it does not publish one. Growth objects include `isCapped` so a published ceiling is not mistaken for an exact value. Source links point back to Pinterest search or Trends context when available.

#### ▶️ Run one focused Pinterest research job

Use one run for one coherent trend-research job. Choose published trend lists or seed keywords, then set one or more Pinterest markets. Fields for the other discovery method are ignored. Pinterest source availability can differ by market and date, so a market may return fewer or no rows.

1. Choose `Published trend lists` to read growing, seasonal, top-monthly, or top-yearly terms.
2. Choose `Seed keywords` to find related Pinterest search terms from one or more starting phrases.
3. Set `markets` and any date, ranking, category, event, or keyword filters.
4. Set `maxItems` when you want a run-wide cap, then open the default dataset.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `discoveryMethod` | string | Required. Choose `publishedTrendLists` for Pinterest trend lists or `seedKeywords` for related search terms. |
| `trendView` | string | Used with `publishedTrendLists`. Choose `growing`, `seasonal`, `topMonthly`, or `topYearly`. |
| `seedKeywords` | array of strings | Used with `seedKeywords`. Adds one or more starting keywords for related Pinterest search terms. |
| `markets` | array of strings | Required. Adds one or more Pinterest market codes, such as `US` or `GB`. |
| `endDate` | string in `YYYY-MM-DD` format | Sets the report's last date. Leave blank to use the available source date. |
| `lookbackDays` | integer, minimum 1 | Sets how many days of trend history to use. Leave blank to use the available history. |
| `includeKeywords` | array of strings | Keeps returned terms that match at least one of these keywords. This filters results and does not set seed keywords. |
| `excludeKeywords` | array of strings | Removes returned terms that match any of these keywords. Leave blank to remove none. |
| `interestCategories` | array of strings | Filters results by Pinterest interest category names shown by Pinterest. |
| `seasonalEvents` | array of strings | Filters results by seasonal event names shown by Pinterest. |
| `minimumGrowth` | number, minimum 0 | Keeps terms with at least this growth percentage when Pinterest publishes one. Leave blank to keep all terms. |
| `rankingBasis` | string | Orders returned terms by `weeklyGrowth`, `monthlyGrowth`, `yearlyGrowth`, or `relativeSearchInterest`. Pinterest may not publish every signal for every term. |
| `maxItems` | integer, minimum 1 | Stops after this many ranked terms across the run. Leave blank to return all available results until the source is exhausted. The schema has no fixed upper bound. |

**Default input example**

This is the public input from a successful current beta default-input run.

```json
{
  "discoveryMethod": "publishedTrendLists",
  "trendView": "growing",
  "markets": [
    "US"
  ],
  "lookbackDays": 30,
  "maxItems": 100
}
```

#### 🧾 Output

**Run output**

| Field | Type | What it does |
| --- | --- | --- |
| `dataset` | URL string | Opens the default dataset with the saved Pinterest trend and related-search rows. |

**Trend row**

This shape is used when `termType` is `trend`. Optional fields are omitted when Pinterest does not publish the value.

| Field | Type | What it does |
| --- | --- | --- |
| `term` | string | Pinterest trend search term. |
| `termType` | string | Identifies this row as `trend`. |
| `market` | string | Pinterest market code for the row. |
| `sourceDate` | string | Date or period that Pinterest gives for the row. |
| `relativeSearchInterest` | number, optional | Pinterest's relative search-interest value when published. |
| `relativeVolume` | number, optional | Pinterest's relative search-volume value when published. |
| `momentum` | object, optional | Published growth signals for the term. A period is omitted when Pinterest does not publish it. |
| `momentum.weekly` | object, optional | Weekly growth signal. |
| `momentum.weekly.value` | number | Weekly growth percentage published by Pinterest. |
| `momentum.weekly.isCapped` | boolean | Says whether Pinterest marks the weekly value as reaching its published ceiling. |
| `momentum.monthly` | object, optional | Monthly growth signal. |
| `momentum.monthly.value` | number | Monthly growth percentage published by Pinterest. |
| `momentum.monthly.isCapped` | boolean | Says whether Pinterest marks the monthly value as reaching its published ceiling. |
| `momentum.yearly` | object, optional | Yearly growth signal. |
| `momentum.yearly.value` | number | Yearly growth percentage published by Pinterest. |
| `momentum.yearly.isCapped` | boolean | Says whether Pinterest marks the yearly value as reaching its published ceiling. |
| `seasonalitySignal` | string, optional | Pinterest's published seasonality signal for the term. |
| `weeklySearchHistory` | array of objects, optional | Available weekly search-interest observations for the term. |
| `weeklySearchHistory[].week` | string | Week or week-start date described by Pinterest. |
| `weeklySearchHistory[].relativeSearchInterest` | number | Pinterest's relative search-interest value for that week. |
| `audienceDemographics` | object, optional | Pinterest's aggregate audience distributions for the term. |
| `audienceDemographics.age` | array of objects | Audience shares grouped by age range. |
| `audienceDemographics.age[].range` | string | Age range reported by Pinterest. |
| `audienceDemographics.age[].percentage` | number | Aggregate audience share for the age range. |
| `audienceDemographics.gender` | array of objects | Audience shares grouped by gender label. |
| `audienceDemographics.gender[].label` | string | Gender label reported by Pinterest. |
| `audienceDemographics.gender[].percentage` | number | Aggregate audience share for the gender label. |
| `interestCategories` | array of strings, optional | Pinterest interest categories associated with the row and used for filtering. |
| `seasonalEvents` | array of strings, optional | Pinterest seasonal events associated with the row and used for filtering. |
| `sourceLinks` | object, optional | Pinterest search or Trends context links for the row. |
| `sourceLinks.search` | URL string | Direct Pinterest search link for the term. |
| `sourceLinks.trends` | URL string | Direct Pinterest Trends link for the term. |

**Trend row example**

This complete row comes from a successful current beta top-monthly run.

```json
{
  "term": "fall nails",
  "termType": "trend",
  "market": "US",
  "sourceDate": "2026-09-14",
  "sourceLinks": {
    "search": "https://www.pinterest.com/search/pins/?q=fall+nails",
    "trends": "https://trends.pinterest.com/top_trends_filtered/?lookbackWindow=30D&endDate=2026-09-14&rankingMethod=1&country=US&trendsPreset=1&numTermsToReturn=5"
  },
  "relativeSearchInterest": 100,
  "relativeVolume": 100,
  "momentum": {
    "weekly": {
      "value": 0.2,
      "isCapped": false
    },
    "monthly": {
      "value": 6,
      "isCapped": false
    },
    "yearly": {
      "value": 0.06,
      "isCapped": false
    }
  },
  "seasonalitySignal": "0.99543524",
  "weeklySearchHistory": [
    {
      "week": "2026-08-17",
      "relativeSearchInterest": 21
    },
    {
      "week": "2026-08-24",
      "relativeSearchInterest": 33
    },
    {
      "week": "2026-08-31",
      "relativeSearchInterest": 60
    },
    {
      "week": "2026-09-07",
      "relativeSearchInterest": 86
    },
    {
      "week": "2026-09-14",
      "relativeSearchInterest": 100
    }
  ],
  "audienceDemographics": {
    "age": [
      {
        "range": "18-24",
        "percentage": 39
      },
      {
        "range": "25-34",
        "percentage": 37
      },
      {
        "range": "35-44",
        "percentage": 15
      },
      {
        "range": "45-49",
        "percentage": 4
      },
      {
        "range": "50-54",
        "percentage": 4
      },
      {
        "range": "55-64",
        "percentage": 4
      },
      {
        "range": "65+",
        "percentage": 4
      }
    ],
    "gender": [
      {
        "label": "male",
        "percentage": 4
      },
      {
        "label": "female",
        "percentage": 92
      },
      {
        "label": "unspecified",
        "percentage": 7.000000000000001
      }
    ]
  }
}
```

**Related search term row**

This shape is used when `termType` is `relatedSearchTerm`. It keeps the seed or primary term in `originatingTerm`. Pinterest can publish additional context fields for a related term, and optional fields are omitted when unavailable.

| Field | Type | What it does |
| --- | --- | --- |
| `term` | string | Pinterest related search term. |
| `termType` | string | Identifies this row as `relatedSearchTerm`. |
| `market` | string | Pinterest market code for the row. |
| `sourceDate` | string | Date or period that Pinterest gives for the row. |
| `originatingTerm` | string | Primary term that led Pinterest to return this related search term. |
| `relativeSearchInterest` | number, optional | Pinterest's relative search-interest value when published. |
| `relativeVolume` | number, optional | Pinterest's relative search-volume value when published. |
| `momentum` | object, optional | Published growth signals for the term. A period is omitted when Pinterest does not publish it. |
| `momentum.weekly` | object, optional | Weekly growth signal. |
| `momentum.weekly.value` | number | Weekly growth percentage published by Pinterest. |
| `momentum.weekly.isCapped` | boolean | Says whether Pinterest marks the weekly value as reaching its published ceiling. |
| `momentum.monthly` | object, optional | Monthly growth signal. |
| `momentum.monthly.value` | number | Monthly growth percentage published by Pinterest. |
| `momentum.monthly.isCapped` | boolean | Says whether Pinterest marks the monthly value as reaching its published ceiling. |
| `momentum.yearly` | object, optional | Yearly growth signal. |
| `momentum.yearly.value` | number | Yearly growth percentage published by Pinterest. |
| `momentum.yearly.isCapped` | boolean | Says whether Pinterest marks the yearly value as reaching its published ceiling. |
| `seasonalitySignal` | string, optional | Pinterest's published seasonality signal for the term. |
| `weeklySearchHistory` | array of objects, optional | Available weekly search-interest observations for the term. |
| `weeklySearchHistory[].week` | string | Week or week-start date described by Pinterest. |
| `weeklySearchHistory[].relativeSearchInterest` | number | Pinterest's relative search-interest value for that week. |
| `audienceDemographics` | object, optional | Pinterest's aggregate audience distributions for the term. |
| `audienceDemographics.age` | array of objects | Audience shares grouped by age range. |
| `audienceDemographics.age[].range` | string | Age range reported by Pinterest. |
| `audienceDemographics.age[].percentage` | number | Aggregate audience share for the age range. |
| `audienceDemographics.gender` | array of objects | Audience shares grouped by gender label. |
| `audienceDemographics.gender[].label` | string | Gender label reported by Pinterest. |
| `audienceDemographics.gender[].percentage` | number | Aggregate audience share for the gender label. |
| `interestCategories` | array of strings, optional | Pinterest interest categories associated with the row and used for filtering. |
| `seasonalEvents` | array of strings, optional | Pinterest seasonal events associated with the row and used for filtering. |
| `sourceLinks` | object, optional | Pinterest search or Trends context links for the row. |
| `sourceLinks.search` | URL string | Direct Pinterest search link for the term. |
| `sourceLinks.trends` | URL string | Direct Pinterest Trends link for the originating term and request. |

**Related search term row example**

This complete row comes from a successful current beta seed-keyword run.

```json
{
  "term": "bathroom decor",
  "termType": "relatedSearchTerm",
  "market": "US",
  "sourceDate": "2026-09-14",
  "originatingTerm": "home decor ideas",
  "relativeSearchInterest": 100,
  "sourceLinks": {
    "search": "https://www.pinterest.com/search/pins/?q=bathroom+decor",
    "trends": "https://trends.pinterest.com/related_terms/?requestTerm=home+decor+ideas&country=US&endDate=2026-09-14&aggregation=2&lookback=90D&shouldMock=false&predictedDays=0"
  }
}
```

#### 💳 Pricing

This Actor uses pay-per-event pricing. The primary event is `ranked-pinterest-trend-term`, shown to buyers as **Trend term**, and it applies to each ranked trend term saved to the dataset. The price depends on your Apify plan tier. Set `maxItems` to cap the number of possible saved-term events.

#### 🔌 Integrations

**Dataset and API**

Open the `dataset` link from the run output, export the saved rows from Apify, or read them through the Apify API.

**Video guide**

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### What is the difference between published trend lists and seed keywords?

Published trend lists return Pinterest terms from the selected growing, seasonal, top-monthly, or top-yearly view. Seed keywords return related search terms and keep the originating term in each row.

##### Does relative search interest mean absolute search volume?

No. The values are relative Pinterest signals. They are not absolute search counts or a guaranteed real-time feed.

##### What happens when Pinterest does not publish a metric?

The field is omitted when the source does not publish that metric. The Actor does not turn an unavailable value into zero.

##### What does a capped growth value mean?

When `isCapped` is `true`, Pinterest marks that growth value as reaching its published ceiling. Treat it as a capped signal, not an exact value.

##### Can I choose more than one market?

Yes. Add one or more market codes to the same coherent research run. Pinterest can group markets or have gaps for a market, so a selected market may return fewer or no rows.

##### Can one run contain separate research jobs?

No. One run represents one trend-research job. Fields for the discovery method you did not choose are ignored.

##### What does leaving Maximum results empty do?

It returns all available results until the source is exhausted. `maxItems` has no fixed upper bound in the schema.

##### Does this Actor scrape pins, boards, or profiles?

No. It returns Pinterest trend terms and related search terms with the published context described above. It does not collect pin-, board-, profile-, creator-, image-, or engagement-level data.

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

No. The input does not ask for a Pinterest login, API key, or other source credential.

### 📝 Changelog

**v0.0** (18-09-2026)

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~pinterest-trends-scraper/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Pinterest Keyword Autocomplete Scraper](https://apify.com/maximedupre/pinterest-keyword-scraper) - Expand seed phrases into autocomplete suggestions before choosing trend terms.
- [Pinterest Ads Scraper](https://apify.com/maximedupre/pinterest-ads) - Review public Pinterest ad creative and audience details after trend research.
- [Pinterest Trends Scraper for Keyword & Product Research](https://apify.com/automation-lab/pinterest-trends-scraper) - Compare Pinterest trend keywords, growth signals, and market data for content and product research.
- [Pinterest Trends Scraper — Rising Search Terms](https://apify.com/apt_marble/pinterest-trends-scraper) - Check rising search terms and compare their published change signals.
- [Pinterest Trends](https://apify.com/data_ops_main/pinterest-trends-scraper) - Use another focused Pinterest trend lookup when you need a separate comparison.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `discoveryMethod` (type: `string`):

Choose published Pinterest trend lists or find related search terms from seed keywords.

## `trendView` (type: `string`):

Choose which published Pinterest trend list to read. Used when Find trends by is Published trend lists.

## `seedKeywords` (type: `array`):

Add one or more starting keywords for related Pinterest search terms. Used when Find trends by is Seed keywords.

## `markets` (type: `array`):

Add one or more Pinterest market codes, such as US or GB. Use a separate run for a different research job.

## `endDate` (type: `string`):

Set the report's last date in YYYY-MM-DD format. Leave blank to use the available source date.

## `lookbackDays` (type: `integer`):

Set how many days of trend history to use. Leave blank to use the available history.

## `includeKeywords` (type: `array`):

Keep returned terms that match at least one of these keywords. This filters results and does not set seed keywords.

## `excludeKeywords` (type: `array`):

Remove returned terms that match any of these keywords. Leave blank to remove none.

## `interestCategories` (type: `array`):

Filter results by one or more Pinterest interest categories. Use names shown by Pinterest.

## `seasonalEvents` (type: `array`):

Filter results by one or more seasonal events. Use names shown by Pinterest.

## `minimumGrowth` (type: `number`):

Keep terms with at least this growth percentage when Pinterest publishes one. Leave blank to keep all terms.

## `rankingBasis` (type: `string`):

Choose the signal used to order returned terms. Pinterest may not publish every signal for every term.

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

Stop after this many ranked terms across the run. Leave blank to return all available results until the source is exhausted.

## Actor input object example

```json
{
  "discoveryMethod": "publishedTrendLists",
  "trendView": "growing",
  "markets": [
    "US"
  ],
  "lookbackDays": 30,
  "maxItems": 100
}
```

# Actor output Schema

## `dataset` (type: `string`):

Open the Pinterest trend terms and related searches in the default dataset.

# 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 = {
    "discoveryMethod": "publishedTrendLists",
    "trendView": "growing",
    "markets": [
        "US"
    ],
    "lookbackDays": 30,
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/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 = {
    "discoveryMethod": "publishedTrendLists",
    "trendView": "growing",
    "markets": ["US"],
    "lookbackDays": 30,
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/pinterest-trends-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 '{
  "discoveryMethod": "publishedTrendLists",
  "trendView": "growing",
  "markets": [
    "US"
  ],
  "lookbackDays": 30,
  "maxItems": 100
}' |
apify call maximedupre/pinterest-trends-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/pinterest-trends-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/lO6p21cnDvC3AeyJL/builds/8lbvqyKVH5QFY6ZJ1/openapi.json
