# Pinterest Trends & Content Intel - Trends, Top Pins (`seibs.co/pinterest-trends-intel`) Actor

Pinterest trend + content intelligence from logged-out public surfaces: trending keywords with trajectory, top pins per topic (saves/engagement), and board/creator signals. The data the gated Pinterest API hides behind app review + OAuth. For marketers, e-commerce, and content strategists.

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

## Pricing

from $4.00 / 1,000 pin records

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 & Content Intel

> **TL;DR for marketers, e-commerce / DTC, and content strategists:** Pulls Pinterest trend and content intelligence from **logged-out public surfaces** - trending keywords with **interest trajectory + seasonality**, **top pins per topic** (saves / engagement), and **board / creator audience signals** - normalized into one clean schema. The official Pinterest API gates this behind **Trial -> Standard app review plus an OAuth screen-recording** (trial is capped at 1,000 requests/day), so most teams never get the trends/content endpoints. This actor hands you the same shape of data with **no application, no API key, no login**. Public data only, PII-minimized, polite rate limits, fail-soft when blocked. The free Apify plan covers exploration runs on your $5 platform credit.

### Run it in 30 seconds

```python
## Via the Apify Python SDK
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("seibs.co/pinterest-trends-intel").call(run_input={
    "mode": "trend_search",
    "keywords": ["home office decor", "fall outfits"],
    "region": "US"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
````

Or via curl:

```bash
curl -X POST "https://api.apify.com/v2/acts/seibs.co~pinterest-trends-intel/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"mode": "topic_content", "keywords": ["air fryer recipes"], "max_pins_per_query": 25}'
```

Or click "Try for free" on this page if you prefer the no-code UI.

### Why this exists (the gate is the moat)

The Pinterest API is free, but useful access is **approval-gated**: a new app gets **Trial** access (capped at 1,000 requests/day) only after review, and moving to **Standard** access requires a *second* app review that includes a **screen-recording of your OAuth flow** plus Developer-Guidelines compliance. DTC brands, agencies, and independent trend forecasters routinely can't or won't clear that gauntlet - yet Pinterest is one of the highest purchase-intent platforms on the web, so the trend + content data is exactly what they need. This actor reconstructs that data from the public Pinterest surfaces any logged-out visitor can see, with no application required.

### What you get

Each run produces:

- A clean dataset, filterable in the Apify console and downloadable as CSV or JSON
- Views: **overview** (AI-agent / analyst skim), **trends**, **pins**, **creators**
- An `access_notes` record up top documenting which surface each field came from, the anti-bot escalation telemetry, and the responsible-use note
- A sample-output preview at [`.actor/sample-output.json`](./.actor/sample-output.json)

### Modes

| Mode | Input | What it returns |
|---|---|---|
| `trend_search` (default) | `keywords` | One `trend` record per keyword: interest **trajectory** (weekly series when the public Pinterest Trends surface is reachable, else a transparent search proxy), **seasonality** (peak months, seasonal vs evergreen), growth windows (WoW / MoM / YoY), **related terms**, and category - plus the top `pin` records behind each term. |
| `topic_content` | `keywords` | A `topic_rollup` per query (pin count, total/avg saves, top categories, **top creators**, **dominant-color palette**, top link domains) plus the ranked top `pin` records, and optional `creator_signal` records for the top creators. |
| `pin_detail` | `pin_urls` | Deep normalized `pin` records (title, description, saves/reactions/comments, engagement score, dominant color, board, creator, outbound domain). |
| `profile_analysis` | `usernames` | A `creator_signal` per profile: follower / following / pin / board counts, monthly views, and top boards. |

### The normalized schema

Every surface maps onto one vocabulary so you don't write Pinterest-specific parsing:

- **`trend`** - `keyword`, `category`, `trend_type` (`growing` / `declining` / `seasonal` / `evergreen`), `trajectory` (`[{date, value 0-100}]`), `trajectory_source`, `interest_latest/peak/mean`, `growth_wow/mom/yoy`, `seasonality {is_seasonal, coefficient_of_variation, peak_months}`, `related_terms`.
- **`pin`** - `pin_id`, `title`, `description`, `save_count`, `reaction_count`, `comment_count`, `engagement_score` (save-weighted), `dominant_color`, `image_url`, `link_domain`, `board`, `creator`, `category`.
- **`creator_signal`** - `username`, `full_name`, `follower_count`, `following_count`, `pin_count`, `board_count`, `monthly_views`, `top_boards`, `category`.
- **`topic_rollup`** - `pin_count`, `total_saves`, `avg_saves`, `avg_engagement`, `top_categories`, `top_creators`, `dominant_colors`, `top_link_domains`.

### Sources & access notes

All surfaces are **logged-out and public** - the actor never logs in, holds no account, and supplies no user cookies (the only cookie it ever uses is the anonymous `csrftoken` Pinterest itself sets for any visitor, echoed back so the public resource API answers an anonymous browser):

| Surface | How it's fetched |
|---|---|
| **Search** (topic\_content, trend\_search) | The anonymous `BaseSearchResource` JSON API, with a server-rendered `__PWS_DATA__` HTML-blob fallback. |
| **Pin** (pin\_detail) | The pin page's embedded `__PWS_DATA__` JSON blob. |
| **Profile** (profile\_analysis) | The profile page's embedded `__PWS_DATA__` JSON blob. |
| **Trends** (trend\_search) | The public `trends.pinterest.com` tool - best-effort weekly time series. |

**Honest note on what each surface exposes.** The anonymous search grid reliably returns pin id, image, dominant color, outbound link domain, reaction count, creator (username + follower count), board, and category. Pinterest **withholds exact save (repin) counts from the logged-out search API**, so `engagement_score` weights reactions when saves are absent; `pin_detail` (the PinResource endpoint) recovers richer per-pin fields and, like `profile_analysis` (UserResource), works most reliably on the RESIDENTIAL proxy + browser tier the Apify platform provides.

**Honest note on trajectory.** The weekly interest time series is the gated API's prize field. When the public Pinterest Trends surface answers, the `trend` record carries a real `trajectory` with `trajectory_source: "pinterest_trends"`. When it doesn't (the Trends tool is JS-heavy and may not expose a stable anonymous series), the record falls back to `trajectory_source: "search_proxy"` - a transparent interest approximation from search depth + top-pin save velocity - and says so in `_trajectory_note`. The actor never reports a trajectory it didn't actually fetch.

### Anti-bot escalation ladder

Pinterest fingerprints the TLS/JA3 of plain HTTP clients and 403s them from datacenter IPs. On a challenge the client escalates automatically:

1. **httpx** over the DATACENTER proxy (cheapest, first).
2. **curl\_cffi** with real Chrome TLS impersonation over the RESIDENTIAL proxy - defeats JA3/TLS-fingerprint blocks.
3. **patchright / playwright** stealth browser over the RESIDENTIAL proxy - for true JS/Cloudflare challenges. Set `browser_cdp_url` (or the `BROWSER_CDP_URL` env var) to connect a warm anti-detect browser.
4. **Fail-soft** - if every tier is blocked, the run emits a documented `fetch_error` note and still finishes SUCCEEDED.

Per-tier counts are reported in the `access_notes.anti_bot_escalation` block.

### Pricing (pay-per-event)

| Event | Price | When |
|---|---|---|
| `pin_record` | $0.004 | Per normalized pin emitted. |
| `trend_enrichment` | $0.008 | Per trend record (trajectory + seasonality + related terms + category). |
| `board_audience_signal` | $0.010 | Per creator/board signal (profile\_analysis, or top creators in topic\_content). |
| `scheduled_delta_run` | $0.030 | Once per scheduled monitor-mode run. |

A run that returns nothing costs nothing. The actor also ships a 5-layer cost defense (pre-flight input caps, demo-mode soft-fail, a `_RunBudget` guard that aborts cleanly if compute outruns revenue, in-loop budget checks, and hardcoded PPE prices) so a runaway run can't bill you for compute it can't justify.

### Monitor mode

Save this actor as an Apify **Schedule** (or "Save as task") and each scheduled run emits a `monitor_digest` of new/rising trend terms and save/engagement deltas since the last run. Point `monitor_webhook_url` at a Slack-compatible webhook to get the digest pushed. Scheduled runs charge `scheduled_delta_run`.

### MCP / AI-agent use

Use the companion **`mcp-pinterest-trends-intel`** actor for a Model Context Protocol server exposing `search_trends`, `get_top_pins`, `get_pin`, and `analyze_profile` as agent tools (x402 / Skyfire ready). Or wire the dataset directly: the `overview` view and the `datasetItemsMcp` output link return clean, token-efficient JSON for Claude, GPT, LangChain, and LlamaIndex tool calls.

### Legal & responsible use

Logged-out public Pinterest pages only - no login, no accounts, no paywalls. Creator usernames and aggregate follower counts are public profile facts; the actor minimizes PII and never enriches into private/personal contact data. Favorable precedent (e.g. *Meta v. Bright Data*, 2024) holds that logged-off scraping of public data is not barred by platform terms, but you remain responsible for complying with Pinterest's terms and applicable law in your jurisdiction. Intended for trend research, content strategy, and competitive analysis - not bulk content republication. The actor keeps polite rate limits and fails soft when a surface is unavailable.

# Actor input Schema

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

trend\_search = seed keywords -> trend records (interest trajectory + seasonality + related terms + category, plus the top pins behind each term). topic\_content = topic queries -> ranked top pins (saves/engagement) + a per-topic rollup (top creators, category mix, color palette). pin\_detail = pin URLs/ids -> deep normalized pin records. profile\_analysis = usernames -> creator/board audience signals (followers, board/pin counts, monthly views, top boards).

## `keywords` (type: `array`):

Search terms for trend\_search and topic\_content, e.g. \['home office decor', 'fall outfits', 'air fryer recipes']. High purchase-intent terms work best. Hard cap of 30.

## `pin_urls` (type: `array`):

Pin URLs (https://www.pinterest.com/pin/123456789/) or bare numeric pin ids for pin\_detail mode. Hard cap of 50.

## `usernames` (type: `array`):

Pinterest handles or profile URLs for profile\_analysis mode, e.g. \['nordstrom', 'https://www.pinterest.com/thepioneerwoman/']. Public profile facts only. Hard cap of 30.

## `region` (type: `string`):

Two-letter country code for the Pinterest Trends time series (trend\_search), e.g. US, GB, CA, AU, DE. Defaults to US.

## `max_pins_per_query` (type: `integer`):

Hard cap on pins fetched per keyword/topic. Default 25, max 50.

## `include_trajectory` (type: `boolean`):

Attempt the public Pinterest Trends weekly interest time series for each keyword (the gated API's prize field). When the Trends surface is unreachable, the trend record falls back to a transparent search-derived interest proxy (the trajectory\_source field says which). Turn off to skip the trends leg entirely.

## `include_pins` (type: `boolean`):

In trend\_search, also emit the top pins behind each keyword (charged as pin records). Turn off for a trends-only run.

## `top_pins_in_trend` (type: `integer`):

How many top pins to emit per keyword in trend\_search when include\_pins is on. Default 8, max 25.

## `include_creator_signals` (type: `boolean`):

In topic\_content, surface the top creators behind a topic (with follower counts as exposed on the pins) as board\_audience\_signal records. Use profile\_analysis for full board/monthly-view signals.

## `top_creators_per_topic` (type: `integer`):

How many creator signals to emit per topic in topic\_content. Default 8, max 25.

## `monitor_webhook_url` (type: `string`):

When this actor runs under an Apify Schedule (monitor mode), post the change digest (new/rising terms, save deltas) to this Slack-compatible webhook URL.

## `use_apify_proxy` (type: `boolean`):

Route requests through Apify Proxy. The DATACENTER tier handles the first (httpx) pass; a RESIDENTIAL tier is provisioned for the anti-bot escalation legs. Pinterest anti-bot is far easier to clear on residential IPs.

## `use_browser_fallback` (type: `boolean`):

When Pinterest serves a 403/challenge from a datacenter IP, automatically escalate: switch to the RESIDENTIAL proxy and retry with curl\_cffi Chrome TLS impersonation, then (if available) a stealth headless browser. Turn off to use plain httpx only.

## `browser_cdp_url` (type: `string`):

Optional. CDP/WebSocket endpoint of an already-running anti-detect (UC-mode / real Chrome) browser. When set, the browser tier connects to it (inheriting its session + fingerprint) for the stubborn challenges. Without it a patchright stealth Chromium is launched. Can also be set as the BROWSER\_CDP\_URL env var.

## `apify_proxy_groups` (type: `array`):

Override the auto-selected proxy group for the httpx tier. Leave empty to let the actor pick DATACENTER (with RESIDENTIAL provisioned for escalation).

## `concurrency` (type: `integer`):

Parallel Pinterest fetches. Kept polite; default 4, max 8.

## Actor input object example

```json
{
  "mode": "trend_search",
  "keywords": [
    "home office decor",
    "fall outfits"
  ],
  "pin_urls": [],
  "usernames": [],
  "region": "US",
  "max_pins_per_query": 25,
  "include_trajectory": true,
  "include_pins": true,
  "top_pins_in_trend": 8,
  "include_creator_signals": true,
  "top_creators_per_topic": 8,
  "monitor_webhook_url": "",
  "use_apify_proxy": true,
  "use_browser_fallback": true,
  "browser_cdp_url": "",
  "apify_proxy_groups": [],
  "concurrency": 4
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

Narrow, token-efficient slice of every record. Consumer: LLM agents (Claude, GPT, LangChain tools), MCP hosts, marketing dashboards.

## `datasetItemsTrends` (type: `string`):

Trending keywords with trajectory, seasonality, growth windows, and related terms. Consumer: trend forecasters, content calendars, SEO/keyword planning.

## `datasetItemsPins` (type: `string`):

Normalized pins ranked by engagement, with creator/board/category/color. Consumer: content strategy, competitive analysis, creative research.

## `datasetItemsMcp` (type: `string`):

First 50 overview records as a clean JSON array. Wrap on the agent side in an MCP tool-call envelope. Consumer: MCP servers, Claude Desktop, Cursor, OpenAI Assistants tool calls.

## `datasetItemsCsv` (type: `string`):

Spreadsheet-friendly export of the overview view. Consumer: marketers, Excel / Google Sheets users.

# 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 = {
    "mode": "trend_search",
    "keywords": [
        "home office decor",
        "fall outfits"
    ],
    "region": "US",
    "max_pins_per_query": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("seibs.co/pinterest-trends-intel").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 = {
    "mode": "trend_search",
    "keywords": [
        "home office decor",
        "fall outfits",
    ],
    "region": "US",
    "max_pins_per_query": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("seibs.co/pinterest-trends-intel").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 '{
  "mode": "trend_search",
  "keywords": [
    "home office decor",
    "fall outfits"
  ],
  "region": "US",
  "max_pins_per_query": 25
}' |
apify call seibs.co/pinterest-trends-intel --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Pinterest Trends & Content Intel - Trends, Top Pins",
        "description": "Pinterest trend + content intelligence from logged-out public surfaces: trending keywords with trajectory, top pins per topic (saves/engagement), and board/creator signals. The data the gated Pinterest API hides behind app review + OAuth. For marketers, e-commerce, and content strategists.",
        "version": "0.1",
        "x-build-id": "tecC46AUReD0M1wgZ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/seibs.co~pinterest-trends-intel/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-seibs.co-pinterest-trends-intel",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/seibs.co~pinterest-trends-intel/runs": {
            "post": {
                "operationId": "runs-sync-seibs.co-pinterest-trends-intel",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/seibs.co~pinterest-trends-intel/run-sync": {
            "post": {
                "operationId": "run-sync-seibs.co-pinterest-trends-intel",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "trend_search",
                            "topic_content",
                            "pin_detail",
                            "profile_analysis"
                        ],
                        "type": "string",
                        "description": "trend_search = seed keywords -> trend records (interest trajectory + seasonality + related terms + category, plus the top pins behind each term). topic_content = topic queries -> ranked top pins (saves/engagement) + a per-topic rollup (top creators, category mix, color palette). pin_detail = pin URLs/ids -> deep normalized pin records. profile_analysis = usernames -> creator/board audience signals (followers, board/pin counts, monthly views, top boards).",
                        "default": "trend_search"
                    },
                    "keywords": {
                        "title": "Keywords / topics",
                        "maxItems": 30,
                        "type": "array",
                        "description": "Search terms for trend_search and topic_content, e.g. ['home office decor', 'fall outfits', 'air fryer recipes']. High purchase-intent terms work best. Hard cap of 30.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "pin_urls": {
                        "title": "Pin URLs or IDs (pin_detail)",
                        "maxItems": 50,
                        "type": "array",
                        "description": "Pin URLs (https://www.pinterest.com/pin/123456789/) or bare numeric pin ids for pin_detail mode. Hard cap of 50.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "usernames": {
                        "title": "Profile usernames (profile_analysis)",
                        "maxItems": 30,
                        "type": "array",
                        "description": "Pinterest handles or profile URLs for profile_analysis mode, e.g. ['nordstrom', 'https://www.pinterest.com/thepioneerwoman/']. Public profile facts only. Hard cap of 30.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "region": {
                        "title": "Region (trend trajectory)",
                        "type": "string",
                        "description": "Two-letter country code for the Pinterest Trends time series (trend_search), e.g. US, GB, CA, AU, DE. Defaults to US.",
                        "default": "US"
                    },
                    "max_pins_per_query": {
                        "title": "Max pins per query",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Hard cap on pins fetched per keyword/topic. Default 25, max 50.",
                        "default": 25
                    },
                    "include_trajectory": {
                        "title": "Fetch trend trajectory (trend_search)",
                        "type": "boolean",
                        "description": "Attempt the public Pinterest Trends weekly interest time series for each keyword (the gated API's prize field). When the Trends surface is unreachable, the trend record falls back to a transparent search-derived interest proxy (the trajectory_source field says which). Turn off to skip the trends leg entirely.",
                        "default": true
                    },
                    "include_pins": {
                        "title": "Include top pins in trend_search",
                        "type": "boolean",
                        "description": "In trend_search, also emit the top pins behind each keyword (charged as pin records). Turn off for a trends-only run.",
                        "default": true
                    },
                    "top_pins_in_trend": {
                        "title": "Top pins per term (trend_search)",
                        "minimum": 0,
                        "maximum": 25,
                        "type": "integer",
                        "description": "How many top pins to emit per keyword in trend_search when include_pins is on. Default 8, max 25.",
                        "default": 8
                    },
                    "include_creator_signals": {
                        "title": "Include creator signals (topic_content)",
                        "type": "boolean",
                        "description": "In topic_content, surface the top creators behind a topic (with follower counts as exposed on the pins) as board_audience_signal records. Use profile_analysis for full board/monthly-view signals.",
                        "default": true
                    },
                    "top_creators_per_topic": {
                        "title": "Top creators per topic",
                        "minimum": 0,
                        "maximum": 25,
                        "type": "integer",
                        "description": "How many creator signals to emit per topic in topic_content. Default 8, max 25.",
                        "default": 8
                    },
                    "monitor_webhook_url": {
                        "title": "Monitor webhook URL (Slack / email, optional)",
                        "type": "string",
                        "description": "When this actor runs under an Apify Schedule (monitor mode), post the change digest (new/rising terms, save deltas) to this Slack-compatible webhook URL.",
                        "default": ""
                    },
                    "use_apify_proxy": {
                        "title": "Use Apify Proxy",
                        "type": "boolean",
                        "description": "Route requests through Apify Proxy. The DATACENTER tier handles the first (httpx) pass; a RESIDENTIAL tier is provisioned for the anti-bot escalation legs. Pinterest anti-bot is far easier to clear on residential IPs.",
                        "default": true
                    },
                    "use_browser_fallback": {
                        "title": "Anti-bot escalation (curl_cffi + browser)",
                        "type": "boolean",
                        "description": "When Pinterest serves a 403/challenge from a datacenter IP, automatically escalate: switch to the RESIDENTIAL proxy and retry with curl_cffi Chrome TLS impersonation, then (if available) a stealth headless browser. Turn off to use plain httpx only.",
                        "default": true
                    },
                    "browser_cdp_url": {
                        "title": "Warm browser CDP endpoint (optional)",
                        "type": "string",
                        "description": "Optional. CDP/WebSocket endpoint of an already-running anti-detect (UC-mode / real Chrome) browser. When set, the browser tier connects to it (inheriting its session + fingerprint) for the stubborn challenges. Without it a patchright stealth Chromium is launched. Can also be set as the BROWSER_CDP_URL env var.",
                        "default": ""
                    },
                    "apify_proxy_groups": {
                        "title": "Proxy groups (optional override)",
                        "type": "array",
                        "description": "Override the auto-selected proxy group for the httpx tier. Leave empty to let the actor pick DATACENTER (with RESIDENTIAL provisioned for escalation).",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "concurrency": {
                        "title": "Max concurrent requests",
                        "minimum": 1,
                        "maximum": 8,
                        "type": "integer",
                        "description": "Parallel Pinterest fetches. Kept polite; default 4, max 8.",
                        "default": 4
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
