# Pinterest Pins, Profiles and Boards Collector with Filters (`vexaloom-labs/pinterest-pins-profiles-and-boards-collector`) Actor

Collect public Pinterest Pins, profiles, boards, search results and comments by keyword or URL, with filters for saves, creator followers, verification, ads and shoppable Pins.

- **URL**: https://apify.com/vexaloom-labs/pinterest-pins-profiles-and-boards-collector.md
- **Developed by:** [vexaloom-labs](https://apify.com/vexaloom-labs) (community)
- **Categories:** Social media, E-commerce, Lead generation
- **Stats:** 2 total users, 1 monthly users, 0.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 and Ideas Collector

Pinterest exposes a lot of structured public data beyond what a page shows at first glance: media variants, creator and board context, engagement counts, product metadata and provenance. This actor collects that data from Pins, profiles, boards, board sections, comments, idea topics and search results in one dataset, without a Pinterest login or user-supplied credentials.

### What this actor does

- **Fourteen collection modes:** Auto-detect, Pin detail, comments, Pin search, video search, people search, board search, profile detail, a creator's Pins, a creator's boards, board detail, board Pins (including board sections), board sections, and idea-topic Pins.
- **Direct-first transport:** public profile, board, Pin and comment resources are called directly. Search tries the same direct path first, then falls back through the free automatic proxy pool when Pinterest returns an empty success envelope.
- **Cursor pagination:** follows Pinterest's bookmarks for searches, creator feeds, board feeds and comments, with repeated-cursor and duplicate guards.
- **Opaque-ID honesty:** some feeds return encrypted `e1_...` Pin IDs. Those rows are kept as list records with `idIsEncrypted: true`, `detailAvailable: false` and no invented Pin URL.
- **Source-backed filters:** saves, creator followers, verification, destination link, image-only, promoted Pins and shoppable Pins. A filter drops a row only when Pinterest supplies the value it needs.
- **Truthful counting:** every emitted record, including comments and board sections, counts toward `maxItems`. Missing values are omitted; explicit zeroes and `false` values are preserved.
- **Provenance:** every row says where it came from (`sourceType`, `sourceValue`, `position`), plus the search query, seed and numeric-ID recovery source when those apply.

### Output per record

Every row carries `record_type`/`recordType` (`pin`, `profile`, `board`, `boardSection` or `comment`), `source_url`/`sourceUrl`, `scraped_at`/`scrapedAt`, `sourceType`, `sourceValue` and `position`. Search rows also carry `query`; every row carries `seed`. Rows recovered from a creator feed carry `numericIdSource`.

#### Pin fields

Pin rows can include `id`/`pinId`, `idIsEncrypted`, `detailAvailable`, `commentsAvailable`, `url`/`pinUrl` (numeric Pins only), `title`, `description`, `altText`, `created_at`/`createdAt`, `dominant_color`, `link`/`linkUrl`, `linkDomain`, `domain`, `contentCategory`, `canonicalUrl`, `canonicalPinId`, `canonicalPinUrl`, `images`, `imageUrl`, `imageVariants`, `imageWidth`, `imageHeight`, `video_url`/`videoUrl`, `videoVariants`, `videoDurationMs`, `videoDurationSec`, `videoThumbnailUrl`, `is_video`/`isVideo`, `mediaType`, `pinFormat`, `storyPinId`, `storyPages`, `mediaMethod`, `seoTitle`, `seoDescription`, `seoUrl`, `mobileLinkUrl`, `trackedLinkUrl`, `utmLinkUrl`, `creator`, `creatorId`, `creatorUsername`, `creatorName`, `creatorUrl`, `creatorFollowerCount`, `originalCreator`, `originalCreatorUrl`, `board`, `boardId`, `boardName`, `boardUrl`, `boardOwnerUsername`, `boardCoverImageUrl`, `boardPinCount`, `boardFollowerCount`, `boardSectionCount`, `boardCollaboratorCount`, `boardPrivacy`, `boardCreatedAt`, `saves`/`save_count`, `commentCount`/`comment_count`, `repinCount`, `shareCount`, `reactionCounts`/`reaction_counts`, `reactionCount`, `likeCount`/`like_count`, `isPromoted`, `commentsDisabled`, `commentsEligible`, `isEligibleForImageDownload`, `isEligibleForProduct`, `isOutOfStock`, `isStaleProduct`, `isUnsafeForComments`, `isDownstreamPromotion`, `shouldMute`, `richMetadata`, `product`, `productPrice`/`priceValue`, `productCurrency`/`priceCurrency`, `productMerchant`, `productAvailability`, `isShoppable`, `shoppingFlags`, `hashtags`, `sourceType`, `ideaId`, `ideaSlug` and `sourceIdeaUrl`.

`imageVariants` and `videoVariants` keep Pinterest's own size names. Each entry can carry `url`, `width`, `height`, `duration` and `thumbnailUrl`. The primary `imageUrl` uses the stable `736x` variant when Pinterest supplies it. Story Pin pages can carry `pageId`, `layout` and blocks with `type`, `text`, `images` and `videos`.

#### Profile, board and section fields

Profile rows include `type`, `id`/`profileId`, `username`, `full_name`/`fullName`, `bio`, `location`, `createdAt`, `follower_count`/`followerCount`, `following_count`/`followingCount`, `pin_count`/`pinCount`, `board_count`/`boardCount`, `monthlyViews`, `avatarUrls`, `avatarUrl`, `image_url`, `website_url`/`websiteUrl`, `domainUrl`, `profile_url`/`profileUrl`, `isPrivate`, `isPartner`, `isVerifiedMerchant`, `isDomainVerified`, `isTastemaker`, `isAdsOnlyProfile`, `isAdsOnly` and `isVerified`.

Board rows include `type`, `id`/`boardId`, `name`/`boardName`, `description`, `url`/`boardUrl`, `pin_count`/`pinCount`, `follower_count`/`followerCount`, `sectionCount`, `collaboratorCount`, `privacy`, `coverImageUrl`, `owner_username`/`ownerUsername`, `isCollaborative` and `followedByMe`.

Board-section rows use `record_type: boardSection` and include `id`/`sectionId`, `title`/`sectionTitle`, `slug`/`sectionSlug`, `pin_count`/`sectionPinCount`, `url`/`sectionUrl`, plus the parent board's `boardId`, `boardName` and `boardUrl`.

#### Comment fields

Comment rows include `id`, `text`, `created_at`, `type`, `node_id`, `like_count`, `reaction_counts`, `reaction_by_me`, `helpful_count`, `marked_helpful_by_me`, `reply_count`, `is_edited`, `is_highlighted_by_pin_owner`, `is_translatable`, `tags`, `tagged_users`, `media`, `author_name`, `author_username`, `author_id`, `author_first_name`, `author_image`, `author_image_medium`, `author_node_id`, `author_is_private_profile`, `pin_id` and `pin_url`.

Missing fields are omitted. A published `0` or `false` stays in the row; an absent field means Pinterest did not publish it to the anonymous response.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | choice | `auto` | One of fourteen modes: `auto`, `pinDetail`, `comments`, `searchPins`, `searchVideos`, `searchUsers`, `searchBoards`, `userProfile`, `userPins`, `userBoards`, `boardDetail`, `boardPins`, `boardSections`, `ideas`. |
| `keywords` | array of text | — | Search phrases for the three search modes. |
| `pinUrls` | array | — | Pin links, numeric IDs, or opaque feed IDs. |
| `usernames` | array | — | Usernames, `@usernames`, or profile links. |
| `boardUrls` | array | — | Board links, `username/board` paths, or three-part board-section links. |
| `ideaUrls` | array | — | Idea-topic links such as `/ideas/beauty/935541271955/`. |
| `startUrls` | array | — | Mixed Pinterest links for `auto`. |
| `maxItems` | integer | `50` | Maximum emitted records, including comments and sections; `0` means no user cap. |
| `maxPages` | integer | `0` | Maximum feed pages; `0` follows Pinterest's cursors to the end. |
| `minSaves` | integer | `0` | Keep Pins meeting this published save count; `0` disables the filter. |
| `minCreatorFollowers` | integer | `0` | Keep Pins whose creator meets this published follower count; `0` disables it. |
| `verifiedOnly` | boolean | `false` | Keep only explicitly verified profiles or creators. |
| `requireOutboundLink` | boolean | `false` | Keep only Pins with a Pinterest-published destination link. |
| `imageOnly` | boolean | `false` | Exclude Pins with Pinterest video data. |
| `excludeAds` | boolean | `false` | Exclude Pins explicitly marked promoted or sponsored. |
| `commerceOnly` | boolean | `false` | Keep only Pins with product, price or shopping evidence. |
| `includeComments` | boolean | `false` | Add public comment rows for collected numeric Pins. |
| `maxComments` | integer | `10` | Maximum public comment rows per Pin. |
| `enrichDetails` | boolean | `false` | Fetch each collection Pin's detail response for more accurate fields. |
| `resolveNumericIds` | boolean | `true` | Recover openable numeric IDs from a creator's public RSS feed when the feed is all-opaque. |
| `proxyConfiguration` | object | — | Optional proxy override. Leave empty for direct-first collection with automatic fallback. |

Older saved tasks keep working: `searchTerms`, `search`, `pinterestUrls`, `profiles`, `boards`, `endPage`, `proxy` and `enrichPinDetails` are still read by the actor, but they are not shown as separate form fields. `cookies` and `cookiesJson` are ignored with a one-time log because every mode is anonymous.

#### Example: search Pins

```json
{
  "mode": "searchPins",
  "keywords": ["small kitchen ideas", "neutral bedroom"],
  "maxItems": 200
}
```

#### Example: profile and creator Pins

```json
{
  "mode": "userPins",
  "usernames": ["nasa", "crazylaurablog"],
  "maxItems": 25
}
```

#### Example: board sections and section Pins

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

Use `boardPins` with `https://www.pinterest.com/krity_s/home-decor/ideas/` to collect the Pins inside that section.

#### Example: mixed links and idea topics

```json
{
  "mode": "auto",
  "startUrls": [
    "https://www.pinterest.com/pin/142567144448888376/",
    "https://www.pinterest.com/nasa/",
    "https://www.pinterest.com/nasa/ceres/",
    "https://www.pinterest.com/ideas/beauty/935541271955/"
  ],
  "includeComments": true,
  "maxComments": 20
}
```

### Use cases

- Keyword and video research with rich Pin cards, media variants and destination links.
- Creator and board directories with published follower, Pin and section counts.
- Full board or board-section exports for content audits and mood-board analysis.
- Public comment and engagement collection for moderation or market research.
- Idea-topic discovery for trend and category research.
- Recurring jobs that need stable provenance and no login.

### Limitations and hard limits

- **Opaque Pin IDs:** search and board feeds can return encrypted IDs that do not open. Those rows keep every list field but no `url`; detail and comment collection requires a numeric ID.
- **Search engagement:** Pinterest usually omits save and comment counts from search cards, so those fields are absent there. Detail mode fills them for numeric Pins.
- **Board depth and detail:** a board's public feed may end before `maxItems` because Pinterest caps what it exposes. The feed can also return lightweight list rows (ID, image and media only) for some boards, so title, creator and engagement fields may be absent there. In-feed story modules such as "Related Interests" are not Pins and are never emitted as Pin rows.
- **Idea topics:** the idea page exposes a list-only feed capped at roughly 17 Pins and has no pagination.
- **Related Pins:** the related-Pin feed returns zero rows from anonymous datacenter traffic, so it is not a shipped mode.
- **Comment replies:** replies are not advertised as a mode; only the public top-level comment feed is collected.

### FAQ

#### Do I need Pinterest cookies or an API key?

No. Every mode works anonymously. Cookies supplied by an older saved task are ignored, and no private data is accessed.

#### Why is a field missing from one row?

Pinterest does not publish every field for every Pin, account, board or media type. Missing values are omitted instead of guessed; a published `0` or `false` is kept.

#### Why does a search return records without save or comment counts?

Search cards generally omit engagement counts. Use `pinDetail` or `enrichDetails` for numeric Pins when those fields matter.

#### What happens when a Pin has an encrypted ID?

The row is emitted as a list record with its title, description, media, creator and board where Pinterest supplies them. It has `idIsEncrypted: true`, `detailAvailable: false`, `commentsAvailable: false` and no Pin URL.

#### Can I collect a board section directly?

Yes. Paste a three-part section link into `boardUrls` with `boardPins`, or let `auto` route it. Use `boardSections` when you want the section list itself.

#### Are comments included in the item limit?

Yes. Comment and board-section rows count toward `maxItems` exactly like Pin, profile and board rows.

#### Why did a run return no records?

The actor fails with a clear status message instead of reporting a silent success. The `RUN_SUMMARY` in the key-value store lists raw rows, accepted rows, rejected rows and the rejection reason, such as an unsupported URL, an opaque detail request, a private page or a filter that removed every row.

#### Does the actor use a proxy?

Public traffic is tried directly first. When a request is blocked or returns an empty success envelope, the actor automatically falls back to a free proxy pool. You do not need to configure a proxy, though an optional override is available.

#### Is this affiliated with Pinterest?

No. This is an independent tool that reads public Pinterest pages and is not affiliated with or endorsed by Pinterest.

# Actor input Schema

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

Choose a collection type. Auto-detect accepts mixed public Pinterest Pin, profile, board, board-section, search and idea links.

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

One or more words or phrases for the search modes.

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

Public Pin links, numeric Pin IDs, or opaque feed IDs. Opaque IDs are kept as list rows without a detail page.

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

Usernames, @usernames, or public profile links.

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

Public board links or username/board paths. A three-part board-section link is routed to that section's Pins.

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

Public idea-topic links such as /ideas/beauty/935541271955/. Pinterest exposes a list-only feed capped at about 17 Pins.

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

Pin, profile, board, board-section, search and idea links for Auto-detect.

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

Maximum number of emitted records, including comment and section rows. Set to 0 for no user cap.

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

Maximum feed pages per search, profile, or board. 0 follows Pinterest's cursors until the source ends.

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

0 means no minimum. For a positive value, keep only Pins where Pinterest supplies a numeric save count at or above it.

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

0 means no minimum. Keep Pins only when Pinterest supplies a creator follower count at or above this value.

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

Keep only rows that Pinterest explicitly marks as verified.

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

Keep only Pins with a public destination link supplied by Pinterest.

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

Exclude Pins that Pinterest identifies as video.

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

Exclude Pins that Pinterest marks as promoted or sponsored.

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

Keep only Pins with source-backed product, price, or shopping metadata.

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

Add one real public comment row per collected numeric Pin. Comment rows count toward Maximum records.

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

Maximum public comment rows to add per Pin when comments are enabled.

## `enrichDetails` (type: `boolean`):

Check each collection Pin's public detail page for more accurate creator, engagement, link, and media fields. Slower and uses more requests.

## `resolveNumericIds` (type: `boolean`):

When a creator feed contains only opaque IDs, read the creator's public RSS feed to recover openable numeric Pin IDs.

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

Leave empty for direct-first collection with the actor's automatic fallback. A supplied proxy is used only after a direct empty or blocked response.

## Actor input object example

```json
{
  "mode": "pinDetail",
  "keywords": [],
  "pinUrls": [
    "142567144448888376"
  ],
  "usernames": [],
  "boardUrls": [],
  "ideaUrls": [],
  "startUrls": [],
  "maxItems": 1,
  "maxPages": 0,
  "minSaves": 0,
  "minCreatorFollowers": 0,
  "verifiedOnly": false,
  "requireOutboundLink": false,
  "imageOnly": false,
  "excludeAds": false,
  "commerceOnly": false,
  "includeComments": false,
  "maxComments": 10,
  "enrichDetails": false,
  "resolveNumericIds": true
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset with Pinterest Pins, profiles, boards, board sections, comments and search results

# 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": "pinDetail",
    "keywords": [],
    "pinUrls": [
        "142567144448888376"
    ],
    "usernames": [],
    "boardUrls": [],
    "ideaUrls": [],
    "startUrls": [],
    "maxItems": 1,
    "maxPages": 0,
    "minSaves": 0,
    "minCreatorFollowers": 0,
    "verifiedOnly": false,
    "requireOutboundLink": false,
    "imageOnly": false,
    "excludeAds": false,
    "commerceOnly": false,
    "includeComments": false,
    "maxComments": 10,
    "enrichDetails": false,
    "resolveNumericIds": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("vexaloom-labs/pinterest-pins-profiles-and-boards-collector").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": "pinDetail",
    "keywords": [],
    "pinUrls": ["142567144448888376"],
    "usernames": [],
    "boardUrls": [],
    "ideaUrls": [],
    "startUrls": [],
    "maxItems": 1,
    "maxPages": 0,
    "minSaves": 0,
    "minCreatorFollowers": 0,
    "verifiedOnly": False,
    "requireOutboundLink": False,
    "imageOnly": False,
    "excludeAds": False,
    "commerceOnly": False,
    "includeComments": False,
    "maxComments": 10,
    "enrichDetails": False,
    "resolveNumericIds": False,
}

# Run the Actor and wait for it to finish
run = client.actor("vexaloom-labs/pinterest-pins-profiles-and-boards-collector").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": "pinDetail",
  "keywords": [],
  "pinUrls": [
    "142567144448888376"
  ],
  "usernames": [],
  "boardUrls": [],
  "ideaUrls": [],
  "startUrls": [],
  "maxItems": 1,
  "maxPages": 0,
  "minSaves": 0,
  "minCreatorFollowers": 0,
  "verifiedOnly": false,
  "requireOutboundLink": false,
  "imageOnly": false,
  "excludeAds": false,
  "commerceOnly": false,
  "includeComments": false,
  "maxComments": 10,
  "enrichDetails": false,
  "resolveNumericIds": false
}' |
apify call vexaloom-labs/pinterest-pins-profiles-and-boards-collector --silent --output-dataset

```

## MCP server setup

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

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/HhVE3zC5rfGcXFgpl/builds/6EBR67S9mHDk9t96v/openapi.json
