# Pinterest Profile Scraper (`khadinakbar/pinterest-profile-scraper`) Actor

Scrape public Pinterest profiles — followers, pins, boards, bio, website, verification + recent pins. HTTP-only, no login.

- **URL**: https://apify.com/khadinakbar/pinterest-profile-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Social media, Lead generation, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 profile scrapeds

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 Profile Scraper

Scrape any public **Pinterest profile** by username or URL and get clean, structured JSON — follower/following counts, pin & board totals, bio, website + domain verification, profile & cover images, verification status, join date, **parsed email/phone**, the profile's **boards**, and up to **25 recent pins**. HTTP-only, no login, no cookies, MCP-ready.

### What it does

Give it one or many Pinterest usernames (or profile URLs) and it returns **one record per profile** with everything Pinterest exposes publicly — pulled straight from the page's server-rendered data in a single request per profile. Fast, reliable, and built for both humans (CSV/Excel export) and AI agents (structured JSON via MCP).

### When to use it

- **Creator & influencer research** — size a Pinterest creator's audience before outreach.
- **Competitor benchmarking** — track rivals' follower growth, pin/board output, and verification.
- **Lead generation** — pull bios, websites, and any email/phone creators publish.
- **Market research** — build datasets of profiles in a niche (food, fashion, home, DIY).

### When NOT to use it

- To scrape pins by **keyword/search** or all pins from a **board URL** → use a dedicated Pinterest pin/board scraper.
- To scrape **private** profiles → only public data is available (no login).

### Output — one record per profile

| Field | Description |
|---|---|
| `username`, `fullName`, `firstName`, `userId` | Identity |
| `profileUrl` | Canonical profile URL |
| `about`, `seoDescription` | Bio text |
| `followerCount`, `followingCount` | Audience |
| `pinCount`, `boardCount`, `interestFollowingCount` | Activity totals |
| `websiteUrl`, `domainUrl`, `domainVerified` | Linked site + verification |
| `isVerifiedIdentity`, `isVerifiedMerchant`, `isPartner`, `accountType` | Account status |
| `isPrivateProfile` | Privacy flag |
| `email`, `phone` | Parsed from bio/website (when present) |
| `instagramUrl` | Linked Instagram (when present) |
| `profileImageUrl`, `profileImageSmallUrl`, `coverImageUrl` | Images |
| `joinedAt` (ISO 8601), `joinedAtRaw` | Join date |
| `boards[]` | Profile's boards (first page): `name`, `url`, `pinCount`, `followerCount`, `privacy`, `description`, `coverImageUrl` |
| `recentPins[]` | Up to 25 recent pins: `title`, `url`, `imageUrl`, `destinationLink`, `isVideo`, `dominantColor`, `createdAt` |
| `boardsReturned`, `recentPinsReturned` | Counts |
| `scrapedAt` (ISO 8601), `error` | Run metadata |

### Pricing — Pay Per Event

| Event | Price |
|---|---|
| Actor start | $0.00005 per run |
| **Profile scraped** | **$0.004 per profile** |

You pay only for profiles successfully scraped. Not-found/blocked profiles are returned with an `error` field and are **not** charged the profile fee. The `maxItems` input hard-caps how many profiles (and dollars) a run can spend. Pay-Per-Usage (compute + proxy) is also available — pick at run time.

### Input

```json
{
  "usernames": ["marthastewart", "https://www.pinterest.com/nike/"],
  "maxItems": 100,
  "includeBoards": true,
  "includePins": true,
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US" }
}
````

- `usernames` — array of usernames, @handles, or profile URLs (mixed is fine).
- `username` — optional single profile (merged with the list).
- `maxItems` — budget cap (default 100).
- `includeBoards` / `includePins` — toggle the boards and recent-pins arrays (default both on; price unchanged).
- `proxyConfiguration` — defaults to Apify Residential US (recommended; Pinterest blocks datacenter IPs).

### How it works

Each public Pinterest profile page server-renders its data into an inline `__PWS_DATA__` JSON blob. The actor fetches the page over residential proxy, parses that blob, and extracts the profile, its boards, and recent pins — **one HTTP request per profile**, no browser, no login, no API keys. This keeps runs fast and cheap while staying resilient to UI changes.

### Use as an AI agent tool (MCP)

This actor is MCP-ready and exposed through the Apify MCP server. Point Claude, ChatGPT, or any MCP client at:

```
https://mcp.apify.com?tools=khadinakbar/pinterest-profile-scraper
```

Single username in, structured JSON out — ideal for agentic research workflows.

### Run via API

```bash
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~pinterest-profile-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "usernames": ["marthastewart"] }'
```

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const { defaultDatasetId } = await client.actor('khadinakbar/pinterest-profile-scraper')
  .call({ usernames: ['marthastewart', 'nike'] });
const { items } = await client.dataset(defaultDatasetId).listItems();
console.log(items);
```

### FAQ

**Do I need a Pinterest account or cookies?** No. The actor only reads public data — no login.

**How many boards / pins per profile?** Boards = the profile's first page (typically 8–25). Recent pins = up to 25. Both are included free in the profile fee.

**Why residential proxy?** Pinterest blocks datacenter IPs. Residential (the default) is required for reliable runs.

**What about private profiles?** Only public data is returned; private accounts expose little beyond core identity.

**Does it work outside the US?** Yes — change `apifyProxyCountry`. US is the default.

### Legal

This actor scrapes only **publicly available** information and does not access private or login-gated data. You are responsible for using the output in compliance with Pinterest's Terms of Service, applicable laws (including GDPR/CCPA), and data-protection regulations. Do not use scraped personal data for spam or unlawful purposes. This tool is provided for legitimate research, analytics, and lead-generation use cases.

# Actor input Schema

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

Public Pinterest profiles to scrape. Accepts bare usernames ('marthastewart'), @handles, or full profile URLs ('https://www.pinterest.com/marthastewart/'). One profile = one output record billed at $0.004. NOT for scraping pins by keyword or board URLs — use a Pinterest pin/board scraper for that.

## `username` (type: `string`):

Convenience field to scrape just one profile. A bare username, @handle, or profile URL. It is merged with the 'usernames' list above. Leave empty when using the list.

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

Hard cap on how many profiles are scraped and billed in one run, protecting your budget. Defaults to 100. The run stops after this many profiles regardless of how many usernames you pass.

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

When true (default) each record includes the profile's boards (first page, usually 8-25) with name, pin count, follower count, privacy and cover image. Set false for a slimmer record. Does not change the price.

## `includePins` (type: `boolean`):

When true (default) each record includes up to 25 of the profile's most recent pins with title, image, destination link and date. Set false to omit pins. Does not change the price.

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

Proxy settings. Defaults to Apify Residential (US), which Pinterest needs for reliable access. Datacenter proxies are usually blocked, so override only if you know what you are doing.

## Actor input object example

```json
{
  "usernames": [
    "marthastewart",
    "https://www.pinterest.com/nike/"
  ],
  "username": "marthastewart",
  "maxItems": 100,
  "includeBoards": true,
  "includePins": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `profiles` (type: `string`):

One record per Pinterest profile (core data, boards, recent pins).

# 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 = {
    "usernames": [
        "marthastewart"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/pinterest-profile-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 = {
    "usernames": ["marthastewart"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/pinterest-profile-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 '{
  "usernames": [
    "marthastewart"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call khadinakbar/pinterest-profile-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Pinterest Profile Scraper",
        "description": "Scrape public Pinterest profiles — followers, pins, boards, bio, website, verification + recent pins. HTTP-only, no login.",
        "version": "1.0",
        "x-build-id": "bScVQYudU9DBRcl2i"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/khadinakbar~pinterest-profile-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-khadinakbar-pinterest-profile-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/khadinakbar~pinterest-profile-scraper/runs": {
            "post": {
                "operationId": "runs-sync-khadinakbar-pinterest-profile-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/khadinakbar~pinterest-profile-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-khadinakbar-pinterest-profile-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",
                "properties": {
                    "usernames": {
                        "title": "Pinterest usernames or profile URLs",
                        "type": "array",
                        "description": "Public Pinterest profiles to scrape. Accepts bare usernames ('marthastewart'), @handles, or full profile URLs ('https://www.pinterest.com/marthastewart/'). One profile = one output record billed at $0.004. NOT for scraping pins by keyword or board URLs — use a Pinterest pin/board scraper for that.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "username": {
                        "title": "Single username (optional)",
                        "type": "string",
                        "description": "Convenience field to scrape just one profile. A bare username, @handle, or profile URL. It is merged with the 'usernames' list above. Leave empty when using the list."
                    },
                    "maxItems": {
                        "title": "Max profiles",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Hard cap on how many profiles are scraped and billed in one run, protecting your budget. Defaults to 100. The run stops after this many profiles regardless of how many usernames you pass.",
                        "default": 100
                    },
                    "includeBoards": {
                        "title": "Include boards",
                        "type": "boolean",
                        "description": "When true (default) each record includes the profile's boards (first page, usually 8-25) with name, pin count, follower count, privacy and cover image. Set false for a slimmer record. Does not change the price.",
                        "default": true
                    },
                    "includePins": {
                        "title": "Include recent pins",
                        "type": "boolean",
                        "description": "When true (default) each record includes up to 25 of the profile's most recent pins with title, image, destination link and date. Set false to omit pins. Does not change the price.",
                        "default": true
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. Defaults to Apify Residential (US), which Pinterest needs for reliable access. Datacenter proxies are usually blocked, so override only if you know what you are doing.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "US"
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
