# Pinterest Scraper Pins·Boards·Profiles·Ideas·Comments·Products (`memo23/pinterest-scraper`) Actor

\[Only $1.45💰] Pinterest Scraper — pull pins, boards, profiles, search results and ideas hubs in one actor. Get images, video, descriptions, links, engagement, creator and board info, comments, plus product/price fields and optional sentiment + category tags. JSON/CSV, no login, usage-based pricing.

- **URL**: https://apify.com/memo23/pinterest-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Social media, Lead generation, Agents
- **Stats:** 253 total users, 101 monthly users, 99.7% runs succeeded, 1 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.45 / 1,000 results

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Scraper

**Every public Pinterest surface in one actor** — scrape pins, search results, boards, profiles, and ideas hubs via the same JSON resources the Pinterest web app uses. No login, no browser. Get images, video, descriptions, links, engagement and creator/board context — plus optional **comments**, **follower/profile enrichment**, **product & price fields**, and heuristic **sentiment + content-category** tags. Export to JSON or CSV.

> One bundled actor — not a separate SKU per data type. Built for reliability: a single deleted or private pin can never fail your run.

*"From search grids and idea hubs to board feeds and individual pins — turn Pinterest browsing into structured datasets."*

#### How it works

![How Pinterest Scraper works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-pinterest-v1.png)

### Overview

The Pinterest Scraper is built for marketers, researchers, and analysts who need **public** pin metadata (images, engagement, board context, SEO fields, and more). It runs on the Apify platform with Crawlee and Cheerio, supports residential proxies, and exports to **JSON** or **CSV** (flattened mode is ideal for CSV).

### What does Pinterest Scraper do?

The Pinterest Scraper enables you to:

#### Comprehensive data collection

- **Pins**
  - Collect pin ids, canonical URLs, repin counts, reaction counts, and aggregated stats where available
  - Image variants (multiple sizes) and dominant color
  - Board context (name, privacy, owner) when the listing provides it
  - Rich listing fields merged with **PinResource** detail where applicable
- **Comments** (optional)
  - Per-pin comments via Pinterest's **UnifiedCommentsResource** (when enabled)
- **User profile enrichment** (optional)
  - Public **UserResource** fields merged into **pinner**, **owner**, and related user blobs (e.g. **follower\_count**, avatars)

#### Advanced crawling

- **Pagination**: Search, user activity, board feeds, and ideas hub feeds paginate until **max items** or no more bookmarks
- **Concurrency & retries**: Configurable **max/min concurrency** and **max request retries**
- **Proxy-friendly**: Residential proxy groups recommended for stable access

#### Flexible start points

See **[Supported start URLs](#supported-start-urls)** for every accepted pattern and a **copy-paste `startUrls` example** covering ideas hub, pin, profile, search, and board. In short: **pin** URLs, **search** URLs (`/search/pins`, `/search/videos`, …), **profile** (`/{user}/`), **board** (`/{user}/{board}/`), **ideas hub** (`/ideas/slug/id/`), or **Search queries** without pasting URLs.

This tool is ideal for:

- Trend and visual research
- Competitive inspiration tracking
- Building labeled image / metadata corpora from public pins
- Enriching pin lists with comments and creator stats

### Features

- **Multiple entry types**: Search, profile, board, ideas hub, and direct pin URLs in one run
- **Keyword mode**: **Search queries** (multi-line) + **Search type** (`pins`, `videos`, `boards`, `users`) when you prefer not to paste full URLs
- **Optional comments**: Toggle **Include comments** for a **comments** field (nested object when not flattened; dot keys when flattened)
- **Optional user enrichment**: Toggle **Include only user info** to merge **UserResource** into pin-related users
- **Flattened output**: One level of keys with dot notation — best for Excel/CSV pipelines
- **Search page cap**: **List end page** limits how many search API pages to walk (omit for no cap, still bounded by **max items**)
- **Structured export**: Dataset items as JSON; CSV export reflects the same flat/nested shape you choose

### How to use

1. **Apify**: Open the actor and sign in if needed.
2. **Start URLs** *or* **Search queries**: Paste one or more Pinterest URLs, or leave URLs empty and fill **Search queries** (and **Search type**).
3. **Options**: Set **max items**, **flattened output**, **include comments**, **include only user info**, **list end page** (optional), concurrency, retries, and **proxy** (residential recommended).
4. **Run**: Start the actor; results appear in the default dataset.

### Supported start URLs

Use full **HTTPS** URLs on `pinterest.com` or **`*.pinterest.com`** (e.g. `www.pinterest.com`, `br.pinterest.com`). Query strings are kept where Pinterest uses them (e.g. `?q=` on search).

| Kind | Path pattern | Notes |
|------|----------------|--------|
| **Pin** | `/pin/{id}` or `/pin/{slug}--{id}` | Numeric id, or slug ending with `--{id}`. |
| **Search** | `/search/{vertical}/…` | `vertical` must be `pins`, `videos`, `boards`, or `users`. Example: `/search/pins/?q=nails`. |
| **Ideas hub** | `/ideas/{topic-slug}/{numeric-id}/` | Exactly **three** path segments; last segment **digits only**. Example: `/ideas/beauty/935541271955/`. |
| **Board** | `/{username}/{board-slug}/` | Exactly **two** segments. Not profile tabs (e.g. `…/user/pins/` is reserved, not a board). |
| **Profile** | `/{username}/` | Exactly **one** segment; username must not be a reserved first segment (`search`, `pin`, `ideas`, `today`, …). |

**Without start URLs:** set **Search queries** (and **Search type**). The actor opens `https://www.pinterest.com/search/{searchScope}/?q=…` per query (`searchScope`: `pins` | `videos` | `boards` | `users`). Legacy **Search keyword** is one such query.

#### Example `startUrls` (what we support)

You can use **one** of these or **mix several** in a single run. **Maximum number of items** is a **shared cap** across every start URL (pins are merged into one dataset).

| Entry type | Example URL |
|------------|-------------|
| **Ideas hub** | `https://www.pinterest.com/ideas/beauty/935541271955/` |
| **Pin** (numeric id or `slug--id`) | `https://www.pinterest.com/pin/1829656094716568/` or `https://www.pinterest.com/pin/uitas--1829656094716568/` |
| **Profile** | `https://www.pinterest.com/dudadelsanto/` |
| **Search** | `https://www.pinterest.com/search/pins/?q=nail+art&rs=hub_page` |
| **Board** | `https://www.pinterest.com/dudadelsanto/nail-inspo/` |

Copy-paste as your **Start URLs** list:

```json
"startUrls": [
    "https://www.pinterest.com/ideas/beauty/935541271955/",
    "https://www.pinterest.com/pin/uitas--1829656094716568/",
    "https://www.pinterest.com/dudadelsanto/",
    "https://www.pinterest.com/search/pins/?q=nail+art&rs=hub_page",
    "https://www.pinterest.com/dudadelsanto/nail-inspo/"
]
```

**Not supported:** `pin.it` / other short domains, board **section** URLs (`…/board/section/`), non-`/ideas/` three-segment paths, and hosts outside `*.pinterest.com`.

### Input configuration

See **[Example `startUrls` (what we support)](#example-starturls-what-we-support)** for a copy-paste list with every entry type (ideas hub, pin, profile, search, board).

Example input (single pin URL + all optional enrichments + flattened rows):

```json
{
    "startUrls": [
        "https://www.pinterest.com/pin/uitas--1829656094716568/"
    ],
    "maxItems": 50,
    "flattenedOutput": true,
    "includeComments": true,
    "includeOnlyUserInfo": true,
    "maxSearchPages": 5,
    "maxConcurrency": 10,
    "minConcurrency": 1,
    "maxRequestRetries": 3,
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
```

Keyword-only example (same **max items** budget shared across queries):

```json
{
    "searchQueries": ["spring nails", "almond nails"],
    "searchScope": "pins",
    "maxItems": 100,
    "flattenedOutput": false,
    "includeComments": false,
    "includeOnlyUserInfo": false
}
```

#### Input fields

| Field | Description |
| ----- | ----------- |
| `startUrls` | String list: board, profile, ideas hub, search, or pin URLs (`www` or country subdomain on `*.pinterest.com`). |
| `searchQueries` | When `startUrls` is empty, one Pinterest search per non-empty line (uses `searchScope`). |
| `searchScope` | `pins` (default), `videos`, `boards`, or `users` — only affects keyword-built search URLs. `boards` and `users` find matching boards / accounts and scrape the pins inside them, so every tab outputs pins. |
| `searchKeyword` | Legacy single term; same as one entry in `searchQueries`. |
| `maxItems` | Maximum pins to collect (default 100; free users may be capped by the actor). |
| `maxSearchPages` | Max **search** API pages (optional); omit or ≤0 for no page limit. |
| `flattenedOutput` | If `true`, one object per pin with dot-separated keys (CSV-friendly). |
| `includeComments` | Fetch comments per pin (`UnifiedCommentsResource`). |
| `includeOnlyUserInfo` | Merge **UserResource** into pinner/owner (and related users). |
| `maxConcurrency` / `minConcurrency` | Crawler concurrency. |
| `maxRequestRetries` | Retries per failed request. |
| `proxy` | Apify proxy configuration (residential recommended). |

### Output structure

Each **dataset item** is one **pin** (merged listing + detail). The exact keys depend on **flattened output** and on which toggles were enabled.

More samples below show the same **pin** row shape from different starts. With **flattened output** off, fields are **nested** objects/arrays instead of dot keys.

#### Sample JSON — pin row, flattened, comments + user info

The example below is the **first record** from a real run with **Flattened output**, **Include comments**, and **Include only user info** enabled (same as `data_pin.json` in the repository). Keys use dot notation; comment threads use `comments.0.*`, `comments.1.*`, …

```json
{
    "node_id": "UGluOjE4Mjk2NTYwOTQ3MTY1Njg=",
    "seo_noindex_reason": null,
    "rich_metadata": null,
    "pinned_to_board": null,
    "utm_link": null,
    "pinner.node_id": "VXNlcjoxODI5NzkzNTA3MTA1NzE2",
    "pinner.indexed": true,
    "pinner.is_verified_merchant": false,
    "pinner.domain_url": null,
    "pinner.is_ads_only_profile": false,
    "pinner.followed_by_me": false,
    "pinner.image_small_url": "https://i.pinimg.com/30x30_RS/b5/7a/9b/b57a9b0cea06a51e8b4fc3963c806218.jpg",
    "pinner.first_name": "sandra",
    "pinner.full_name": "sandra zerpa",
    "pinner.id": "1829793507105716",
    "pinner.username": "saze300594",
    "pinner.instagram_data": null,
    "pinner.type": "user",
    "pinner.domain_verified": false,
    "pinner.ads_only_profile_site": null,
    "pinner.explicitly_followed_by_me": false,
    "pinner.blocked_by_me": false,
    "pinner.image_medium_url": "https://i.pinimg.com/75x75_RS/b5/7a/9b/b57a9b0cea06a51e8b4fc3963c806218.jpg",
    "pinner.follower_count": 142,
    "pinner.is_default_image": false,
    "is_go_linkless": false,
    "repin_count": 15660,
    "comment_count": 0,
    "origin_pinner": null,
    "closeup_attribution.node_id": "VXNlcjo2Mzk1MTEzNTMyNDUxMTY3Nzk=",
    "closeup_attribution.indexed": true,
    "closeup_attribution.is_verified_merchant": false,
    "closeup_attribution.domain_url": null,
    "closeup_attribution.is_ads_only_profile": false,
    "closeup_attribution.followed_by_me": false,
    "closeup_attribution.image_small_url": "https://i.pinimg.com/30x30_RS/e7/24/88/e7248865da7b2a9bac9ca81c5a0aae73.jpg",
    "closeup_attribution.first_name": "n",
    "closeup_attribution.full_name": "Nawari",
    "closeup_attribution.id": "639511353245116779",
    "closeup_attribution.username": "nourajaeI",
    "closeup_attribution.instagram_data": null,
    "closeup_attribution.type": "user",
    "closeup_attribution.domain_verified": false,
    "closeup_attribution.ads_only_profile_site": null,
    "closeup_attribution.explicitly_followed_by_me": false,
    "closeup_attribution.blocked_by_me": false,
    "closeup_attribution.image_medium_url": "https://i.pinimg.com/75x75_RS/e7/24/88/e7248865da7b2a9bac9ca81c5a0aae73.jpg",
    "closeup_attribution.follower_count": 216,
    "closeup_attribution.is_default_image": false,
    "image_signature": "322f275adaed7b7b44b568be3ec123be",
    "rich_summary": null,
    "digital_media_source_type": null,
    "tracking_params": "CwABAAAAEDMzMTk5NDI3OTYyMDA4MjkLAAcAAAAPdW5rbm93bi91bmtub3duAA",
    "closeup_description": null,
    "tracked_link": null,
    "id": "1829656094716568",
    "videos": null,
    "has_required_attribution_provider": false,
    "link_utm_applicable_and_replaced": 0,
    "has_been_boost_promoted": false,
    "is_playable": false,
    "is_native": false,
    "closeup_unified_description": " ",
    "description": " ",
    "manual_interest_tags": null,
    "grid_title": "",
    "image_medium_url": "https://i.pinimg.com/200x/32/2f/27/322f275adaed7b7b44b568be3ec123be.jpg",
    "is_hidden": false,
    "reaction_counts.1": 739,
    "section": null,
    "price_value": 0,
    "product_pin_data": null,
    "done_by_me": false,
    "link": null,
    "dominant_color": "#8b574b",
    "affiliate_disclosure": null,
    "buyable_product_availability": null,
    "is_eligible_for_aggregated_comments": true,
    "is_eligible_for_related_products": false,
    "aggregated_pin_data.node_id": "QWdncmVnYXRlZFBpbkRhdGE6NTM3NzQwMDAxOTY0NzI2MzY4MQ==",
    "aggregated_pin_data.id": "5377400019647263681",
    "aggregated_pin_data.did_it_data.details_count": 1,
    "aggregated_pin_data.did_it_data.videos_count": 0,
    "aggregated_pin_data.did_it_data.responses_count": 0,
    "aggregated_pin_data.did_it_data.recommend_scores.0.score": 1,
    "aggregated_pin_data.did_it_data.recommend_scores.0.count": 0,
    "aggregated_pin_data.did_it_data.recommend_scores.1.score": 0.5,
    "aggregated_pin_data.did_it_data.recommend_scores.1.count": 0,
    "aggregated_pin_data.did_it_data.recommend_scores.2.score": 0,
    "aggregated_pin_data.did_it_data.recommend_scores.2.count": 0,
    "aggregated_pin_data.did_it_data.type": "aggregateddiditdata",
    "aggregated_pin_data.did_it_data.recommended_count": 1,
    "aggregated_pin_data.did_it_data.rating": -1,
    "aggregated_pin_data.did_it_data.user_count": 1,
    "aggregated_pin_data.did_it_data.images_count": 1,
    "aggregated_pin_data.is_stela": false,
    "aggregated_pin_data.comment_count": 12,
    "aggregated_pin_data.creator_analytics": null,
    "aggregated_pin_data.is_shop_the_look": false,
    "aggregated_pin_data.aggregated_stats.saves": 24753,
    "aggregated_pin_data.aggregated_stats.done": 1,
    "third_party_pin_owner": null,
    "is_quick_promotable_by_pinner": false,
    "creator_class_instance": null,
    "collection_pin": null,
    "images.60x60.width": 60,
    "images.60x60.height": 60,
    "images.60x60.url": "https://i.pinimg.com/60x60/32/2f/27/322f275adaed7b7b44b568be3ec123be.jpg",
    "images.136x136.width": 136,
    "images.136x136.height": 136,
    "images.136x136.url": "https://i.pinimg.com/136x136/32/2f/27/322f275adaed7b7b44b568be3ec123be.jpg",
    "images.170x.width": 236,
    "images.170x.height": 396,
    "images.170x.url": "https://i.pinimg.com/236x/32/2f/27/322f275adaed7b7b44b568be3ec123be.jpg",
    "images.236x.width": 236,
    "images.236x.height": 396,
    "images.236x.url": "https://i.pinimg.com/236x/32/2f/27/322f275adaed7b7b44b568be3ec123be.jpg",
    "images.474x.width": 474,
    "images.474x.height": 795,
    "images.474x.url": "https://i.pinimg.com/474x/32/2f/27/322f275adaed7b7b44b568be3ec123be.jpg",
    "images.564x.width": 564,
    "images.564x.height": 946,
    "images.564x.url": "https://i.pinimg.com/564x/32/2f/27/322f275adaed7b7b44b568be3ec123be.jpg",
    "images.736x.width": 637,
    "images.736x.height": 1069,
    "images.736x.url": "https://i.pinimg.com/736x/32/2f/27/322f275adaed7b7b44b568be3ec123be.jpg",
    "images.600x315.width": 600,
    "images.600x315.height": 315,
    "images.600x315.url": "https://i.pinimg.com/600x315/32/2f/27/322f275adaed7b7b44b568be3ec123be.jpg",
    "images.orig.width": 637,
    "images.orig.height": 1069,
    "images.orig.url": "https://i.pinimg.com/originals/32/2f/27/322f275adaed7b7b44b568be3ec123be.jpg",
    "is_quick_promotable": false,
    "is_whitelisted_for_tried_it": true,
    "pin_join.canonical_pin.id": "1829656094716568",
    "pin_join.visual_annotation.0": "Acrylic Nail Designs Almond Shape Summer",
    "pin_join.visual_annotation.1": "Summery Nail Designs",
    "pin_join.visual_annotation.2": "Girls Nail Art",
    "pin_join.visual_annotation.3": "Nail Inspo Almond Back To School",
    "pin_join.visual_annotation.4": "Nail Ideas Almond Shape Summer",
    "pin_join.visual_annotation.5": "Nail Inspo Teen Girl",
    "pin_join.visual_annotation.6": "Cute Almond Nails Summer",
    "pin_join.visual_annotation.7": "Nails Summer Almond Shape",
    "pin_join.visual_annotation.8": "Holiday Almond Nails Summer",
    "pin_join.shopping_klp_urls": null,
    "pin_join.annotations_with_links.Acrylic Nail Designs Almond Shape Summer.url": "/ideas/acrylic-nail-designs-almond-shape-summer/897033459343/",
    "pin_join.annotations_with_links.Acrylic Nail Designs Almond Shape Summer.name": "Acrylic Nail Designs Almond Shape Summer",
    "pin_join.annotations_with_links.Summery Nail Designs.url": "/ideas/summery-nail-designs/920153014757/",
    "pin_join.annotations_with_links.Summery Nail Designs.name": "Summery Nail Designs",
    "pin_join.annotations_with_links.Girls Nail Art.url": "/ideas/girls-nail-art/910317279621/",
    "pin_join.annotations_with_links.Girls Nail Art.name": "Girls Nail Art",
    "pin_join.annotations_with_links.Nail Inspo Almond Back To School.url": "/ideas/nail-inspo-almond-back-to-school/919284514973/",
    "pin_join.annotations_with_links.Nail Inspo Almond Back To School.name": "Nail Inspo Almond Back To School",
    "pin_join.annotations_with_links.Nail Ideas Almond Shape Summer.url": "/ideas/nail-ideas-almond-shape-summer/949795659492/",
    "pin_join.annotations_with_links.Nail Ideas Almond Shape Summer.name": "Nail Ideas Almond Shape Summer",
    "pin_join.annotations_with_links.Nail Inspo Teen Girl.url": "/ideas/nail-inspo-teen-girl/947766369450/",
    "pin_join.annotations_with_links.Nail Inspo Teen Girl.name": "Nail Inspo Teen Girl",
    "pin_join.annotations_with_links.Cute Almond Nails Summer.url": "/ideas/cute-almond-nails-summer/894726628847/",
    "pin_join.annotations_with_links.Cute Almond Nails Summer.name": "Cute Almond Nails Summer",
    "pin_join.annotations_with_links.Nails Summer Almond Shape.url": "/ideas/nails-summer-almond-shape/913720594236/",
    "pin_join.annotations_with_links.Nails Summer Almond Shape.name": "Nails Summer Almond Shape",
    "pin_join.annotations_with_links.Holiday Almond Nails Summer.url": "/ideas/holiday-almond-nails-summer/933228308233/",
    "pin_join.annotations_with_links.Holiday Almond Nails Summer.name": "Holiday Almond Nails Summer",
    "is_eligible_for_pdp": false,
    "attribution": null,
    "affiliate_link": null,
    "closeup_unified_attribution.node_id": "VXNlcjo2Mzk1MTEzNTMyNDUxMTY3Nzk=",
    "closeup_unified_attribution.indexed": true,
    "closeup_unified_attribution.is_verified_merchant": false,
    "closeup_unified_attribution.domain_url": null,
    "closeup_unified_attribution.is_ads_only_profile": false,
    "closeup_unified_attribution.followed_by_me": false,
    "closeup_unified_attribution.image_small_url": "https://i.pinimg.com/30x30_RS/e7/24/88/e7248865da7b2a9bac9ca81c5a0aae73.jpg",
    "closeup_unified_attribution.first_name": "n",
    "closeup_unified_attribution.full_name": "Nawari",
    "closeup_unified_attribution.id": "639511353245116779",
    "closeup_unified_attribution.username": "nourajaeI",
    "closeup_unified_attribution.instagram_data": null,
    "closeup_unified_attribution.type": "user",
    "closeup_unified_attribution.domain_verified": false,
    "closeup_unified_attribution.ads_only_profile_site": null,
    "closeup_unified_attribution.explicitly_followed_by_me": false,
    "closeup_unified_attribution.blocked_by_me": false,
    "closeup_unified_attribution.image_medium_url": "https://i.pinimg.com/75x75_RS/e7/24/88/e7248865da7b2a9bac9ca81c5a0aae73.jpg",
    "closeup_unified_attribution.follower_count": 216,
    "closeup_unified_attribution.is_default_image": false,
    "closeup_user_note": " ",
    "type": "pin",
    "video_status_message": null,
    "alt_text": null,
    "is_product_tagging_enabled_standard_pin": false,
    "is_promotable": false,
    "board.node_id": "Qm9hcmQ6MTgyOTcyNDc4ODAxMzE1NQ==",
    "board.name": "uñitas",
    "board.privacy": "public",
    "board.map_id": "pinterest.ijz1714i",
    "board.url": "/saze300594/u%C3%B1itas/",
    "board.layout": "default",
    "board.pin_thumbnail_urls.0": "https://i.pinimg.com/150x150/8e/c4/c2/8ec4c2800f02e45acc9c226814d9d97e.jpg",
    "board.pin_thumbnail_urls.1": "https://i.pinimg.com/150x150/39/7a/ba/397aba17b1bf3c7721694cbda907ad68.jpg",
    "board.pin_thumbnail_urls.2": "https://i.pinimg.com/150x150/43/d9/ce/43d9ce0eff336657b846d719145d707a.jpg",
    "board.pin_thumbnail_urls.3": "https://i.pinimg.com/150x150/3e/a8/11/3ea811cdb45de21734031221d26b75d5.jpg",
    "board.pin_thumbnail_urls.4": "https://i.pinimg.com/150x150/d2/69/31/d26931df409ec28a40f6b3e41446d26c.jpg",
    "board.followed_by_me": false,
    "board.collaborated_by_me": false,
    "board.id": "1829724788013155",
    "board.image_cover_url": "https://i.pinimg.com/200x150/90/36/36/9036366e93cdd5a681bbb192d1c2aa72.jpg",
    "board.type": "board",
    "board.is_collaborative": false,
    "board.image_thumbnail_url": "https://i.pinimg.com/upload/1829724788013155_board_thumbnail_2026-04-06-04-09-10_46142_60.jpg",
    "board.description": "",
    "board.category": null,
    "board.owner.node_id": "VXNlcjoxODI5NzkzNTA3MTA1NzE2",
    "board.owner.indexed": true,
    "board.owner.is_verified_merchant": false,
    "board.owner.domain_url": null,
    "board.owner.is_ads_only_profile": false,
    "board.owner.followed_by_me": false,
    "board.owner.image_small_url": "https://i.pinimg.com/30x30_RS/b5/7a/9b/b57a9b0cea06a51e8b4fc3963c806218.jpg",
    "board.owner.first_name": "sandra",
    "board.owner.full_name": "sandra zerpa",
    "board.owner.id": "1829793507105716",
    "board.owner.username": "saze300594",
    "board.owner.instagram_data": null,
    "board.owner.type": "user",
    "board.owner.domain_verified": false,
    "board.owner.ads_only_profile_site": null,
    "board.owner.explicitly_followed_by_me": false,
    "board.owner.blocked_by_me": false,
    "board.owner.image_medium_url": "https://i.pinimg.com/75x75_RS/b5/7a/9b/b57a9b0cea06a51e8b4fc3963c806218.jpg",
    "board.owner.follower_count": 142,
    "board.owner.is_default_image": false,
    "board.is_ads_only": false,
    "seo_title": "Pin by sandra zerpa on uñitas | Acrylic nails, Nail designs, Girly acrylic nails",
    "should_open_in_stream": false,
    "can_delete_did_it_and_comments": false,
    "did_it_disabled": false,
    "privacy": "public",
    "is_stale_product": false,
    "unified_user_note": "",
    "native_creator.node_id": "VXNlcjo2Mzk1MTEzNTMyNDUxMTY3Nzk=",
    "native_creator.indexed": true,
    "native_creator.is_verified_merchant": false,
    "native_creator.domain_url": null,
    "native_creator.is_ads_only_profile": false,
    "native_creator.followed_by_me": false,
    "native_creator.image_small_url": "https://i.pinimg.com/30x30_RS/e7/24/88/e7248865da7b2a9bac9ca81c5a0aae73.jpg",
    "native_creator.first_name": "n",
    "native_creator.full_name": "Nawari",
    "native_creator.id": "639511353245116779",
    "native_creator.username": "nourajaeI",
    "native_creator.instagram_data": null,
    "native_creator.type": "user",
    "native_creator.domain_verified": false,
    "native_creator.ads_only_profile_site": null,
    "native_creator.explicitly_followed_by_me": false,
    "native_creator.blocked_by_me": false,
    "native_creator.image_medium_url": "https://i.pinimg.com/75x75_RS/e7/24/88/e7248865da7b2a9bac9ca81c5a0aae73.jpg",
    "native_creator.follower_count": 216,
    "native_creator.is_default_image": false,
    "shuffle": null,
    "promoted_is_removable": false,
    "is_eligible_for_brand_catalog": false,
    "description_html": " ",
    "is_repin": true,
    "pin_additional_note": null,
    "media_attribution": null,
    "is_unsafe_for_comments": false,
    "created_at": "Sun, 29 Jun 2025 17:17:08 +0000",
    "story_pin_data_id": null,
    "category": "",
    "share_count": 583,
    "comments_disabled": false,
    "seo_description": "Jun 29, 2025 - This Pin was discovered by sandra zerpa. Discover (and save!) your own Pins on Pinterest",
    "creator_class": null,
    "shopping_rec_disabled": false,
    "embed": null,
    "carousel_data": null,
    "video_status": null,
    "sponsorship": null,
    "price_currency": "USD",
    "story_pin_data": null,
    "promoter": null,
    "via_pinner.node_id": "VXNlcjoxOTAwMTYyMjUxMjc0ODY1",
    "via_pinner.indexed": true,
    "via_pinner.is_verified_merchant": false,
    "via_pinner.domain_url": null,
    "via_pinner.is_ads_only_profile": false,
    "via_pinner.followed_by_me": false,
    "via_pinner.image_small_url": "https://i.pinimg.com/30x30_RS/26/d4/5e/26d45edbfc8559725518ba435486e841.jpg",
    "via_pinner.first_name": "n",
    "via_pinner.full_name": "Genevieve",
    "via_pinner.id": "1900162251274865",
    "via_pinner.username": "elenasalvatore06",
    "via_pinner.instagram_data": null,
    "via_pinner.type": "user",
    "via_pinner.domain_verified": false,
    "via_pinner.ads_only_profile_site": null,
    "via_pinner.explicitly_followed_by_me": false,
    "via_pinner.blocked_by_me": false,
    "via_pinner.image_medium_url": "https://i.pinimg.com/75x75_RS/26/d4/5e/26d45edbfc8559725518ba435486e841.jpg",
    "via_pinner.follower_count": 55,
    "via_pinner.is_default_image": false,
    "creator_analytics": null,
    "is_oos_product": false,
    "shuffle_asset": null,
    "is_promoted": false,
    "ships_to_user_country": false,
    "method": "share_extension_ios",
    "link_domain": null,
    "mobile_link": null,
    "is_video": false,
    "product_metadata": null,
    "user_mention_tags": null,
    "title": "",
    "domain": "Uploaded by user",
    "url": "https://www.pinterest.com/pin/1829656094716568/",
    "owner.node_id": "VXNlcjoxODI5NzkzNTA3MTA1NzE2",
    "owner.indexed": true,
    "owner.is_verified_merchant": false,
    "owner.domain_url": null,
    "owner.is_ads_only_profile": false,
    "owner.followed_by_me": false,
    "owner.image_small_url": "https://i.pinimg.com/30x30_RS/b5/7a/9b/b57a9b0cea06a51e8b4fc3963c806218.jpg",
    "owner.first_name": "sandra",
    "owner.full_name": "sandra zerpa",
    "owner.id": "1829793507105716",
    "owner.username": "saze300594",
    "owner.instagram_data": null,
    "owner.type": "user",
    "owner.domain_verified": false,
    "owner.ads_only_profile_site": null,
    "owner.explicitly_followed_by_me": false,
    "owner.blocked_by_me": false,
    "owner.image_medium_url": "https://i.pinimg.com/75x75_RS/b5/7a/9b/b57a9b0cea06a51e8b4fc3963c806218.jpg",
    "owner.follower_count": 142,
    "owner.is_default_image": false,
    "comments.0.id": "5443675882856180764",
    "comments.0.created_at": "",
    "comments.0.content": "I did these but yellow w gellll xx",
    "comments.0.name": "urfavee_blondiee",
    "comments.0.url": "https://www.pinterest.com/urfavee_blondiee",
    "comments.0.like_count": 0,
    "comments.0.reply_count": 0,
    "comments.0.helpful_count": 0,
    "comments.1.id": "5442792156024585568",
    "comments.1.created_at": "Wed, 23 Jul 2025 19:58:11 +0000",
    "comments.1.content": "Obsessed 😍",
    "comments.1.name": "greenyellow550",
    "comments.1.url": "https://www.pinterest.com/greenyellow550",
    "comments.1.like_count": 0,
    "comments.1.reply_count": 0,
    "comments.1.helpful_count": 0,
    "comments.2.id": "5443777640647406280",
    "comments.2.created_at": "Tue, 29 Jul 2025 06:30:05 +0000",
    "comments.2.content": "Obsessed 😍",
    "comments.2.name": "Myproflieisthebest",
    "comments.2.url": "https://www.pinterest.com/Myproflieisthebest",
    "comments.2.like_count": 0,
    "comments.2.reply_count": 0,
    "comments.2.helpful_count": 0,
    "comments.3.id": "5449498322484117661",
    "comments.3.created_at": "Fri, 29 Aug 2025 20:13:58 +0000",
    "comments.3.content": "Obsessed 😍",
    "comments.3.name": "egassner5684",
    "comments.3.url": "https://www.pinterest.com/egassner5684",
    "comments.3.like_count": 0,
    "comments.3.reply_count": 0,
    "comments.3.helpful_count": 0,
    "comments.3.avatar": "https://s.pinimg.com/images/user/default_75.png",
    "comments.4.id": "5449635224833028775",
    "comments.4.created_at": "Sat, 30 Aug 2025 14:21:59 +0000",
    "comments.4.content": "Love it ❤️ Obsessed 😍",
    "comments.4.name": "amytaylor341",
    "comments.4.url": "https://www.pinterest.com/amytaylor341",
    "comments.4.like_count": 0,
    "comments.4.reply_count": 0,
    "comments.4.helpful_count": 0,
    "comments.4.avatar": "https://s.pinimg.com/images/user/default_75.png",
    "comments.5.id": "5445821451433193930",
    "comments.5.created_at": "Sat, 09 Aug 2025 13:12:50 +0000",
    "comments.5.content": "I love these!!!",
    "comments.5.name": "andymmiller19",
    "comments.5.url": "https://www.pinterest.com/andymmiller19",
    "comments.5.like_count": 0,
    "comments.5.reply_count": 0,
    "comments.5.helpful_count": 0,
    "comments.5.avatar": "https://i.pinimg.com/75x75_RS/13/12/cb/1312cb2d86dd7af0f727ae0cab839c37.jpg",
    "comments.6.id": "5440400004181176329",
    "comments.6.created_at": "Thu, 10 Jul 2025 15:07:01 +0000",
    "comments.6.content": "Those EAT!!!!!!",
    "comments.6.name": "rain880",
    "comments.6.url": "https://www.pinterest.com/rain880",
    "comments.6.like_count": 0,
    "comments.6.reply_count": 0,
    "comments.6.helpful_count": 0,
    "comments.6.avatar": "https://i.pinimg.com/75x75_RS/48/cc/c7/48ccc773a44f7c3a7aed4fae4cb4989f.jpg",
    "comments.7.id": "3086893127497726272",
    "comments.7.created_at": "Mon, 22 Dec 2025 18:36:24 +0000",
    "comments.7.content": "Obsessed 😍 Love it ❤️",
    "comments.7.name": "zowilson200319",
    "comments.7.url": "https://www.pinterest.com/zowilson200319",
    "comments.7.like_count": 0,
    "comments.7.reply_count": 0,
    "comments.7.helpful_count": 0,
    "comments.7.avatar": "https://i.pinimg.com/75x75_RS/7b/21/c6/7b21c6f844b8e935beea84c287a6c4fc.jpg",
    "comments.8.id": "5454037569662664541",
    "comments.8.created_at": "Tue, 23 Sep 2025 21:28:41 +0000",
    "comments.8.content": "So cute ahh ❤️😍😍",
    "comments.8.name": "evelyninoa12",
    "comments.8.url": "https://www.pinterest.com/evelyninoa12",
    "comments.8.like_count": 0,
    "comments.8.reply_count": 0,
    "comments.8.helpful_count": 0,
    "comments.8.avatar": "https://s.pinimg.com/images/user/default_75.png",
    "comments.9.id": "5446067006006683443",
    "comments.9.created_at": "Sun, 10 Aug 2025 21:44:21 +0000",
    "comments.9.content": "Love it ❤️ Looks good!",
    "comments.9.name": "sekhonk80",
    "comments.9.url": "https://www.pinterest.com/sekhonk80",
    "comments.9.like_count": 0,
    "comments.9.reply_count": 0,
    "comments.9.helpful_count": 0,
    "comments.9.avatar": "https://s.pinimg.com/images/user/default_75.png",
    "pinner_follower_count": 142
}
```

#### Sample JSON — ideas hub (Beauty category), flattened

Start URL: `https://www.pinterest.com/ideas/beauty/935541271955/`. Each dataset item is still a **pin** (`"type": "pin"`); the ideas hub feed supplies listing fields, then the same pin pipeline applies (optional comments / user enrichment). First record from `data_ideas_beauty.json`.

```json
{
    "node_id": "UGluOjU2MzAxODY5ODQxNjk2Mg==",
    "seo_url": "/pin/19-best-foundations-for-combination-skin-for-a-balanced-makeup-look--563018698416962/",
    "native_creator.node_id": "VXNlcjoxNTgwNDg0MDU1ODE1MTY3NzE=",
    "native_creator.domain_verified": false,
    "native_creator.is_default_image": false,
    "native_creator.is_verified_merchant": false,
    "native_creator.followed_by_me": false,
    "native_creator.type": "user",
    "native_creator.is_ads_only_profile": false,
    "native_creator.first_name": "Eri the",
    "native_creator.follower_count": 1491,
    "native_creator.blocked_by_me": false,
    "native_creator.image_small_url": "https://i.pinimg.com/30x30_RS/c0/91/dc/c091dcdcbff188633fc3eb58e98de6bd.jpg",
    "native_creator.full_name": "Eri the cat",
    "native_creator.explicitly_followed_by_me": false,
    "native_creator.username": "eri_neko",
    "native_creator.indexed": true,
    "native_creator.id": "158048405581516771",
    "native_creator.image_medium_url": "https://i.pinimg.com/75x75_RS/c0/91/dc/c091dcdcbff188633fc3eb58e98de6bd.jpg",
    "images.60x60.width": 60,
    "images.60x60.height": 60,
    "images.60x60.url": "https://i.pinimg.com/60x60/7e/43/90/7e43902a193e47a0a2513343ff71af3f.jpg",
    "images.136x136.width": 136,
    "images.136x136.height": 136,
    "images.136x136.url": "https://i.pinimg.com/136x136/7e/43/90/7e43902a193e47a0a2513343ff71af3f.jpg",
    "images.170x.width": 236,
    "images.170x.height": 351,
    "images.170x.url": "https://i.pinimg.com/236x/7e/43/90/7e43902a193e47a0a2513343ff71af3f.jpg",
    "images.236x.width": 236,
    "images.236x.height": 351,
    "images.236x.url": "https://i.pinimg.com/236x/7e/43/90/7e43902a193e47a0a2513343ff71af3f.jpg",
    "images.474x.width": 474,
    "images.474x.height": 706,
    "images.474x.url": "https://i.pinimg.com/474x/7e/43/90/7e43902a193e47a0a2513343ff71af3f.jpg",
    "images.564x.width": 550,
    "images.564x.height": 820,
    "images.564x.url": "https://i.pinimg.com/564x/7e/43/90/7e43902a193e47a0a2513343ff71af3f.jpg",
    "images.736x.width": 550,
    "images.736x.height": 820,
    "images.736x.url": "https://i.pinimg.com/736x/7e/43/90/7e43902a193e47a0a2513343ff71af3f.jpg",
    "images.600x315.width": 550,
    "images.600x315.height": 315,
    "images.600x315.url": "https://i.pinimg.com/600x315/7e/43/90/7e43902a193e47a0a2513343ff71af3f.jpg",
    "images.orig.width": 550,
    "images.orig.height": 820,
    "images.orig.url": "https://i.pinimg.com/originals/7e/43/90/7e43902a193e47a0a2513343ff71af3f.jpg",
    "closeup_unified_description": " ",
    "aggregated_pin_data.node_id": "QWdncmVnYXRlZFBpbkRhdGE6NTA3OTk0ODEzODc0MjA2MzQwNA==",
    "aggregated_pin_data.is_stela": false,
    "aggregated_pin_data.comment_count": 0,
    "aggregated_pin_data.is_shop_the_look": false,
    "aggregated_pin_data.aggregated_stats.saves": 7812,
    "aggregated_pin_data.aggregated_stats.done": 0,
    "aggregated_pin_data.did_it_data.recommended_count": 0,
    "aggregated_pin_data.did_it_data.responses_count": 0,
    "aggregated_pin_data.did_it_data.images_count": 0,
    "aggregated_pin_data.did_it_data.recommend_scores.0.score": 1,
    "aggregated_pin_data.did_it_data.recommend_scores.0.count": 0,
    "aggregated_pin_data.did_it_data.recommend_scores.1.score": 0.5,
    "aggregated_pin_data.did_it_data.recommend_scores.1.count": 0,
    "aggregated_pin_data.did_it_data.recommend_scores.2.score": 0,
    "aggregated_pin_data.did_it_data.recommend_scores.2.count": 0,
    "aggregated_pin_data.did_it_data.videos_count": 0,
    "aggregated_pin_data.did_it_data.details_count": 0,
    "aggregated_pin_data.did_it_data.rating": -1,
    "aggregated_pin_data.did_it_data.user_count": 0,
    "aggregated_pin_data.did_it_data.type": "aggregateddiditdata",
    "aggregated_pin_data.id": "5079948138742063404",
    "created_at": "Sun, 09 Feb 2025 16:38:33 +0000",
    "reaction_counts.1": 252,
    "id": "563018698416962",
    "pin_join.annotations_with_links.Makeup And Beauty Products On Vanity.url": "/ideas/makeup-and-beauty-products-on-vanity/901351195112/",
    "pin_join.annotations_with_links.Makeup And Beauty Products On Vanity.name": "Makeup And Beauty Products On Vanity",
    "pin_join.annotations_with_links.Makeup And Beauty Products On Bed.url": "/ideas/makeup-and-beauty-products-on-bed/906437535995/",
    "pin_join.annotations_with_links.Makeup And Beauty Products On Bed.name": "Makeup And Beauty Products On Bed",
    "pin_join.annotations_with_links.Best Foundation For Combination Skin.url": "/ideas/best-foundation-for-combination-skin/951888652182/",
    "pin_join.annotations_with_links.Best Foundation For Combination Skin.name": "Best Foundation For Combination Skin",
    "pin_join.annotations_with_links.Dior Makeup And Skincare Collection.url": "/ideas/dior-makeup-and-skincare-collection/921254719148/",
    "pin_join.annotations_with_links.Dior Makeup And Skincare Collection.name": "Dior Makeup And Skincare Collection",
    "pin_join.annotations_with_links.Luxury Makeup Collection On Marble Surface.url": "/ideas/luxury-makeup-collection-on-marble-surface/924771084867/",
    "pin_join.annotations_with_links.Luxury Makeup Collection On Marble Surface.name": "Luxury Makeup Collection On Marble Surface",
    "pin_join.annotations_with_links.Assorted Makeup Products On Vanity.url": "/ideas/assorted-makeup-products-on-vanity/901685359862/",
    "pin_join.annotations_with_links.Assorted Makeup Products On Vanity.name": "Assorted Makeup Products On Vanity",
    "pin_join.annotations_with_links.Makeup Products Aesthetic Pink.url": "/ideas/makeup-products-aesthetic-pink/926951721704/",
    "pin_join.annotations_with_links.Makeup Products Aesthetic Pink.name": "Makeup Products Aesthetic Pink",
    "pin_join.annotations_with_links.Gold Dior Cosmetic Set.url": "/ideas/gold-dior-cosmetic-set/939280653767/",
    "pin_join.annotations_with_links.Gold Dior Cosmetic Set.name": "Gold Dior Cosmetic Set",
    "pin_join.annotations_with_links.Assorted Dior Makeup Products.url": "/ideas/assorted-dior-makeup-products/941672850728/",
    "pin_join.annotations_with_links.Assorted Dior Makeup Products.name": "Assorted Dior Makeup Products",
    "pin_join.canonical_pin.id": "563018698416962",
    "pin_join.visual_annotation.0": "Makeup And Beauty Products On Vanity",
    "pin_join.visual_annotation.1": "Makeup And Beauty Products On Bed",
    "pin_join.visual_annotation.2": "Best Foundation For Combination Skin",
    "pin_join.visual_annotation.3": "Dior Makeup And Skincare Collection",
    "pin_join.visual_annotation.4": "Luxury Makeup Collection On Marble Surface",
    "pin_join.visual_annotation.5": "Assorted Makeup Products On Vanity",
    "pin_join.visual_annotation.6": "Makeup Products Aesthetic Pink",
    "pin_join.visual_annotation.7": "Gold Dior Cosmetic Set",
    "pin_join.visual_annotation.8": "Assorted Dior Makeup Products",
    "description": " ",
    "type": "pin",
    "link_utm_applicable_and_replaced": 0,
    "domain": "Uploaded by user",
    "image_crop.min_y": 0,
    "image_crop.max_y": 1,
    "dominant_color": "#b4b0b1",
    "should_redirect_id_only_url_to_text_url": true,
    "comment_count": 0,
    "description_html": " ",
    "tracking_params": "CwABAAAAEDE0OTE4NDQ0ODg5NjczOTULAAcAAAAPdW5rbm93bi91bmtub3duAA",
    "seo_alt_text": "Makeup And Beauty Products On Vanity, Makeup And Beauty Products On Bed, Best Foundation For Combination Skin, Dior Makeup And Skincare Collection, Luxury Makeup Collection On Marble Surface, Assorted Makeup Products On Vanity, Makeup Products Aesthetic Pink, Gold Dior Cosmetic Set, Assorted Dior Makeup Products",
    "image_signature": "7e43902a193e47a0a2513343ff71af3f",
    "title": "",
    "repin_count": 1947,
    "board.node_id": "Qm9hcmQ6NTYzMDg3MzkyODI0Njkz",
    "board.image_cover_url": "https://i.pinimg.com/200x150/01/06/db/0106db6eb14d070ac4331d0fb23618e5.jpg",
    "board.type": "board",
    "board.followed_by_me": false,
    "board.map_id": "pinterest.ijz1714i",
    "board.layout": "default",
    "board.url": "/cindyplouzeau/aesthetic/",
    "board.is_collaborative": false,
    "board.description": "",
    "board.owner.node_id": "VXNlcjo1NjMxNTYxMTE4NjMyMjY=",
    "board.owner.domain_verified": false,
    "board.owner.is_default_image": false,
    "board.owner.is_verified_merchant": false,
    "board.owner.followed_by_me": false,
    "board.owner.type": "user",
    "board.owner.is_ads_only_profile": false,
    "board.owner.first_name": "Cindy",
    "board.owner.follower_count": 38,
    "board.owner.blocked_by_me": false,
    "board.owner.image_small_url": "https://i.pinimg.com/30x30_RS/c4/8e/de/c48ede160988ca712322e00514576f23.jpg",
    "board.owner.full_name": "Cindy Plouzeau",
    "board.owner.explicitly_followed_by_me": false,
    "board.owner.username": "cindyplouzeau",
    "board.owner.indexed": true,
    "board.owner.id": "563156111863226",
    "board.owner.image_medium_url": "https://i.pinimg.com/75x75_RS/c4/8e/de/c48ede160988ca712322e00514576f23.jpg",
    "board.is_ads_only": false,
    "board.collaborated_by_me": false,
    "board.name": "Aesthetic 🩷💖",
    "board.privacy": "public",
    "board.pin_thumbnail_urls.0": "https://i.pinimg.com/150x150/2c/8a/92/2c8a92476e92577b04c0d5154a0a80e2.jpg",
    "board.pin_thumbnail_urls.1": "https://i.pinimg.com/150x150/08/9b/c2/089bc28a7ca9900f29b75dec2ecbdc6f.jpg",
    "board.pin_thumbnail_urls.2": "https://i.pinimg.com/150x150/00/58/e6/0058e60c34337b2e9edba7e1efcf95d5.jpg",
    "board.pin_thumbnail_urls.3": "https://i.pinimg.com/150x150/52/da/d6/52dad634bd8f8be387bb81fe8adf5c3d.jpg",
    "board.pin_thumbnail_urls.4": "https://i.pinimg.com/150x150/04/61/85/046185813448c6aaef72e7f858438daa.jpg",
    "board.id": "563087392824693",
    "board.image_thumbnail_url": "https://i.pinimg.com/upload/563087392824693_board_thumbnail_2026-04-07-11-35-59_58588_60.jpg",
    "is_native": true,
    "pinner.node_id": "VXNlcjo1NjMxNTYxMTE4NjMyMjY=",
    "pinner.domain_verified": false,
    "pinner.is_default_image": false,
    "pinner.is_verified_merchant": false,
    "pinner.followed_by_me": false,
    "pinner.type": "user",
    "pinner.is_ads_only_profile": false,
    "pinner.first_name": "Cindy",
    "pinner.follower_count": 38,
    "pinner.blocked_by_me": false,
    "pinner.image_small_url": "https://i.pinimg.com/30x30_RS/c4/8e/de/c48ede160988ca712322e00514576f23.jpg",
    "pinner.full_name": "Cindy Plouzeau",
    "pinner.explicitly_followed_by_me": false,
    "pinner.username": "cindyplouzeau",
    "pinner.indexed": true,
    "pinner.id": "563156111863226",
    "pinner.image_medium_url": "https://i.pinimg.com/75x75_RS/c4/8e/de/c48ede160988ca712322e00514576f23.jpg",
    "grid_title": "",
    "closeup_attribution.node_id": "VXNlcjoxNTgwNDg0MDU1ODE1MTY3NzE=",
    "closeup_attribution.domain_verified": false,
    "closeup_attribution.is_default_image": false,
    "closeup_attribution.is_verified_merchant": false,
    "closeup_attribution.followed_by_me": false,
    "closeup_attribution.type": "user",
    "closeup_attribution.is_ads_only_profile": false,
    "closeup_attribution.first_name": "Eri the",
    "closeup_attribution.follower_count": 1491,
    "closeup_attribution.blocked_by_me": false,
    "closeup_attribution.image_small_url": "https://i.pinimg.com/30x30_RS/c0/91/dc/c091dcdcbff188633fc3eb58e98de6bd.jpg",
    "closeup_attribution.full_name": "Eri the cat",
    "closeup_attribution.explicitly_followed_by_me": false,
    "closeup_attribution.username": "eri_neko",
    "closeup_attribution.indexed": true,
    "closeup_attribution.id": "158048405581516771",
    "closeup_attribution.image_medium_url": "https://i.pinimg.com/75x75_RS/c0/91/dc/c091dcdcbff188633fc3eb58e98de6bd.jpg",
    "is_whitelisted_for_tried_it": true,
    "is_eligible_for_pdp": false,
    "is_playable": false,
    "is_eligible_for_related_products": false,
    "is_stale_product": false,
    "origin_pinner.node_id": "VXNlcjoxNTgwNDg0MDU1ODE1MTY3NzE=",
    "origin_pinner.domain_verified": false,
    "origin_pinner.is_default_image": false,
    "origin_pinner.is_verified_merchant": false,
    "origin_pinner.followed_by_me": false,
    "origin_pinner.type": "user",
    "origin_pinner.is_ads_only_profile": false,
    "origin_pinner.first_name": "Eri the",
    "origin_pinner.follower_count": 1491,
    "origin_pinner.blocked_by_me": false,
    "origin_pinner.image_small_url": "https://i.pinimg.com/30x30_RS/c0/91/dc/c091dcdcbff188633fc3eb58e98de6bd.jpg",
    "origin_pinner.full_name": "Eri the cat",
    "origin_pinner.explicitly_followed_by_me": false,
    "origin_pinner.username": "eri_neko",
    "origin_pinner.indexed": true,
    "origin_pinner.id": "158048405581516771",
    "origin_pinner.image_medium_url": "https://i.pinimg.com/75x75_RS/c0/91/dc/c091dcdcbff188633fc3eb58e98de6bd.jpg",
    "share_count": 73,
    "did_it_disabled": false,
    "is_oos_product": false,
    "privacy": "public",
    "promoted_is_removable": false,
    "image_medium_url": "https://i.pinimg.com/200x/7e/43/90/7e43902a193e47a0a2513343ff71af3f.jpg",
    "closeup_user_note": " ",
    "is_product_tagging_enabled_standard_pin": false,
    "seo_title": "19 Best Foundations for Combination Skin for a Balanced Makeup Look | Idee per il trucco, Prodotti per il trucco, Cosmetici nyx",
    "is_go_linkless": false,
    "is_unsafe_for_comments": false,
    "price_currency": "USD",
    "is_video": false,
    "category": "",
    "is_promotable": false,
    "is_hidden": false,
    "is_promoted": false,
    "seo_description": "We’ve selected the best foundations for combination skin, with a variety of finishes and coverage levels so you will definitely find something you’ll like!",
    "method": "uploaded",
    "via_pinner.node_id": "VXNlcjo2NDc0MTMwNjIyNzgzOTY5",
    "via_pinner.domain_verified": false,
    "via_pinner.is_default_image": true,
    "via_pinner.is_verified_merchant": false,
    "via_pinner.followed_by_me": false,
    "via_pinner.type": "user",
    "via_pinner.is_ads_only_profile": false,
    "via_pinner.first_name": "i",
    "via_pinner.follower_count": 14,
    "via_pinner.blocked_by_me": false,
    "via_pinner.image_small_url": "https://s.pinimg.com/images/user/default_30.png",
    "via_pinner.full_name": "bambubbs.🍋",
    "via_pinner.explicitly_followed_by_me": false,
    "via_pinner.username": "ibboo30",
    "via_pinner.indexed": true,
    "via_pinner.id": "6474130622783969",
    "via_pinner.image_medium_url": "https://s.pinimg.com/images/user/default_75.png",
    "is_quick_promotable_by_pinner": false,
    "is_repin": true,
    "comments_disabled": true,
    "has_been_boost_promoted": false,
    "price_value": 0,
    "should_open_in_stream": false,
    "ships_to_user_country": false,
    "shopping_rec_disabled": false,
    "can_delete_did_it_and_comments": false,
    "unified_user_note": "",
    "done_by_me": false,
    "is_quick_promotable": false,
    "is_eligible_for_aggregated_comments": true,
    "is_eligible_for_brand_catalog": false,
    "has_required_attribution_provider": false,
    "url": "https://www.pinterest.com/pin/563018698416962/",
    "like_count": 252,
    "owner.node_id": "VXNlcjo1NjMxNTYxMTE4NjMyMjY=",
    "owner.domain_verified": false,
    "owner.is_default_image": false,
    "owner.is_verified_merchant": false,
    "owner.followed_by_me": false,
    "owner.type": "user",
    "owner.is_ads_only_profile": false,
    "owner.first_name": "Cindy",
    "owner.follower_count": 38,
    "owner.blocked_by_me": false,
    "owner.image_small_url": "https://i.pinimg.com/30x30_RS/c4/8e/de/c48ede160988ca712322e00514576f23.jpg",
    "owner.full_name": "Cindy Plouzeau",
    "owner.explicitly_followed_by_me": false,
    "owner.username": "cindyplouzeau",
    "owner.indexed": true,
    "owner.id": "563156111863226",
    "owner.image_medium_url": "https://i.pinimg.com/75x75_RS/c4/8e/de/c48ede160988ca712322e00514576f23.jpg"
}
```

#### Reading these samples

- **`type`**: Always `"pin"` for pin dataset rows (search, profile, board, ideas hub, or direct pin URL).
- **`id`**, **`url`**: Pin id and canonical pin URL.
- **`pinner.*`**, **`owner.*`**, **`board.owner.*`**, **`native_creator.*`**, **`via_pinner.*`**, **`closeup_attribution.*`**, etc.: User-shaped fields; with **Include only user info**, profile fields such as **`follower_count`** are filled where the API returns them.
- **`comments.N.*`**: Present when **Include comments** is on — `content`, `name`, profile `url`, `created_at`, counts, optional `avatar`.
- **`aggregated_pin_data.*`**: Aggregated pin node (saves, comment\_count at aggregated level, etc.).
- **`images.*`**: Multiple image size buckets (`60x60`, `236x`, `orig`, …).
- **Ideas / listing-only fields**: Some grids expose extra keys (e.g. **`seo_url`**, **`like_count`**) that may be absent on rows from a bare **pin** URL; presence varies by source and Pinterest’s payload.

With **flattened output** off, the same data is stored as **nested** JSON (objects and arrays) instead of dot keys.

### Output fields (flattened pin rows — high level)

This section applies to both **flattened** samples above (direct pin + ideas hub). Pinterest may add or omit fields over time; treat unknown keys as optional.

#### Pin core

- **`node_id`**, **`id`**: Internal / numeric identifiers.
- **`type`**: `"pin"`.
- **`url`**: Full HTTPS URL of the pin.
- **`title`**, **`description`**, **`closeup_unified_description`**, **`seo_title`**, **`seo_description`**: Text and SEO-oriented fields (may be empty).
- **`created_at`**: Pin creation timestamp string from Pinterest.
- **`repin_count`**, **`share_count`**, **`comment_count`**, **`reaction_counts.*`**: Engagement metrics where exposed on the listing.
- **`image_medium_url`**, **`image_signature`**, **`dominant_color`**: Visual metadata.
- **`images.<size>.width`**, **`images.<size>.height`**, **`images.<size>.url`**: Per-size image assets.

#### Aggregated pin data

- **`aggregated_pin_data.id`**, **`aggregated_pin_data.node_id`**: Aggregated node identifiers (used for comments API).
- **`aggregated_pin_data.aggregated_stats.*`**: e.g. saves / done counts.
- **`aggregated_pin_data.comment_count`**: Comment count on the aggregated node (may differ from listing `comment_count`).
- **`aggregated_pin_data.did_it_data.*`**: “Tried it” style engagement breakdown when present.

#### Board

- **`board.id`**, **`board.name`**, **`board.url`**, **`board.privacy`**: Board identity and visibility.
- **`board.pin_thumbnail_urls.N`**: Sample thumbnails from the board.
- **`board.owner.*`**: Board owner user fields (enriched when user info is enabled).

#### Users (pinner, owner, attribution, etc.)

Flattened keys share the same suffixes: **`*.username`**, **`*.full_name`**, **`*.id`**, **`*.image_small_url`**, **`*.follower_count`**, **`*.indexed`**, etc., under prefixes like **`pinner`**, **`owner`**, **`closeup_unified_attribution`**, **`native_creator`**, **`via_pinner`**.

#### Comments (when enabled)

- **`comments.N.id`**: Comment id.
- **`comments.N.content`**: Text body.
- **`comments.N.name`**: Commenter display/username-style label.
- **`comments.N.url`**: Commenter profile URL on Pinterest.
- **`comments.N.created_at`**: Timestamp when provided.
- **`comments.N.like_count`**, **`reply_count`**, **`helpful_count`**: Interaction counts.
- **`comments.N.avatar`**: Present for some commenters.

#### Other

- **`pin_join.visual_annotation.N`**: Topic-style labels.
- **`pin_join.annotations_with_links.<label>.url`** / **`.name`**: Linked idea hubs.
- **`privacy`**, **`is_repin`**, **`comments_disabled`**, **`is_hidden`**: Flags and moderation-related fields.
- **`pinner_follower_count`**: Convenience duplicate of pinner follower count when enrichment is on.

#### Product / shopping (product pins only)

- **`product.is_product`**, **`product.price`**, **`product.currency`**, **`product.display_price`**
- **`product.availability`**, **`product.brand`**, **`product.merchant_domain`**
- **`product.product_name`**, **`product.product_link`**, **`product.rating`**, **`product.rating_count`**

#### Enrichment (optional — billed via the Additional data event)

- **`sentiment`** — `{ label, score, confidence }` when **Add sentiment analysis** is enabled.
- **`content_category`** — `{ label, confidence }` (e.g. Home Decor, Fashion & Style, Food & Drink, Beauty) when **Add content category** is enabled.

***

### Explore more scrapers

If this actor is useful, see more tools at [memo23's Apify profile](https://apify.com/memo23).

### Support

- For issues or feature requests, use the **Issues** tab on this actor in the Apify Console.
- Contact:
  - Website: <https://muhamed-didovic.github.io/>
  - Email: <muhamed.didovic@gmail.com>

### Additional services

- Customization or full dataset delivery: <muhamed.didovic@gmail.com>
- API-style usage questions: <muhamed.didovic@gmail.com>

### What makes this richer than other Pinterest scrapers

| Capability | Most competitors | This actor |
|---|---|---|
| Pins / search / boards / profiles | ✅ | ✅ |
| **Ideas hubs** (`/ideas/…`) | ✗ | ✅ |
| **Per-pin comments** | rarely | ✅ |
| Product / price / merchant fields | some | ✅ |
| **Sentiment + content-category tags** | leader only | ✅ (optional) |
| One bundled actor vs per-type SKUs | ✗ | ✅ |
| Per-pin failure isolation (no run-killing crashes) | varies | ✅ |

### 🤖 For AI Agents & LLM Apps

Compact reference for AI agents calling this actor via the [Apify MCP server](https://mcp.apify.com) or the Apify API (actor: `memo23/pinterest-scraper`).

**Purpose:** Scrapes Pinterest pins, boards, profiles, ideas hubs, and search results — one row per pin with engagement counts, images, board/pinner data, and optional comments, product, and sentiment fields; also covers `/ideas/` hubs that most competitors skip.

**Minimal input:**

```json
{
  "searchQueries": ["nails"],
  "searchScope": "pins",
  "maxItems": 50
}
```

URL mode instead: `{ "startUrls": ["https://www.pinterest.com/pin/1829656094716568/"], "maxItems": 50 }` — when `startUrls` is set, search queries and the legacy keyword are ignored (URLs take priority).

**Output:** one row per pin — node\_id, id, type, url, title, description, created\_at, repin\_count, share\_count, comment\_count, reaction\_counts, images {size: width, height, url}, aggregated\_pin\_data, board {id, name, url, privacy, owner}, pinner/owner {username, full\_name, follower\_count}, comments {id, content, name, url, created\_at, like\_count}, product {is\_product, price, currency, brand, merchant\_domain, product\_link, rating}, pin\_join, sentiment {label, score, confidence}, content\_category {label, confidence}.

**Behaviors an agent should know:**

- `startUrls` override search — set one mode, not both; supported URL shapes are pin, board, profile, ideas hub, and search (no `pin.it` or board sections).
- Always set `maxItems` (default 10000) — it is one shared budget across all URLs/queries.
- `searchScope` selects the search tab: pins (default), videos, boards, or users. The boards and users tabs open the top matching boards / profiles and scrape their pins, so the output is pins on every tab.
- `includeComments` and `includeOnlyUserInfo` add extra requests per pin; `flattenedOutput` gives one-level dot-keyed rows (CSV-friendly) instead of nested JSON.
- Proxy is built-in residential at no extra cost — leave `proxy` empty unless overriding.
- Pay-per-event billing (see the Pricing tab); the optional `sentiment` and `content_category` enrichments are billed separately via the Additional data event.

### ⚠️ Disclaimer

This scraper collects only **publicly available** Pinterest data — no login, no private content, and no personal data behind authentication. Use it in compliance with Pinterest's Terms of Service and the laws applicable in your jurisdiction (including GDPR/CCPA where relevant). You are responsible for how the collected data is used.

### SEO Keywords

pinterest scraper, scrape pinterest pins, pinterest search scraper, pinterest board scraper, pinterest profile scraper, pinterest ideas scraper, pinterest comments scraper, pinterest product data, pinterest price scraper, pinterest trends, pinterest marketing data, pinterest json export, pinterest csv export, no-login pinterest api

# Actor input Schema

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

**Supported paths:** ideas `/ideas/slug/id/`, pin `/pin/id/` or `/pin/name--id/`, profile `/{user}/`, board `/{user}/{board}/`, search `/search/{pins|videos|boards|users}/…` (extra query params from a copied URL are kept; the boards and users tabs scrape the pins inside the boards / profiles they match). **Not supported:** `pin.it`, board sections, hosts outside `*.pinterest.com`. Via API, both plain strings and `{ "url": "…" }` objects are accepted. Unsupported entries are skipped with a warning (the run fails only if none are usable). All URLs share one **max items** budget. Leave empty to use keyword search instead.

## `flattenedOutput` (type: `boolean`):

If true, each pin is deep-flattened to one level with dot-separated keys (e.g. `board.owner.username`, `comments.0.content`). If false, the full merged PinResource + listing payload is stored.

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

Each non-empty line becomes its own search at `https://www.pinterest.com/search/{Search type}/?q=…` using **Search type** below. Example lines: `nails`, `spring nail art`. All queries share one **max items** cap. Unused when **Start URLs** is set.

## `searchScope` (type: `string`):

Which Pinterest search tab to use when scraping from **Search queries** (or legacy keyword). **All pins** is the default. **Videos** returns video pins. **Boards** and **Profiles** find matching boards / accounts and then scrape the pins inside them, so every tab outputs pins — enough top boards or profiles are opened to fill **max items**.

## `searchKeyword` (type: `string`):

Single search term if **Start URLs** and **Search queries** are empty. Same as adding one entry to **Search queries**. Prefer **Search queries** for new setups.

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

Fetches comments per pin via `UnifiedCommentsResource` (same internal API as the Pinterest web app). Adds a `comments` array to each pin.

## `includeOnlyUserInfo` (type: `boolean`):

Loads public profile data for the pinner (and board owner when different) via `UserResource` and merges follower counts, avatars, and names into the pin payload.

## `includeSentiment` (type: `boolean`):

Adds a `sentiment` object (label, score, confidence) to each pin from its title/description/alt text. Heuristic — no AI/API call, no extra latency. Billed per pin via the **Additional data** event.

## `includeContentCategory` (type: `boolean`):

Adds a `content_category` object (label, confidence) to each pin — e.g. Home Decor, Fashion & Style, Food & Drink, Beauty — from its text and domain. Heuristic — no AI/API call. Billed per pin via the **Additional data** event.

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

Maximum number of pins to collect (enqueues across search pages until this cap or no more results).

## `maxSearchPages` (type: `integer`):

Maximum number of **search** API pages to crawl (e.g. **1** = first page only). Leave empty for no page limit (still limited by max items).

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

Maximum concurrent requests.

## `minConcurrency` (type: `integer`):

Minimum concurrent requests.

## `maxRequestRetries` (type: `integer`):

Retries per request before failure.

## `proxy` (type: `object`):

Leave empty — the actor already routes all traffic through its own built-in residential proxy at no extra cost to you. Only set this if you want to use your own proxies.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.pinterest.com/ideas/beauty/935541271955/",
    "https://www.pinterest.com/pin/1829656094716568/",
    "https://www.pinterest.com/pin/uitas--1829656094716568/",
    "https://www.pinterest.com/dudadelsanto/",
    "https://www.pinterest.com/dudadelsanto/nail-inspo/",
    "https://www.pinterest.com/search/pins/?q=nail+art",
    "https://www.pinterest.com/search/pins/?q=Valentine%E2%80%99s%20Nail%20Art&rs=hub_page",
    "https://www.pinterest.com/search/videos/?q=tutorial",
    "https://www.pinterest.com/search/boards/?q=nails",
    "https://www.pinterest.com/search/users/?q=jane"
  ],
  "flattenedOutput": false,
  "searchQueries": [
    "nails"
  ],
  "searchScope": "pins",
  "includeComments": false,
  "includeOnlyUserInfo": false,
  "includeSentiment": false,
  "includeContentCategory": false,
  "maxItems": 10000,
  "maxConcurrency": 10,
  "minConcurrency": 1,
  "maxRequestRetries": 3
}
```

# Actor output Schema

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

One row per pin with title, description, destination link and domain, repin/share/comment counts, image URLs, board and pinner.

# 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 = {
    "startUrls": [
        "https://www.pinterest.com/ideas/beauty/935541271955/",
        "https://www.pinterest.com/pin/1829656094716568/",
        "https://www.pinterest.com/pin/uitas--1829656094716568/",
        "https://www.pinterest.com/dudadelsanto/",
        "https://www.pinterest.com/dudadelsanto/nail-inspo/",
        "https://www.pinterest.com/search/pins/?q=nail+art",
        "https://www.pinterest.com/search/pins/?q=Valentine%E2%80%99s%20Nail%20Art&rs=hub_page",
        "https://www.pinterest.com/search/videos/?q=tutorial",
        "https://www.pinterest.com/search/boards/?q=nails",
        "https://www.pinterest.com/search/users/?q=jane"
    ],
    "searchQueries": [
        "nails"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/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 = {
    "startUrls": [
        "https://www.pinterest.com/ideas/beauty/935541271955/",
        "https://www.pinterest.com/pin/1829656094716568/",
        "https://www.pinterest.com/pin/uitas--1829656094716568/",
        "https://www.pinterest.com/dudadelsanto/",
        "https://www.pinterest.com/dudadelsanto/nail-inspo/",
        "https://www.pinterest.com/search/pins/?q=nail+art",
        "https://www.pinterest.com/search/pins/?q=Valentine%E2%80%99s%20Nail%20Art&rs=hub_page",
        "https://www.pinterest.com/search/videos/?q=tutorial",
        "https://www.pinterest.com/search/boards/?q=nails",
        "https://www.pinterest.com/search/users/?q=jane",
    ],
    "searchQueries": ["nails"],
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/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 '{
  "startUrls": [
    "https://www.pinterest.com/ideas/beauty/935541271955/",
    "https://www.pinterest.com/pin/1829656094716568/",
    "https://www.pinterest.com/pin/uitas--1829656094716568/",
    "https://www.pinterest.com/dudadelsanto/",
    "https://www.pinterest.com/dudadelsanto/nail-inspo/",
    "https://www.pinterest.com/search/pins/?q=nail+art",
    "https://www.pinterest.com/search/pins/?q=Valentine%E2%80%99s%20Nail%20Art&rs=hub_page",
    "https://www.pinterest.com/search/videos/?q=tutorial",
    "https://www.pinterest.com/search/boards/?q=nails",
    "https://www.pinterest.com/search/users/?q=jane"
  ],
  "searchQueries": [
    "nails"
  ]
}' |
apify call memo23/pinterest-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,memo23/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/3ncb3IgQJZkERvPIU/builds/aliOaxOb21hh3a1J8/openapi.json
