# Pinterest Scraper — Pins, Boards & Profiles, No Login (`datakiln/pinterest-scraper`) Actor

Scrape Pinterest pins by keyword, board or profile without login: image, title, description, outbound link, saves, video, pinner and board, plus profile stats like followers and monthly views.

- **URL**: https://apify.com/datakiln/pinterest-scraper.md
- **Developed by:** [DataKiln Labs](https://apify.com/datakiln) (community)
- **Categories:** Social media, Marketing, E-commerce
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 83.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

## What's an Apify Actor?

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

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

## How to integrate an Actor?

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

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

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

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

# README

## Pinterest Scraper — pins, boards & profiles, no login

Scrape **Pinterest pins** from keyword searches, boards, board sections and profiles — no Pinterest account, no cookies, no API key. For every pin you get the title, description, **full-size image URL**, the **outbound link** and its domain, saves, reactions, video URL, the pinner and the board. Profile URLs also return the profile itself: followers, following, pin and board counts, bio, website and monthly views.

**Pay only for results: $1 per 1,000 pins.** No monthly rental, no start fee.

### What can you do with it?

- 🔎 **Trend & keyword research** — see what Pinterest shows for your keywords and which pins people save most.
- 🛍️ **Competitor and product research** — collect a brand's created pins with their outbound links, product and recipe metadata.
- 🖼️ **Image datasets & mood boards** — original-resolution image URLs with alt text and dominant colour.
- 🔗 **Traffic & link analysis** — find which websites and domains get pinned for a topic.
- 👤 **Creator discovery** — follower counts, monthly views and websites for Pinterest accounts.

### How to use

1. Type keywords into **Search keywords** and/or paste **Pinterest URLs** (pins, boards, board sections, profiles, search pages or `pin.it` short links — the type is detected automatically).
2. Set **Max pins per source** (default 100).
3. Click **Start**, then export as JSON, CSV, Excel or HTML, or connect to Google Sheets, Make, Zapier, n8n or the API.

#### Input example

```json
{
  "searchQueries": ["home decor", "vegan recipes"],
  "startUrls": [
    "https://www.pinterest.com/marthastewart/american-made/",
    "https://www.pinterest.com/marthastewart/"
  ],
  "maxPinsPerSource": 200,
  "includeProfileInfo": true
}
```

#### Output example — pin

```json
{
  "type": "pin",
  "pinId": "32088216070219320",
  "url": "https://www.pinterest.com/pin/32088216070219320/",
  "title": "White Nautical Napkin Rings Sailor Knot Turks Head by Mystic Knotwork",
  "description": "Mystic Knotwork Nautical Sailor Knot Turks Head Napkin Rings",
  "altText": "two pieces of white rope sitting on top of a red cloth",
  "imageUrl": "https://i.pinimg.com/originals/1d/2b/bb/1d2bbb71bc90ac8cec579baee6e0cdd3.jpg",
  "imageWidth": 500,
  "imageHeight": 500,
  "link": "http://www.ebay.com/itm/111212167099",
  "domain": "ebay.com",
  "createdAt": "2014-05-30T13:00:39+00:00",
  "saves": 1022,
  "repinCount": 967,
  "reactionCount": 3,
  "isVideo": false,
  "videoUrl": null,
  "pinner": {
    "username": "marthastewart",
    "fullName": "Martha Stewart",
    "isVerified": true,
    "profileUrl": "https://www.pinterest.com/marthastewart/"
  },
  "board": { "name": "American Made", "url": "https://www.pinterest.com/marthastewart/american-made/" },
  "source": "board:https://www.pinterest.com/marthastewart/american-made/",
  "scrapedAt": "2026-10-10T14:37:41+00:00"
}
```

#### Output example — profile

```json
{
  "type": "profile",
  "username": "marthastewart",
  "fullName": "Martha Stewart",
  "about": "Daily recipes, crafts, and inspiration from Martha Stewart.",
  "followers": 1868076,
  "following": 322,
  "pinCount": 105499,
  "boardCount": 174,
  "monthlyViews": 10000001,
  "websiteUrl": "http://marthastewart.com",
  "isVerified": true,
  "profileUrl": "https://www.pinterest.com/marthastewart/",
  "imageUrl": "https://i.pinimg.com/280x280_RS/c8/11/4c/c8114c783347e27daef00e5d4a6ac4f3.jpg",
  "joinedAt": "2011-09-15T07:56:17+00:00"
}
```

#### All pin fields

| Field | Description |
|---|---|
| `pinId`, `url` | Pin id and link |
| `title`, `description`, `altText` | Pin text and image alt text |
| `imageUrl`, `imageWidth`, `imageHeight`, `dominantColor` | Largest available image (usually the original upload) |
| `link`, `domain` | Where the pin leads (the outbound website) |
| `createdAt` | When the pin was created (ISO 8601, UTC) |
| `saves`, `repinCount`, `reactionCount`, `commentCount`, `shareCount` | Engagement (see FAQ for availability) |
| `isVideo`, `videoUrl`, `videoDuration` | Video pins: stream URL (HLS, or MP4 with *full pin details*) and length in seconds |
| `richType`, `siteName`, `rating`, `ratingCount` | Rich-pin metadata such as recipe or product, site name and star rating |
| `hashtags` | Hashtags (with *full pin details*) |
| `pinner` | Username, name, verification, profile URL |
| `board` | Board name, URL and id |
| `source` | What produced the pin: `search:<keyword>`, `board:<url>`, `section:<url>`, `profile:<url>` or `pin:<url>` |

Profile items (`"type": "profile"`) contain `username`, `fullName`, `about`, `followers`, `following`, `pinCount`, `boardCount`, `videoPinCount`, `monthlyViews`, `websiteUrl`, `domainVerified`, `isVerified`, `profileUrl`, `imageUrl`, `coverImageUrl`, `joinedAt` and `userId`.

### Pricing

| Event | Price |
|---|---|
| Pin saved | **$0.001** ($1 per 1,000 pins) |
| Profile saved | **$0.002** |

Platform usage is included. Cap any run with *Max total charge* in the run options — the scraper stops cleanly when the cap is reached. Promoted pins (ads), duplicates and sources that don't exist are skipped and never charged.

### FAQ

**Do I need a Pinterest account?** No. The scraper reads the same public data Pinterest shows to logged-out visitors. Private or secret boards can't be scraped.

**How many pins can I get?** Pinterest search usually goes several hundred pins deep per keyword; boards and profiles are paged until their end. Set *Max pins per source* to `0` for everything Pinterest shows. Pinterest's own counters (board pin count) include hidden and deleted pins, so the number you get can be a little lower.

**Why are `saves` empty for search results?** Pinterest's search grid doesn't include save counts. Board and profile pins do. Turn on *Fetch full pin details* to get saves, comment and share counts, hashtags and a direct MP4 for every pin (one extra request per pin, so the run is slower).

**Are the numbers exact?** They are what Pinterest reports at the moment of the run. Search results are personalised and change over time, so two runs of the same keyword are not identical.

**Which profile pins do I get?** *Auto* returns the pins the account created itself, or the pins it saved if it hasn't created any. You can force either one, or paste `…/username/_created/` or `…/username/_saved/` URLs.

**What happens with a wrong URL?** Profiles, boards or pins that don't exist are logged as a warning and skipped; the rest of the run continues.

**Is it legal?** It collects only publicly available information. You are responsible for how you use it — respect Pinterest's terms, copyright in images, and data-protection laws such as the GDPR when you store personal data.

### Related tools by DataKiln

- [Telegram Channel Scraper — posts, views & reactions from public channels](https://apify.com/datakiln/telegram-channel-scraper)
- [YouTube Channel Email Finder — creator emails, socials & stats](https://apify.com/datakiln/youtube-channel-email-finder)
- [YouTube Comments Scraper — comments, replies & likes](https://apify.com/datakiln/youtube-comments-scraper)
- [Podcast Email Finder — host emails from Apple Podcasts RSS feeds](https://apify.com/datakiln/podcast-email-finder)
- [TikTok Profile & Email Finder — bio, stats & contacts](https://apify.com/datakiln/tiktok-profile-email-finder)
- [Website Contact Extractor — emails, phones & socials from any website](https://apify.com/datakiln/website-contact-extractor)

### Support

Missing a field or found a URL that doesn't work? Open an issue on the **Issues** tab — we usually reply within 24 hours.

# Actor input Schema

## `searchQueries` (type: `array`):

Keywords to search on Pinterest, exactly as you would type them in the search bar. Each keyword is a separate source.

## `startUrls` (type: `array`):

Pin, board, board-section, profile or search URLs — the type is detected automatically. Examples: https://www.pinterest.com/pin/123…/, https://www.pinterest.com/marthastewart/american-made/, https://www.pinterest.com/marthastewart/, pin.it short links. Any Pinterest country domain works.

## `maxPinsPerSource` (type: `integer`):

Stop after this many pins for each keyword, board or profile. 0 = as many as Pinterest shows.

## `includeProfileInfo` (type: `boolean`):

For every profile URL, also save one profile item (followers, following, pin and board counts, bio, website, avatar).

## `profilePins` (type: `string`):

Created = pins the account published itself. Saved = everything it saved to its boards. Auto = created pins, or saved pins if the account hasn't created any.

## `includePinDetails` (type: `boolean`):

Opens every pin's own page for save count, comment and share counts, hashtags and a direct MP4 video link. Search results don't include saves otherwise. Slower: one extra request per pin.

## `maxConcurrency` (type: `integer`):

How many keywords/URLs to scrape at the same time.

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

Apify Proxy is used by default. Datacenter proxy works for Pinterest.

## Actor input object example

```json
{
  "searchQueries": [
    "home decor"
  ],
  "maxPinsPerSource": 100,
  "includeProfileInfo": true,
  "profilePins": "auto",
  "includePinDetails": false,
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `pins` (type: `string`):

All pins and profiles as JSON items.

## `overview` (type: `string`):

Overview table view.

# 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 = {
    "searchQueries": [
        "home decor"
    ],
    "maxPinsPerSource": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("datakiln/pinterest-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 = {
    "searchQueries": ["home decor"],
    "maxPinsPerSource": 100,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("datakiln/pinterest-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "home decor"
  ],
  "maxPinsPerSource": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call datakiln/pinterest-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,datakiln/pinterest-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/MysJGaaQ0ngSfwHO0/builds/qQfsnxEfR0Jn2SsvF/openapi.json
