# Pinterest Keywords Discovery Scraper (`scrapeflow/pinterest-keywords-discovery-scraper`) Actor

- **URL**: https://apify.com/scrapeflow/pinterest-keywords-discovery-scraper.md
- **Developed by:** [ScrapeFlow](https://apify.com/scrapeflow) (community)
- **Categories:** Automation, Lead generation, Social media
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.99 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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 Keywords Discovery Scraper

Discover hundreds of long‑tail Pinterest keyword ideas in seconds using Pinterest’s autocomplete API. This Apify actor turns any list of keywords, URLs, or usernames into structured keyword suggestions you can use for SEO, Pinterest marketing, and content planning.

---

#### What this actor does

- **Discovers Pinterest keyword suggestions at scale** using the same autocomplete logic Pinterest shows to users.
- **Accepts bulk inputs**: keywords, Pinterest URLs, or usernames (all treated as keywords internally).
- **Handles blocks automatically** with a **smart proxy fallback** (no proxy → datacenter → residential).
- **Provides clean, structured output** with the original keyword, suggestion type, suggestion text, and proxy mode used.

Use it for:

- **Pinterest SEO & content planning** – find long‑tail topics and keyword variants.
- **PPC and ad research** – discover related search terms users actually type.
- **Market and trend research** – map out query clusters around your main topics.

---

#### Key features

- **Bulk keyword discovery**: Send a long list of keywords / URLs / usernames and get suggestions for each.
- **Autocomplete-based suggestions**: Uses Pinterest autocomplete, so results reflect real user search intent.
- **Smart proxy logic**: Starts with no proxy, only upgrades to datacenter and then residential proxies if Pinterest begins to block requests.
- **Detailed logging**: See how many suggestions were found, which proxy mode was used, and where retries occurred.
- **Structured dataset**: Results are stored in the default dataset, ready for export to CSV, JSON, or Excel.

---

#### Input configuration

The main input fields are:

- **`targets` (required)** – *URLs / Usernames / Keywords (bulk)*  
  - An array of strings.  
  - You can pass:
    - Plain keywords (e.g. `fashion`, `outfit ideas`, `DIY home decor`)
    - Pinterest URLs
    - Pinterest usernames  
  - For this actor, everything is treated as a keyword base for autocomplete.

- **`sort_order` (optional)** – *Sort Order*  
  - Options: `"default"`, `"top"`, `"latest"`  
  - Currently informational for the autocomplete API, but kept for compatibility with other actors.

- **`max_comments` (optional)** – *Max Comments*  
  - Integer between **1** and **5000**.  
  - Kept for compatibility with other actors; not strictly required for autocomplete, but can be used to limit processing scope per keyword.

- **`proxyConfiguration` (optional)** – *Proxy Configuration*  
  - Standard Apify proxy configuration object.  
  - By default, the actor starts **without any proxy** (`useApifyProxy: false`).  
  - If Pinterest blocks requests, the actor will automatically:
    1. Retry with **datacenter proxy**.
    2. If needed, switch to **residential proxy** and stay on residential for the rest of the run.

---

#### Output: dataset fields

The actor stores results in the default dataset under the **“Pinterest Keyword Suggestions”** view. Each item contains:

- **`keyword`** – The original input keyword / URL / username (treated as keyword).
- **`type`** – Suggestion type or category returned by Pinterest autocomplete.
- **`item`** – The actual keyword suggestion text.
- **`proxy_mode`** – Which proxy mode was used to fetch this suggestion (none, datacenter, residential, etc.).

You can export this dataset from Apify in **CSV, JSON, XLSX**, or integrate it directly via the **API**.

---

#### How to use on Apify

1. **Open the actor** in the Apify console (`pinterest-keywords-discovery-scraper`).  
2. In the **Input** tab, fill **`targets`** with your list of seed keywords, URLs, or usernames.  
3. Optionally adjust **`sort_order`**, **`max_comments`**, and **`proxyConfiguration`**.  
4. Click **Start** to run the actor.  
5. When the run finishes, go to the **Dataset** tab to view and export the keyword suggestions.

---

#### Example use cases

- **Niche research for new Pinterest accounts**  
  - Input: `["boho living room", "minimalist bedroom", "small kitchen ideas"]`  
  - Get dozens of autocomplete suggestions for each keyword to plan boards and pins.

- **Blog content planning**  
  - Turn your main topics into Pinterest keyword clusters to support blog posts, idea pins, and static pins.

- **E‑commerce and product research**  
  - Enter product-related keywords (e.g. `gold hoop earrings`, `running shoes women`) and discover how users search for them on Pinterest.

---

#### Notes & support

- Results depend on the current behavior of the **Pinterest autocomplete API** and may change over time.
- To get the best coverage, provide a diverse list of seed keywords and let the actor run to completion.
- 💬 For **custom features**, integration help, or managed scraping solutions, contact: **dev.scraperengine@gmail.com**.

# Actor input Schema

## `targets` (type: `array`):

List of Pinterest-related keywords, URLs, or usernames. For this actor, they are treated as keywords for autocomplete.
## `proxyConfiguration` (type: `object`):

Proxy configuration. By default, the actor starts with NO PROXY. If Pinterest blocks requests, it automatically falls back to datacenter proxy, then residential proxy with retries, and then sticks with residential for the rest of the run.

## Actor input object example

```json
{
  "targets": [
    "fashion",
    "outfit"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
````

# 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 = {
    "targets": [
        "fashion",
        "outfit"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapeflow/pinterest-keywords-discovery-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 = {
    "targets": [
        "fashion",
        "outfit",
    ],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapeflow/pinterest-keywords-discovery-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 '{
  "targets": [
    "fashion",
    "outfit"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call scrapeflow/pinterest-keywords-discovery-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Pinterest Keywords Discovery Scraper",
        "version": "0.1",
        "x-build-id": "ZtUf4b2CwZFs6WDrb"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapeflow~pinterest-keywords-discovery-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapeflow-pinterest-keywords-discovery-scraper",
                "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/scrapeflow~pinterest-keywords-discovery-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapeflow-pinterest-keywords-discovery-scraper",
                "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/scrapeflow~pinterest-keywords-discovery-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapeflow-pinterest-keywords-discovery-scraper",
                "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": [
                    "targets"
                ],
                "properties": {
                    "targets": {
                        "title": "URLs / Usernames / Keywords (bulk)",
                        "type": "array",
                        "description": "List of Pinterest-related keywords, URLs, or usernames. For this actor, they are treated as keywords for autocomplete.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy configuration. By default, the actor starts with NO PROXY. If Pinterest blocks requests, it automatically falls back to datacenter proxy, then residential proxy with retries, and then sticks with residential for the rest of the run."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
