# Pinterest Pins, Profiles, Boards & Idea Topics Scraper (`nimbryxo-studio/pinterest-pins-profiles-boards-and-idea-topics`) Actor

Collect Pinterest Pins, creator profiles, boards, idea topics, and search results in one actor, with built-in filters for minimum saves, creator followers, verified accounts, shoppable pins, and image-only results.

- **URL**: https://apify.com/nimbryxo-studio/pinterest-pins-profiles-boards-and-idea-topics.md
- **Developed by:** [Nimbryxo-studio](https://apify.com/nimbryxo-studio) (community)
- **Categories:** Social media, E-commerce, Lead generation
- **Security:** Limited permissions
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.49 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

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

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

## How to integrate an Actor?

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

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

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

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

# README

## Pinterest Pins, Profiles, Boards & Idea Topics Scraper

Collect public Pinterest Pins, creator profiles, boards, board sections,
idea topics, search results, and comments in one cookieless actor. Point it at a
keyword, a username, a board or section link, an idea-topic page, a numeric Pin, or a
batch of mixed public links and it returns the matching rows with real media, creator,
board, SEO, commerce, and engagement fields.

No Pinterest login, cookie, API key, or user-supplied proxy is required.

### What this actor does

- Searches Pins, video Pins, people, and boards.
- Reads Pin details and public comments/activity by numeric Pin URL or ID.
- Reads public profiles, a creator's Pins, and a creator's boards.
- Reads board details, board Pins, board sections, and Pins inside a section.
- Reads idea-topic metadata and, optionally, the Pins shown on the topic page.
- Auto-routes mixed Pin, profile, board, section, idea, and search links.
- Applies filters for minimum saves, minimum creator followers, verified accounts,
  outbound links, image-only results, promoted Pins, and shoppable Pins.
- Pushes rows as they are collected and omits fields Pinterest never published.

### Modes

| Mode | What it returns |
|---|---|
| `auto` | Routes mixed public Pinterest links to the matching collector. |
| `pinDetail` | One detailed Pin row per numeric Pin URL or ID. |
| `comments` | Public comment and activity rows for numeric Pins. |
| `searchPins` | Pins matching search phrases. |
| `searchVideos` | Video Pins from Pinterest's native video search scope. |
| `searchUsers` | Public profile rows from people search. |
| `searchBoards` | Public board rows from board search. |
| `userProfile` | Public profile identity, counts, websites, and flags. |
| `userPins` | Pins in a creator's public created-Pins feed. |
| `userBoards` | Boards owned by a public creator. |
| `boardDetail` | Public board metadata. |
| `boardPins` | Pins inside a board, or inside one board section when given a section URL. |
| `boardSections` | Sections inside a board. |
| `ideas` | Idea-topic metadata, plus topic Pins when `includeIdeaPins` is on. |

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | choice | `searchPins` | One of the modes above. |
| `startUrls` | array | empty | Mixed public links for `auto`. |
| `keywords` | array | `[]` | Search phrases. |
| `pinUrls` | array | `[]` | Numeric Pin URLs or IDs for `pinDetail` and `comments`. |
| `usernames` | array | `[]` | Usernames, @usernames, or profile links. |
| `boardUrls` | array | `[]` | Board links, `username/board` paths, or section links. |
| `ideaUrls` | array | `[]` | Full public idea-topic links. |
| `ideaSlugs` | array | empty | `slug/numeric-id` idea paths. |
| `maxItems` | integer | `50` | Maximum rows returned across all inputs (1-20,000). |
| `maxPages` | integer | `10` | Maximum pages per feed (1-2,000). |
| `language` | choice | `en` | Pinterest UI language for search ranking and labels. |
| `minSaves` | integer | unset | Keep Pins whose published save count reaches the value. Unknown counts pass through. |
| `minCreatorFollowers` | integer | unset | Keep Pins whose creator follower count reaches the value. Unknown counts pass through. |
| `verifiedOnly` | boolean | `false` | Keep only explicitly verified creators or profiles. |
| `requireOutboundLink` | boolean | `false` | Keep only Pins with a Pinterest-published destination URL. |
| `imageOnly` | boolean | `false` | Drop video Pins. |
| `excludeAds` | boolean | `false` | Drop Pins Pinterest marks as promoted. |
| `commerceOnly` | boolean | `false` | Keep only Pins with Pinterest product/shopping metadata. |
| `enrichPinDetails` | boolean | `false` | Visit numeric Pins from `userPins`/`boardPins` for detail-only fields. |
| `includeComments` | boolean | `false` | Add public comment/activity rows for collected numeric Pins. |
| `includeIdeaPins` | boolean | `false` | Also emit the Pins shown on an idea-topic page. |
| `maxComments` | integer | `10` | Maximum comment/activity rows per Pin. |
| `proxyConfiguration` | object | unset | Optional proxy override. The actor selects a working route automatically. |

Legacy task inputs are still accepted in code: `search` maps to `searchPins`, `urls`
maps to `pinUrls`, `limit` maps to `maxComments`, and `queries` maps to `keywords`.
Cookie fields are no longer used; public Pinterest data needs no cookies.

### Output

Every row has `recordType`, `sourceUrl`, and `scrapedAt`. Optional fields are omitted
when Pinterest does not publish them for that record.

#### Pin rows

`pinId`, `pinUrl`, `title`, `description`, `descriptionHtml`, `altText`,
`autoAltText`, `seoTitle`, `seoDescription`, `seoUrl`, `createdAt`, `domain`,
`images`, `imageUrl`, `imageWidth`, `imageHeight`, `imageSignature`, `videoVariants`,
`videoUrl`, `videoDurationMs`, `videoDurationSec`, `videoThumbnailUrl`, `isVideo`,
`mediaType`, `isPlayable`, `isRepin`, `pinFormat`, `storyPages`, `saves`,
`commentCount`, `likeCount`, `reactionCount`, `reactionCounts`, `repinCount`,
`shareCount`, `favoriteUserCount`, `viewCount`, `dominantColor`, `isPromoted`,
`isShoppable`, `shoppingFlags`, `product`, `productPinData`, `productMetadataId`,
`priceValue`, `priceCurrency`, `productAvailability`, `hashtags`, `richContentType`,
`richContentSite`, `richContentTitle`, `richContentDescription`, `richSummaryType`,
`richSummarySite`, `richSummaryTitle`, `articlePublishedAt`, `recipe`, `linkUrl`,
`linkDomain`, `mobileLinkUrl`, `trackedLinkUrl`, `utmLinkUrl`, `contentCategory`,
`mediaMethod`, `creator`, `creatorId`, `creatorUsername`, `creatorFullName`,
`creatorFollowerCount`, `creatorAvatar`, `creatorUrl`, `creatorVerified`,
`creatorIsVerified`, `creatorIsAdsOnly`, `originalCreator`, `originalCreatorUrl`,
`boardId`, `boardName`, `boardDescription`, `boardUrl`, `boardOwnerUsername`,
`boardCoverImageUrl`, `boardPinCount`, `boardFollowerCount`, `boardSectionCount`,
`boardCollaboratorCount`, `boardPrivacy`, `boardCreatedAt`, `boardIsCollaborative`,
`boardFollowedByMe`, `commentsDisabled`, `commentsEligible`,
`isEligibleForImageDownload`, `isEligibleForProduct`, `isOutOfStock`,
`isStaleProduct`, `isDownstreamPromotion`, `visualAnnotations`, `seoBreadcrumbs`,
`relatedInterests`, `canonicalUrl`, `canonicalPinId`, `canonicalPinUrl`,
`sourceType`, `sourceKeyword`, `sourceUsername`, `sourceBoardPath`, `sourceIdeaUrl`,
`ideaId`, `ideaSlug`, `sectionId`,
`sectionTitle`, `sectionSlug`, `sectionPinCount`, `sectionUrl`.

An opaque `e1_...` Pin row keeps `pinId`, omits `pinUrl`, and adds
`idIsEncrypted=true`, `detailAvailable=false`, and `commentsAvailable=false`.
`sourceUrl` points at the search, board, or idea page that opens.

#### Profile rows

`profileId`, `username`, `profileUrl`, `fullName`, `bio`, `location`, `createdAt`,
`followerCount`, `followingCount`, `pinCount`, `nativePinCount`, `boardCount`,
`groupBoardCount`, `videoPinCount`, `storyPinCount`, `profileViews`, `profileReach`,
`avatarUrls`, `avatarUrl`, `websiteUrl`, `listedWebsiteUrl`, `domainUrl`,
`profileCoverUrl`, `isPrivate`, `isPartner`, `isVerified`, `isVerifiedMerchant`,
`isDomainVerified`, `isGcoAccount`, `isTastemaker`, `isInspirationalMerchant`,
`isAdsOnlyProfile`, `isAdsOnly`.

#### Board rows

`boardId`, `name`, `description`, `url`, `boardUrl`, `createdAt`, `pinCount`,
`followerCount`, `sectionCount`, `collaboratorCount`, `privacy`, `coverImageUrl`,
`isCollaborative`, `followedByMe`, `ownerUsername`.

#### Board-section rows

`recordType="boardSection"`, `sectionId`, `sectionTitle`, `sectionSlug`,
`sectionPinCount`, `sectionUrl`, `boardId`, `boardName`, `boardUrl`,
`boardPinCount`, `boardFollowerCount`, `boardSectionCount`, `ownerUsername`, and
`previewPins` when Pinterest supplies preview cards.

#### Idea rows

`ideaId`, `ideaSlug`, `ideaUrl`, `name`, `title`, `description`, `followerCount`,
`pinCount`, `sectionCount`, and `coverImageUrl`.

#### Comment and activity rows

`recordType`, `activityType`, `pinId`, `pinUrl`, `commentId`, `nodeId`, `text`,
`createdAt`, `likeCount`, `reactionCounts`, `reactionByMe`, `helpfulCount`,
`markedHelpfulByMe`, `replyCount`, `isEdited`, `isHighlightedByPinOwner`,
`isTranslatable`, `tags`, `taggedUsers`, `media`, and an `author` object with
`id`, `username`, `firstName`, `fullName`, `avatarUrl`, and `isPrivateProfile`.

Zero and `false` values are kept when Pinterest explicitly publishes them. Price
fields are emitted only when the Pin has real product or shopping metadata, and a
zero price is omitted unless that metadata marks the product as free. An absent field
means the public response did not contain it; private or deleted objects are never
guessed.

### Examples

#### Search Pins

```json
{
  "mode": "searchPins",
  "keywords": ["minimalist kitchen", "small home office"],
  "maxItems": 500,
  "excludeAds": true
}
```

#### Audit creator profiles

```json
{
  "mode": "userProfile",
  "usernames": ["nasa", "crazylaurablog"]
}
```

#### Board sections and one section's Pins

```json
{
  "mode": "boardSections",
  "boardUrls": ["https://www.pinterest.com/krity_s/home-decor/"],
  "maxItems": 50
}
```

```json
{
  "mode": "boardPins",
  "boardUrls": ["https://www.pinterest.com/krity_s/home-decor/mens/"],
  "maxItems": 100
}
```

#### Idea topic metadata plus its Pins

```json
{
  "mode": "ideas",
  "ideaUrls": ["https://www.pinterest.com/ideas/beauty/935541271955/"],
  "includeIdeaPins": true,
  "maxItems": 50
}
```

#### Mixed Pinterest links

```json
{
  "mode": "auto",
  "startUrls": [
    "https://www.pinterest.com/pin/142567144449081155/",
    "https://www.pinterest.com/nasa/",
    "https://www.pinterest.com/nasa/ceres/",
    "https://www.pinterest.com/krity_s/home-decor/mens/",
    "https://www.pinterest.com/ideas/beauty/935541271955/",
    "https://www.pinterest.com/search/pins/?q=space+photography"
  ],
  "maxItems": 1000
}
```

### Use cases

- Niche content research: pull high-save, verified-creator Pins for a topic.
- Creator audits: profile a list of usernames for follower and Pin counts.
- Board and section snapshots: export a large board or one section.
- Idea-topic monitoring: track a curated topic and its current Pins.
- Mixed-link batch processing: route a list of assorted Pinterest URLs in one run.

### FAQ and limits

**Do I need Pinterest cookies or a login?** No. Every shipped mode reads public data.
Cookie inputs from old saved tasks are ignored with a log line.

**Why is `pinUrl` missing on some Pin rows?** Recent signed-out search, board, and
idea feeds return opaque `e1_...` IDs that Pinterest's detail endpoint
cannot open. Those rows are still real list data; the actor keeps `pinId` and adds
`idIsEncrypted=true` and `detailAvailable=false` instead of writing a broken URL.

**Why do search rows not show saves or comment counts?** Pinterest does not publish
those counters on most signed-out search cards. The actor emits only counters the
source actually contains and never invents zeroes.

**Does `relatedPins` still work?** No. Pinterest serves the related-closeup feed on the
workstation but blocks it by ASN from Apify cloud exits, so the mode is not advertised
or shown in the input schema. Old saved tasks that still send `mode=relatedPins`
finish with a status message explaining the limit instead of returning a silent empty
result. Use `searchPins`, `boardPins`, or `ideas` for discovery.

**What about the root `/ideas/` feed?** Pinterest requires a numeric interest ID for
the topic feed. Use a topic URL such as `/ideas/beauty/935541271955/`; the root page
alone is not supported.

**Can I filter by price or domain on the server?** Those unpublished search options
are not exposed because they are ignored or require a token. Use `commerceOnly` and
the client-side filters that Pinterest's public data actually supports.

**Are comment replies included?** The actor returns the public top-level comment and
activity rows Pinterest serves. Replies are not a separate shipped mode.

**Will a proxy be selected automatically?** Yes. The actor tries public traffic first,
then Apify datacenter proxy, and honours an optional caller-supplied proxy. You never
need to configure one.

**How large a run can I do?** `maxItems` supports up to 20,000 rows and the actor
follows feed cursors with duplicate and cursor-loop guards. Output is still bounded
by what Pinterest's public feed exposes.

**Is this affiliated with Pinterest?** No. It is an independent actor that reads
public Pinterest pages and is not endorsed by Pinterest, Inc.

# Actor input Schema

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

Choose the Pinterest use case. Every mode uses public Pinterest data and needs no login.

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

Mixed public Pinterest links for mode=`auto`. Unambiguous Pin, profile, board, board-section, idea, and search links are routed to the matching collector; unsupported links are skipped.

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

Words or phrases for search modes, for example `minimalist kitchen`.

## `pinUrls` (type: `array`):

Public Pinterest Pin links or numeric IDs. Used by mode=`pinDetail` and `comments`. Opaque e1\_ IDs from feeds are list-only and cannot be opened directly.

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

Pinterest usernames, @usernames, or public profile links.

## `boardUrls` (type: `array`):

Public board links, `username/board-name` paths, or a section link such as `https://www.pinterest.com/krity_s/home-decor/mens/`.

## `ideaUrls` (type: `array`):

Public Pinterest idea-topic links, for example `https://www.pinterest.com/ideas/beauty/935541271955/`.

## `ideaSlugs` (type: `array`):

Idea topic path pairs such as `beauty/935541271955`. Used when `mode=ideas`.

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

Maximum rows returned across all supplied inputs.

## `maxPages` (type: `integer`):

Maximum result pages to walk per feed (one page is about 25-50 Pins).

## `language` (type: `string`):

Pinterest UI language. It affects ranked search results and localized labels.

## `minSaves` (type: `integer`):

Keep Pins whose published save count is at least N. Pins without a published count pass through as unknown.

## `minCreatorFollowers` (type: `integer`):

Keep Pins whose public creator follower count reaches N. Unknown counts pass through.

## `verifiedOnly` (type: `boolean`):

Keep only rows where Pinterest explicitly reports a verified creator or profile.

## `requireOutboundLink` (type: `boolean`):

For Pin results, keep only Pins with a public destination URL supplied by Pinterest.

## `imageOnly` (type: `boolean`):

Drop video Pins and keep image Pins only.

## `excludeAds` (type: `boolean`):

Drop Pins that Pinterest explicitly marks as promoted or sponsored.

## `commerceOnly` (type: `boolean`):

Keep only Pins that carry Pinterest product or shopping metadata.

## `enrichPinDetails` (type: `boolean`):

For `userPins` and `boardPins`, visit each numeric Pin page for detail-only fields. Slower but more complete.

## `includeComments` (type: `boolean`):

Add real public comment and activity rows for collected numeric Pins.

## `includeIdeaPins` (type: `boolean`):

When mode=`ideas`, also emit the Pins shown on the idea-topic page.

## `maxComments` (type: `integer`):

Maximum public comment and activity rows per Pin when comments are enabled or mode=`comments`.

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

Optional Apify proxy override. The actor automatically falls back to Apify datacenter proxy and direct traffic, so no proxy setup is required.

## Actor input object example

```json
{
  "mode": "searchPins",
  "startUrls": [],
  "keywords": [
    "minimalist kitchen"
  ],
  "pinUrls": [
    "https://www.pinterest.com/pin/142567144448888376/"
  ],
  "usernames": [
    "nasa"
  ],
  "boardUrls": [
    "https://www.pinterest.com/nasa/ceres/"
  ],
  "ideaUrls": [
    "https://www.pinterest.com/ideas/beauty/935541271955/"
  ],
  "ideaSlugs": [],
  "maxItems": 1,
  "maxPages": 1,
  "language": "en",
  "verifiedOnly": false,
  "requireOutboundLink": false,
  "imageOnly": false,
  "excludeAds": false,
  "commerceOnly": false,
  "enrichPinDetails": false,
  "includeComments": false,
  "includeIdeaPins": false,
  "maxComments": 10
}
```

# Actor output Schema

## `records` (type: `string`):

Dataset containing Pinterest records. Each row includes recordType and sourceUrl.

# 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": "searchPins",
    "startUrls": [],
    "keywords": [
        "minimalist kitchen"
    ],
    "pinUrls": [
        "https://www.pinterest.com/pin/142567144448888376/"
    ],
    "usernames": [
        "nasa"
    ],
    "boardUrls": [
        "https://www.pinterest.com/nasa/ceres/"
    ],
    "ideaUrls": [
        "https://www.pinterest.com/ideas/beauty/935541271955/"
    ],
    "ideaSlugs": [],
    "maxItems": 1,
    "maxPages": 1,
    "language": "en",
    "verifiedOnly": false,
    "requireOutboundLink": false,
    "imageOnly": false,
    "excludeAds": false,
    "commerceOnly": false,
    "enrichPinDetails": false,
    "includeComments": false,
    "includeIdeaPins": false,
    "maxComments": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("nimbryxo-studio/pinterest-pins-profiles-boards-and-idea-topics").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": "searchPins",
    "startUrls": [],
    "keywords": ["minimalist kitchen"],
    "pinUrls": ["https://www.pinterest.com/pin/142567144448888376/"],
    "usernames": ["nasa"],
    "boardUrls": ["https://www.pinterest.com/nasa/ceres/"],
    "ideaUrls": ["https://www.pinterest.com/ideas/beauty/935541271955/"],
    "ideaSlugs": [],
    "maxItems": 1,
    "maxPages": 1,
    "language": "en",
    "verifiedOnly": False,
    "requireOutboundLink": False,
    "imageOnly": False,
    "excludeAds": False,
    "commerceOnly": False,
    "enrichPinDetails": False,
    "includeComments": False,
    "includeIdeaPins": False,
    "maxComments": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("nimbryxo-studio/pinterest-pins-profiles-boards-and-idea-topics").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 '{
  "mode": "searchPins",
  "startUrls": [],
  "keywords": [
    "minimalist kitchen"
  ],
  "pinUrls": [
    "https://www.pinterest.com/pin/142567144448888376/"
  ],
  "usernames": [
    "nasa"
  ],
  "boardUrls": [
    "https://www.pinterest.com/nasa/ceres/"
  ],
  "ideaUrls": [
    "https://www.pinterest.com/ideas/beauty/935541271955/"
  ],
  "ideaSlugs": [],
  "maxItems": 1,
  "maxPages": 1,
  "language": "en",
  "verifiedOnly": false,
  "requireOutboundLink": false,
  "imageOnly": false,
  "excludeAds": false,
  "commerceOnly": false,
  "enrichPinDetails": false,
  "includeComments": false,
  "includeIdeaPins": false,
  "maxComments": 10
}' |
apify call nimbryxo-studio/pinterest-pins-profiles-boards-and-idea-topics --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nimbryxo-studio/pinterest-pins-profiles-boards-and-idea-topics"
        }
    }
}
```

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/2Tm4PxTVqHl3vZsV5/builds/12qyg2ZPNYh1aCBuR/openapi.json
