# Pinterest Trends Scraper — Keywords, Growth, History (`talvok/pinterest-trends-scraper`) Actor

Pinterest Trends without login: top, growing and seasonal keywords with weekly, monthly and yearly growth, weekly history of your own keywords, related terms and audience age and gender. 29 countries and regions.

- **URL**: https://apify.com/talvok/pinterest-trends-scraper.md
- **Developed by:** [Talvok Studio](https://apify.com/talvok) (community)
- **Categories:** Social media, Marketing, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 trend results

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 Scraper — Keywords, Growth, History

Get the data of **[Pinterest Trends](https://trends.pinterest.com)** without a Pinterest account: the **top, growing and seasonal keywords** of 29 countries and regions with their **weekly, monthly and yearly growth**, the **weekly history** of any keyword you choose (up to 24 months), **related terms**, the **audience age and gender** and Pinterest's **13-week forecast** for the United States. Results are ready for Excel, Google Sheets or your API.

### What it's for

- **Content planning:** see what people start searching on Pinterest weeks before the peak (Halloween, Christmas, back to school…).
- **E-commerce and Etsy:** check if a product idea is growing or fading, and in which country.
- **SEO and keyword research:** related terms and the yearly curve of each keyword.
- **Marketing and ads:** age and gender of the people searching a keyword.

### Three modes

1. **Trends** — the lists you see on trends.pinterest.com: *Growing*, *Top monthly*, *Top yearly* or *Seasonal* trends, up to 100 per list, with filters by interest, age, gender and words to include or exclude. Optional: weekly history and demographics for each trend.
2. **Keyword history** — your own keywords: weekly history (3, 6, 12 or 24 months), weekly / monthly / yearly change, latest and peak volume. Optional: demographics and forecast.
3. **Related terms** — up to 5 related keywords for each of your keywords (as Pinterest shows them), each with its own history and growth.

### Input

| Field | Modes | What it does |
|---|---|---|
| `mode` | all | `trends`, `history` or `related`. |
| `country` | all | `US`, `CA`, `GB+IE`, `FR`, `DE`, `DE+AT+CH`, `IT`, `ES`, `IT+ES+PT+GR+MT`, `SE+DK+FI+NO`, `NL+BE+LU`, `PL+RO+HU+SK+CZ`, `CY+CZ+GR+HU+MT+PL+RO+SK`, `AU+NZ`, `BR`, `MX`, `AR`, `CO`, `MX+AR+CO+CL`, `CR+DO+EC+GT+PE`, `IN`, `ID`, `MY`, `PH`, `TH`, `KR`, `SA`, `EG`, `TR`. Codes with `+` are the regions of trends.pinterest.com. |
| `trendType` | trends | `growing`, `top_monthly`, `top_yearly` or `seasonal`. |
| `terms` | history, related | Your keywords. Pinterest tracks lowercase search terms: they are lowercased for you. |
| `interests` | trends | Optional, any of: Animals, Architecture, Art, Beauty, Children's Fashion, DIY and Crafts, Design, Education, Electronics, Entertainment, Event Planning, Finance, Food and Drinks, Gardening, Health, Home Decor, Men's Fashion, Parenting, Quotes, Sport, Travel, Vehicles, Wedding, Women's Fashion. |
| `ageGroups` | all | Optional: `18-24`, `25-34`, `35-44`, `45-49`, `50-54`, `55-64`, `65+`. |
| `genders` | all | Optional: `female`, `male`, `unspecified`. |
| `includeKeywords` | trends | Optional: keep only trends containing one of these words. |
| `excludeKeywords` | trends | Optional: drop trends containing any of these words. |
| `maxResults` | all | Maximum keywords saved (default 50). Trends lists stop at 100; related terms are up to 5 per keyword. |
| `historyPeriod` | all | `90`, `180`, `365` (default) or `730` days of weekly history. |
| `includeHistory` | trends | Add the weekly history to each trend (always on in the other modes). |
| `includeDemographics` | all | Add `agePercent` and `genderPercent` to each keyword. |
| `includeForecast` | all | Add the 13-week forecast. United States only, without age or gender filters, latest week only. |
| `endDate` | all | Optional `YYYY-MM-DD`: read an older week (last 12 months). Empty = latest week. Pinterest weeks end on Friday: other days are moved back to the Friday before. |
| `proxyConfiguration` | all | Optional proxy, if Pinterest rate-limits you. |

#### Input examples

```json
{ "mode": "trends", "country": "US", "trendType": "growing", "maxResults": 100, "interests": ["Food and Drinks"] }
```

```json
{ "mode": "history", "country": "GB+IE", "terms": ["autumn nails", "christmas jumper outfit"], "historyPeriod": "730", "includeDemographics": true }
```

### Output

Trends mode:

```json
{
  "mode": "trends",
  "rank": 1,
  "term": "snoopy pumpkin carving",
  "trendType": "seasonal",
  "country": "US",
  "weekEnding": "2026-10-02",
  "normalizedVolume": 3,
  "weeklyChangePercent": 100,
  "monthlyChangePercent": 1500,
  "yearlyChangePercent": 7,
  "seasonalityScore": 0.993,
  "interests": ["Food and Drinks"]
}
```

Keyword history and related terms modes:

```json
{
  "mode": "history",
  "term": "fall nails",
  "country": "US",
  "weekEnding": "2026-10-02",
  "historyDays": 730,
  "weeklyChangePercent": -1,
  "monthlyChangePercent": 200,
  "yearlyChangePercent": 7,
  "latestVolume": 99,
  "peakVolume": 100,
  "peakDate": "2026-09-25",
  "weeklyHistory": [{ "date": "2024-10-04", "volume": 64 }, { "date": "2024-10-11", "volume": 57 }],
  "agePercent": { "18-24": 38, "25-34": 37, "35-44": 16, "45-49": 4, "50-54": 4, "55-64": 4, "65+": 4 },
  "genderPercent": { "male": 4, "female": 91, "unspecified": 8 }
}
```

- `rank`: position in Pinterest's list (in related mode: position among the related terms of `seedTerm`).
- `weeklyHistory`: one entry per week (53 for 12 months, 105 for 24 months; shortened above), dated with the last day of the week.
- `normalizedVolume`, `volume`: relative search volume, 0-100, as Pinterest shows it (not absolute counts). In the weekly history each keyword has its own scale: 100 is its highest week in the period.
- `weeklyChangePercent`, `monthlyChangePercent`, `yearlyChangePercent`: growth in percent (30 = +30%). **10001** means "+10,000% or more" (Pinterest shows "10,000%+"). In history and related modes Pinterest gives the yearly change only with `historyPeriod` = 730.
- `seasonalityScore`: 0-1, how much the keyword comes back at the same time every year (trends mode).
- `interests`: Pinterest interest categories of the trend, filled when you filter by interest.
- `forecast` (with `includeForecast`): `[{ "date", "volume", "low", "high" }]` for the next 13 weeks; history and forecast then share one scale.
- `agePercent`, `genderPercent` (with `includeDemographics`): share of searches in percent, as Pinterest rounds it.

### Pricing

Pay per result: **$0.80 per 1,000 results**, charged only for keywords saved to the dataset; the run stops automatically at the spending limit you set.

### Notes

- Speed: 50 trends in about 6 seconds; 100 keywords of history with demographics in about 15 seconds; 100 related terms in about 50 seconds.
- Only public, aggregated Pinterest Trends data: no login, no personal data.
- A keyword that Pinterest does not track returns no data: the log says so and suggests similar keywords that do have data.
- Requests go one at a time with pauses. If Pinterest answers "too many requests" (HTTP 429) the scraper waits and retries for about 2 minutes; if the refusal continues, the run stops with a clear message instead of trying to bypass it: try again later or enable a proxy.
- Data is weekly and follows trends.pinterest.com: by default you get the same latest week that the website shows.

# Actor input Schema

## `mode` (type: `string`):

Trends: the trending keywords that Pinterest lists for a country. Keyword history: the weekly history and growth of your own keywords. Related terms: up to 5 related keywords for each of your keywords, each with its own history and growth.

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

Country or region of the Pinterest users. Regions are the groups shown on trends.pinterest.com, e.g. "GB+IE" for Great Britain & Ireland.

## `trendType` (type: `string`):

Which Pinterest list to read in Trends mode. Growing: fastest-growing keywords. Top monthly / Top yearly: most searched keywords of the last month / year. Seasonal: keywords that come back every year at this time.

## `terms` (type: `array`):

Your keywords, e.g. "fall nails", "halloween costume ideas". Pinterest tracks lowercase search terms: the scraper lowercases them for you. A keyword Pinterest does not track returns no data, and the log suggests similar keywords that do have data. Ignored in Trends mode.

## `interests` (type: `array`):

Optional. Only trends from these Pinterest interest categories. Leave empty for all interests.

## `ageGroups` (type: `array`):

Optional. Only searches made by people of these ages. Works in all modes. Leave empty for all ages.

## `genders` (type: `array`):

Optional. Only searches made by people of these genders. Works in all modes. Leave empty for all genders.

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

Optional. Keep only trends that contain at least one of these words, e.g. "nails".

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

Optional. Drop trends that contain any of these words.

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

Maximum number of keywords to save. In Trends mode Pinterest returns at most 100 trends per list. In Related mode Pinterest gives up to 5 related terms per keyword.

## `historyPeriod` (type: `string`):

Length of the weekly history. Pinterest computes the yearly change only with 24 months of history; with shorter periods yearlyChangePercent is empty in history and related modes.

## `includeHistory` (type: `boolean`):

Trends mode: also add the weekly history of each trend (one extra request per 20 trends). History and related modes always include it.

## `includeDemographics` (type: `boolean`):

Add the share of searches by age group and gender for each keyword (one extra request per 20 keywords).

## `includeForecast` (type: `boolean`):

Add Pinterest's forecast for the next 13 weeks, with lower and upper bounds, to the weekly history. Available only for the United States, without age or gender filters, for the latest week. With the forecast on, history and forecast share one 0-100 scale.

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

Optional, format YYYY-MM-DD. Leave empty for the latest week available (recommended). Pinterest uses weeks that end on a Friday: another day is moved back to the Friday before. Pinterest keeps the last 12 months.

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

Optional. Use a proxy if Pinterest starts rate-limiting requests (HTTP 429).

## Actor input object example

```json
{
  "mode": "trends",
  "country": "US",
  "trendType": "growing",
  "terms": [
    "fall nails",
    "halloween costume ideas"
  ],
  "maxResults": 50,
  "historyPeriod": "365",
  "includeHistory": false,
  "includeDemographics": false,
  "includeForecast": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All keywords saved by the run, 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 = {
    "terms": [
        "fall nails",
        "halloween costume ideas"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("talvok/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 = { "terms": [
        "fall nails",
        "halloween costume ideas",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("talvok/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 '{
  "terms": [
    "fall nails",
    "halloween costume ideas"
  ]
}' |
apify call talvok/pinterest-trends-scraper --silent --output-dataset

```

## MCP server setup

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