# Pinterest \[Only $1.9💰] PIN | Ideas | Profile | Board | Scraper (`memo23/pinterest-scraper`) Actor

\[Only $1.9💰] Scrape Pinterest pins, boards, profiles and search into JSON or CSV. Titles, descriptions, images/video, creator and board info, links, engagement. Optional comments and profile fields. URLs or keywords. Great for trend research, content planning and creator discovery.

- **URL**: https://apify.com/memo23/pinterest-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Social media, Lead generation, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.90 / 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

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

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Pinterest Scraper

**Unlock Pinterest pin data at scale** — scrape pins from search, profiles, boards, ideas hubs, and direct pin URLs using the same JSON resources the Pinterest web app uses. Optional **flattened** rows for spreadsheets, plus **comments** and **profile enrichment** when you need full context.

*"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. |
| `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.

***

### 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>

# 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). **Not supported:** `pin.it`, board sections, hosts outside `*.pinterest.com`. 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 and matches normal pin grid scraping. Other tabs use the same API but may return fewer pin-shaped rows.

## `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.

## `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`):

Apify proxy groups and connection settings.

## 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,
  "maxItems": 10000,
  "maxConcurrency": 10,
  "minConcurrency": 1,
  "maxRequestRetries": 3,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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"
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// 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"],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# 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("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

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

```

## CLI example

```bash
echo '{
  "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"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call memo23/pinterest-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Pinterest [Only $1.9💰] PIN | Ideas | Profile | Board | Scraper",
        "description": "[Only $1.9💰] Scrape Pinterest pins, boards, profiles and search into JSON or CSV. Titles, descriptions, images/video, creator and board info, links, engagement. Optional comments and profile fields. URLs or keywords. Great for trend research, content planning and creator discovery.",
        "version": "0.0",
        "x-build-id": "tbZMUKMaIe6X1bZUu"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~pinterest-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-pinterest-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/memo23~pinterest-scraper/runs": {
            "post": {
                "operationId": "runs-sync-memo23-pinterest-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/memo23~pinterest-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-pinterest-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "**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). **Not supported:** `pin.it`, board sections, hosts outside `*.pinterest.com`. All URLs share one **max items** budget. Leave empty to use keyword search instead.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "flattenedOutput": {
                        "title": "Flattened output",
                        "type": "boolean",
                        "description": "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.",
                        "default": false
                    },
                    "searchQueries": {
                        "title": "Search queries",
                        "type": "array",
                        "description": "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.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchScope": {
                        "title": "Search type",
                        "enum": [
                            "pins",
                            "videos",
                            "boards",
                            "users"
                        ],
                        "type": "string",
                        "description": "Which Pinterest search tab to use when scraping from **Search queries** (or legacy keyword). **All pins** is the default and matches normal pin grid scraping. Other tabs use the same API but may return fewer pin-shaped rows.",
                        "default": "pins"
                    },
                    "searchKeyword": {
                        "title": "Search keyword (legacy)",
                        "type": "string",
                        "description": "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": {
                        "title": "Include comments",
                        "type": "boolean",
                        "description": "Fetches comments per pin via `UnifiedCommentsResource` (same internal API as the Pinterest web app). Adds a `comments` array to each pin.",
                        "default": false
                    },
                    "includeOnlyUserInfo": {
                        "title": "Include only user info",
                        "type": "boolean",
                        "description": "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.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Maximum number of items",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of pins to collect (enqueues across search pages until this cap or no more results).",
                        "default": 10000
                    },
                    "maxSearchPages": {
                        "title": "List end page",
                        "minimum": 1,
                        "type": "integer",
                        "description": "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": {
                        "title": "Max concurrency",
                        "type": "integer",
                        "description": "Maximum concurrent requests.",
                        "default": 10
                    },
                    "minConcurrency": {
                        "title": "Min concurrency",
                        "type": "integer",
                        "description": "Minimum concurrent requests.",
                        "default": 1
                    },
                    "maxRequestRetries": {
                        "title": "Max request retries",
                        "type": "integer",
                        "description": "Retries per request before failure.",
                        "default": 3
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify proxy groups and connection settings.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
