# Pinterest Scraper (`happitap/pinterest-scraper`) Actor

Fast and cost-effective Pinterest scraper to extract pins, boards, user profiles, search results, comments, images, videos, and comprehensive engagement metrics. Perfect for social media analytics, competitor research, and content strategy.

- **URL**: https://apify.com/happitap/pinterest-scraper.md
- **Developed by:** [HappiTap](https://apify.com/happitap) (community)
- **Categories:** Social media, Developer tools, Other
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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 - Extract Pins, Boards, Users & Search Results

Fast and cost-effective Pinterest scraper to extract pins, boards, user profiles, search results, comments, images, videos, and comprehensive engagement metrics. Perfect for social media analytics, competitor research, and content strategy.

### 🚀 Key Features

- **All Content Types**: Extract pins, boards, user profiles, ideas, and collections
- **Search Capability**: Search Pinterest by keywords and extract results
- **Rich Media**: Get high-resolution images, videos, and thumbnails
- **Engagement Metrics**: Repins, likes, comments, saves, and follower counts
- **User Profiles**: Complete profile data with follower/following stats
- **Comments Extraction**: Optional comment scraping for engagement analysis
- **Fast & Efficient**: Optimized for speed with ~100 items per minute
- **Cost-Effective**: Pay-per-event pricing ($0.0005 per item)
- **Easy Integration**: Export to JSON, CSV, Excel, or integrate with APIs

### 📊 What Data Can You Extract?

#### Pin Details
- Pin ID and URL
- Title and description
- Image URLs (multiple resolutions: 236x, 474x, 564x, 736x, original)
- Video URLs for video pins
- Repin count (saves)
- Like count
- Comment count
- Creation date
- Board information
- Pinner/owner details
- Dominant color
- Alt text
- External link/source URL

#### User Profiles
- User ID and username
- Full name and bio
- Follower count
- Following count
- Board count
- Pin count
- Profile image URLs
- Website URL
- Location
- Verified status

#### Board Information
- Board ID and name
- Board URL
- Owner information
- Pin count
- Follower count
- Privacy status
- Category
- Description

#### Search Results
- Pins matching search query
- Users matching search query
- Boards matching search query
- Related searches
- Trending topics

#### Comments (Optional)
- Comment text
- Commenter information
- Comment timestamp
- Reply threads

### 🎯 Use Cases

- **Social Media Marketing**: Analyze trending pins and popular content
- **Competitor Analysis**: Monitor competitor boards and engagement
- **Content Strategy**: Discover high-performing content ideas
- **Influencer Research**: Find and analyze Pinterest influencers
- **Market Research**: Understand consumer interests and trends
- **E-commerce Intelligence**: Track product pins and shopping trends
- **SEO Research**: Analyze Pinterest SEO and keyword performance
- **Brand Monitoring**: Track brand mentions and user-generated content
- **Trend Analysis**: Identify emerging trends and viral content
- **Lead Generation**: Find potential customers and partners

### 🔧 How to Use

#### Basic Usage

1. **Add Start URLs**: Provide Pinterest URLs to scrape
   - Pin details: `https://www.pinterest.com/pin/123456789/`
   - User profile: `https://www.pinterest.com/username/`
   - Board: `https://www.pinterest.com/username/board-name/`
   - Search: `https://www.pinterest.com/search/pins/?q=keyword`
   - Ideas: `https://www.pinterest.com/ideas/category/`

2. **Or Use Search**: Enter keywords to search Pinterest
   - Example: "interior design", "fashion trends", "recipe ideas"

3. **Configure Options**:
   - Set `maxItems` to limit total items extracted
   - Set `endPage` to control pagination depth
   - Enable `includeComments` for comment data
   - Enable `includeUserInfoOnly` for faster profile scraping

4. **Run the Actor**: Click "Start" and wait for results

#### Input Parameters

```json
{
  "startUrls": [
    { "url": "https://www.pinterest.com/pin/1054827543951238554/" },
    { "url": "https://www.pinterest.com/username/" }
  ],
  "search": "home decor",
  "maxItems": 100,
  "endPage": 5,
  "includeComments": false,
  "includeUserInfoOnly": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
````

#### Input Fields Explained

- **startUrls** (Array): List of Pinterest URLs to scrape. Supports pins, users, boards, searches, and ideas.
- **search** (String): Keyword to search on Pinterest. Leave empty if using only startUrls.
- **maxItems** (Number): Maximum items to extract. Set to 0 for unlimited. Default: 100.
- **endPage** (Number): Maximum pages to scrape per URL. Set to 0 for infinite. Default: 5.
- **includeComments** (Boolean): Extract comments from pins. Increases runtime. Default: false.
- **includeUserInfoOnly** (Boolean): Extract only user info without pins/boards. Faster. Default: false.
- **proxyConfiguration** (Object): Proxy settings. Required for reliable scraping. Residential proxies recommended.
- **extendOutputFunction** (String): Custom JavaScript function to extend output data.
- **customMapFunction** (String): Custom JavaScript function to transform each item.

### 📤 Output Format

#### Pin Output Example

```json
{
  "type": "pin",
  "id": "1096556209247124248",
  "url": "https://www.pinterest.com/pin/1096556209247124248/",
  "description": "Beautiful home decor ideas for modern living",
  "title": "Modern Home Decor",
  "link": "https://example.com/product",
  "images": {
    "236x": {
      "url": "https://i.pinimg.com/236x/...",
      "width": 236,
      "height": 338
    },
    "474x": {
      "url": "https://i.pinimg.com/474x/...",
      "width": 474,
      "height": 679
    },
    "orig": {
      "url": "https://i.pinimg.com/originals/...",
      "width": 640,
      "height": 918
    }
  },
  "videos": null,
  "repin_count": 2289,
  "like_count": 41,
  "comment_count": 4,
  "created_at": "Sat, 15 Oct 2022 14:56:20 +0000",
  "board": {
    "id": "board123",
    "name": "Home Inspiration",
    "url": "/username/home-inspiration/"
  },
  "pinner": {
    "id": "user123",
    "username": "homedesigner",
    "full_name": "Home Designer",
    "follower_count": 4885
  },
  "dominant_color": "#626862"
}
```

#### User Profile Output Example

```json
{
  "type": "user",
  "id": "user123456",
  "username": "fashionista",
  "full_name": "Fashion Influencer",
  "follower_count": 125000,
  "following_count": 850,
  "board_count": 42,
  "pin_count": 3200,
  "image_medium_url": "https://i.pinimg.com/75x75_RS/...",
  "profile_url": "https://www.pinterest.com/fashionista/",
  "about": "Fashion blogger and style enthusiast",
  "location": "New York, NY",
  "website_url": "https://example.com",
  "verified_identity": {
    "verified": true,
    "type": "merchant"
  }
}
```

### 💡 Tips for Best Results

1. **Use Residential Proxies**: Pinterest blocks datacenter IPs. Use residential proxies for best results.
2. **Set Reasonable Limits**: Use `maxItems` and `endPage` to control costs and runtime.
3. **Disable Comments Initially**: Comments increase runtime significantly. Enable only when needed.
4. **User Info Only Mode**: For profile scraping, enable `includeUserInfoOnly` for 10x faster results.
5. **Batch Processing**: Process multiple URLs in one run for better efficiency.
6. **Monitor Rate Limits**: Pinterest may rate-limit aggressive scraping. Adjust concurrency if needed.
7. **Export Regularly**: Download data periodically for large scraping jobs.

### 🔗 Integration Options

- **API**: Use Apify API to integrate with your applications
- **Webhooks**: Get notified when scraping completes
- **Zapier**: Automate workflows with 5000+ apps
- **Make (Integromat)**: Build complex automation scenarios
- **Google Sheets**: Export directly to spreadsheets
- **n8n**: Create custom automation workflows
- **Power BI**: Connect for data visualization
- **Tableau**: Import for advanced analytics

### ⚡ Performance & Pricing

- **Speed**: ~50-100 items per minute
- **Pricing Model**: Pay-per-event ($0.0005 per item extracted)
- **Cost Example**: 1,000 items = $0.50 + compute costs
- **Transparent Billing**: Only pay for successfully extracted items
- **Reliability**: Built-in retry logic and error handling
- **Scalability**: Handle thousands of pins per run

#### Pricing Details

This Actor uses a **pay-per-event** pricing model. You are charged $0.0005 (0.05 cents) for each item successfully extracted (pin, board, or user profile), plus standard Apify compute costs.

**Example Costs:**

- 100 items: $0.05 + compute (~$0.03) = **~$0.08 total**
- 500 items: $0.25 + compute (~$0.10) = **~$0.35 total**
- 1,000 items: $0.50 + compute (~$0.20) = **~$0.70 total**
- 5,000 items: $2.50 + compute (~$0.80) = **~$3.30 total**

*Note: Compute costs depend on memory allocation, runtime, and proxy usage. Residential proxies add ~$0.50-1.00 per 1GB of data transferred.*

#### Compute Unit Consumption

The actor is optimized for minimal compute usage:

- **Without comments**: ~0.01-0.02 CU per 100 items
- **With comments**: ~0.03-0.05 CU per 100 items (varies by comment count)
- **User profiles only**: ~0.005-0.01 CU per 100 profiles

### 🛡️ Legal & Compliance

This scraper extracts data from Pinterest's **public** pages that are accessible without authentication. The data is publicly available and intended for research and analysis purposes.

**Important Notes:**

- Only scrapes publicly available data
- No authentication required
- Respects Pinterest's rate limits
- Uses proxies to avoid IP blocking
- Complies with Pinterest's Terms of Service for public data
- Does not access private boards or pins
- Does not perform any actions (likes, repins, follows)

**Recommended Use:**

- Market research and analysis
- Competitive intelligence
- Content strategy development
- Academic research
- Business analytics

**Not Recommended For:**

- Spamming or harassment
- Unauthorized data collection
- Violating user privacy
- Commercial use without proper rights

### ❓ FAQ

#### How many items can I scrape?

You can scrape as many items as available. Use `maxItems` to control limits. Most boards have 50-5,000 pins. Popular users may have 10,000+ pins.

#### What URL formats are supported?

- Pin details: `https://www.pinterest.com/pin/[ID]/`
- User profiles: `https://www.pinterest.com/[username]/`
- Boards: `https://www.pinterest.com/[username]/[board-name]/`
- Search: `https://www.pinterest.com/search/pins/?q=[query]`
- Ideas: `https://www.pinterest.com/ideas/[category]/`

#### Do I need proxies?

Yes, Pinterest requires proxies for reliable scraping. Residential proxies are strongly recommended for best results and to avoid blocking.

#### Can I scrape private boards?

No, this scraper only accesses publicly available content. Private boards require authentication and are not supported.

#### How fast is the scraper?

Speed depends on configuration:

- Pins only: ~80-100 items/minute
- With comments: ~30-50 items/minute
- User profiles only: ~100-150 profiles/minute

#### Can I scrape multiple users at once?

Yes! Add multiple user URLs to `startUrls` array. Each will be scraped separately.

#### How often is Pinterest data updated?

Pinterest data is real-time. The scraper fetches current data at the time of execution.

#### What if scraping fails?

The actor has built-in retry logic. If requests fail, check:

1. Proxy configuration is correct
2. URLs are valid and public
3. Pinterest is not experiencing downtime
4. Rate limits are not exceeded

#### Can I customize the output?

Yes! Use `extendOutputFunction` to add custom fields or `customMapFunction` to transform data.

#### How do I get only user information?

Set `includeUserInfoOnly: true` to extract only user profile data without pins or boards. This is much faster.

#### Does it work with Pinterest Business accounts?

Yes, it works with all public Pinterest accounts including business accounts.

### 🐛 Bug Reports & Feature Requests

Found a bug or have a feature request? Please open an issue on our GitHub repository or contact support.

### 📞 Support

Need help? Contact us:

- Email: support@example.com
- GitHub Issues: [Report a bug](https://github.com/yourusername/pinterest-scraper/issues)
- Apify Console: Use the "Issues" tab

### 🔄 Changelog

#### Version 1.0.0 (2026-01-20)

- Initial release
- Support for pins, boards, users, and search
- Pay-per-event pricing model
- Residential proxy support
- Custom function support
- Comment extraction (optional)
- High-performance optimization

### 📝 License

Apache-2.0

***

**Made with ❤️ for the Pinterest community**

*This actor is not affiliated with, endorsed by, or sponsored by Pinterest, Inc.*

# Actor input Schema

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

List of Pinterest URLs to scrape. Supports: pin details, user profiles, boards, ideas, collections, and search results. Format: Array of URL objects. Example: \[{'url': 'https://www.pinterest.com/pin/123456789/'}]. Why needed: Defines what content to extract from Pinterest.

## `search` (type: `string`):

Keyword to search on Pinterest. Searches across pins, boards, and users. Format: String (e.g., 'home decor', 'fashion ideas'). Why needed: Enables searching Pinterest for specific topics or keywords. Leave empty if using startUrls only.

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

Maximum number of items to scrape. Limits total pins, boards, or profiles extracted. Format: Number (e.g., 100, 500). Why needed: Controls scraping volume and costs. Set to 0 for unlimited scraping.

## `endPage` (type: `integer`):

Maximum number of pages to scrape per URL or search query. Each page typically contains 20-50 items. Format: Number (e.g., 1, 5, 10). Why needed: Controls pagination depth. Set to 0 for infinite scrolling until maxItems is reached.

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

Extract all comments from pins. Increases scraping time and resource usage proportionally to comment count. Format: Boolean (true/false). Why needed: Provides engagement data and user feedback on pins. Disable for faster scraping.

## `includeUserInfoOnly` (type: `boolean`):

Extract only user profile information without pins or boards. Faster and uses fewer resources. Format: Boolean (true/false). Why needed: Useful for building user databases or follower lists without content details.

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

Proxy settings to avoid IP blocking. Pinterest requires proxies for reliable scraping. Residential proxies recommended for best results. Format: Proxy configuration object. Why needed: Pinterest blocks direct scraping; proxies ensure successful data extraction.

## `extendOutputFunction` (type: `string`):

Custom JavaScript function to extend or modify scraped data. Function receives the data object and should return modified object. Format: JavaScript function as string. Example: '(data) => { data.custom = 'value'; return data; }'. Why needed: Allows custom data transformations and calculations.

## `customMapFunction` (type: `string`):

Custom JavaScript function to transform each item before saving. Function receives item object and should return transformed object. Format: JavaScript function as string. Why needed: Enables custom filtering, formatting, or enrichment of scraped data.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.pinterest.com/pin/1054827543951238554/"
    }
  ],
  "search": "interior design",
  "maxItems": 100,
  "endPage": 5,
  "includeComments": false,
  "includeUserInfoOnly": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "extendOutputFunction": "(data) => {\n    // Modify data here\n    return data;\n}",
  "customMapFunction": "(item) => {\n    // Transform item here\n    return item;\n}"
}
```

# Actor output Schema

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

Type of Pinterest item (pin, user, board)

## `id` (type: `string`):

Unique identifier for the Pinterest item

## `url` (type: `string`):

Full URL to the Pinterest item

## `description` (type: `string`):

Pin description or user bio

## `repin_count` (type: `string`):

Number of times the pin has been saved/repinned

## `like_count` (type: `string`):

Number of likes on the pin

## `comment_count` (type: `string`):

Number of comments on the pin

## `images` (type: `string`):

Image URLs in various resolutions

# 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": [
        {
            "url": "https://www.pinterest.com/pin/1054827543951238554/"
        }
    ],
    "extendOutputFunction": (data) => {
        // Modify data here
        return data;
    },
    "customMapFunction": (item) => {
        // Transform item here
        return item;
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("happitap/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": [{ "url": "https://www.pinterest.com/pin/1054827543951238554/" }],
    "extendOutputFunction": """(data) => {
    // Modify data here
    return data;
}""",
    "customMapFunction": """(item) => {
    // Transform item here
    return item;
}""",
}

# Run the Actor and wait for it to finish
run = client.actor("happitap/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": [
    {
      "url": "https://www.pinterest.com/pin/1054827543951238554/"
    }
  ],
  "extendOutputFunction": "(data) => {\\n    // Modify data here\\n    return data;\\n}",
  "customMapFunction": "(item) => {\\n    // Transform item here\\n    return item;\\n}"
}' |
apify call happitap/pinterest-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Pinterest Scraper",
        "description": "Fast and cost-effective Pinterest scraper to extract pins, boards, user profiles, search results, comments, images, videos, and comprehensive engagement metrics. Perfect for social media analytics, competitor research, and content strategy.",
        "version": "0.0",
        "x-build-id": "icGwP4jHsBrLhud3x"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/happitap~pinterest-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-happitap-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/happitap~pinterest-scraper/runs": {
            "post": {
                "operationId": "runs-sync-happitap-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/happitap~pinterest-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-happitap-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",
                "required": [
                    "proxyConfiguration"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "List of Pinterest URLs to scrape. Supports: pin details, user profiles, boards, ideas, collections, and search results. Format: Array of URL objects. Example: [{'url': 'https://www.pinterest.com/pin/123456789/'}]. Why needed: Defines what content to extract from Pinterest.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "search": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Keyword to search on Pinterest. Searches across pins, boards, and users. Format: String (e.g., 'home decor', 'fashion ideas'). Why needed: Enables searching Pinterest for specific topics or keywords. Leave empty if using startUrls only."
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of items to scrape. Limits total pins, boards, or profiles extracted. Format: Number (e.g., 100, 500). Why needed: Controls scraping volume and costs. Set to 0 for unlimited scraping.",
                        "default": 100
                    },
                    "endPage": {
                        "title": "End Page",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of pages to scrape per URL or search query. Each page typically contains 20-50 items. Format: Number (e.g., 1, 5, 10). Why needed: Controls pagination depth. Set to 0 for infinite scrolling until maxItems is reached.",
                        "default": 5
                    },
                    "includeComments": {
                        "title": "Include Comments",
                        "type": "boolean",
                        "description": "Extract all comments from pins. Increases scraping time and resource usage proportionally to comment count. Format: Boolean (true/false). Why needed: Provides engagement data and user feedback on pins. Disable for faster scraping.",
                        "default": false
                    },
                    "includeUserInfoOnly": {
                        "title": "User Info Only",
                        "type": "boolean",
                        "description": "Extract only user profile information without pins or boards. Faster and uses fewer resources. Format: Boolean (true/false). Why needed: Useful for building user databases or follower lists without content details.",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings to avoid IP blocking. Pinterest requires proxies for reliable scraping. Residential proxies recommended for best results. Format: Proxy configuration object. Why needed: Pinterest blocks direct scraping; proxies ensure successful data extraction.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    },
                    "extendOutputFunction": {
                        "title": "Extend Output Function",
                        "type": "string",
                        "description": "Custom JavaScript function to extend or modify scraped data. Function receives the data object and should return modified object. Format: JavaScript function as string. Example: '(data) => { data.custom = 'value'; return data; }'. Why needed: Allows custom data transformations and calculations."
                    },
                    "customMapFunction": {
                        "title": "Custom Map Function",
                        "type": "string",
                        "description": "Custom JavaScript function to transform each item before saving. Function receives item object and should return transformed object. Format: JavaScript function as string. Why needed: Enables custom filtering, formatting, or enrichment of scraped data."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
