# Pintarest Details Scraper (`infinite_crow/pintarest-details-scraper`) Actor

Scrape Pinterest pins, boards, profiles & search results in one click.
Extract images, engagement metrics, creator info & comments. Supports keyword search, direct URLs, ideas & search pages with smart pagination. Ideal for market research & content discovery.

- **URL**: https://apify.com/infinite\_crow/pintarest-details-scraper.md
- **Developed by:** [Md Firoz Islam](https://apify.com/infinite_crow) (community)
- **Categories:** Social media, Automation, Developer tools
- **Stats:** 3 total users, 0 monthly users, 100.0% runs succeeded, NaN 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 Details Scraper

A production-ready **Apify Actor** for scraping structured Pinterest data using **search queries** and **direct Pinterest URLs** (pins, profiles, boards, ideas, and search pages).

Works in two modes:
- **Direct scrape mode** — scrapes Pinterest directly (requires proxy for high volume)
- **API mode** — routes requests through your own backend API (`API_URL` + `PINTEREST_API_KEY`)

---

### ✨ Features

- 🔍 **Keyword Search** — collect Pinterest pins using plain text search queries
- 📌 **Pin Details** — title, description, images (orig/564x/236x), engagement metrics, board info, comments
- 📋 **Board Scraping** — all pins from any public board with full pagination
- 👤 **User Profile** — follower/following counts, board count, monthly views, verified status
- 💡 **Ideas URL Support** — auto-converts `/ideas/<topic>/...` to keyword search
- 🔗 **Search URL Support** — scrapes `/search/pins/?q=...` URLs directly
- 🔄 **Automatic URL Classification** — detects pin, profile, board, ideas, or search URL automatically
- 📜 **Optional Comments** — fetch comments for individual pin URLs
- 📄 **Pagination Control** — `max_items` and `end_page` for fine-tuned result limits
- 🔁 **Retry Logic** — automatic retries and safe error handling
- 🧹 **Structured JSON Output** — clean, normalized data ready for analytics or storage

---

### 🚀 How to Use

#### Step 1 — Choose Your Input

Use **search queries**, **start URLs**, or both.

##### Search by Keywords
```json
{
  "queries": ["home decor", "fashion ideas", "logo design"]
}
````

##### Scrape by Direct URLs

```json
{
  "start_urls": [
    "https://www.pinterest.com/pin/123456789/",
    "https://www.pinterest.com/username/",
    "https://www.pinterest.com/username/boardname/",
    "https://www.pinterest.com/ideas/beauty/935541271955/",
    "https://www.pinterest.com/search/pins/?q=Valentine%E2%80%99s%20Nail%20Art"
  ]
}
```

#### Step 2 — Configure Optional Settings

```json
{
  "max_items": 50,
  "end_page": 3,
  "include_comments": true,
  "only_user_info": false
}
```

#### Step 3 — Run the Actor

- Save your input configuration
- Click **Run** in the Apify Console
- Monitor logs for real-time progress
- Access results in the **Apify Dataset**

***

### 📥 Input Parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `queries` | `string[]` | — | Pinterest keyword searches |
| `start_urls` | `string[]` | — | Direct Pinterest URLs to scrape |
| `include_comments` | `boolean` | `false` | Include comments for pin detail URLs |
| `only_user_info` | `boolean` | `false` | Return only profile/board metadata (no pins) |
| `max_items` | `integer` | `20` | Max items per URL or query |
| `end_page` | `integer` | `1` | Pagination depth (increase for more results) |

***

### 📤 Output Examples

#### Search Result

```json
{
  "type": "search_query",
  "query": "dress",
  "count": 20,
  "items": [
    {
      "pin_id": "846324954995310675",
      "url": "https://www.pinterest.com/pin/846324954995310675",
      "title": "Red Sequins V-neck Long 1920s Dress",
      "description": "Fabric: Sequins...",
      "link": "https://zapaka.com/products/red-sequins-dress",
      "dominant_color": "#732e2b",
      "image_original": "https://i.pinimg.com/originals/48/a0/f5/48a0f5.jpg",
      "image_564": "https://i.pinimg.com/564x/48/a0/f5/48a0f5.jpg",
      "image_236": "https://i.pinimg.com/236x/48/a0/f5/48a0f5.jpg",
      "creator_username": "zapakaretro",
      "creator_fullname": "Zapaka Retro",
      "creator_profile_url": "https://www.pinterest.com/zapakaretro/",
      "repin_count": 1423,
      "like_count": 0,
      "comment_count": 2,
      "is_promoted": false
    }
  ]
}
```

#### Pin Detail

```json
{
  "type": "pin_detail",
  "source_url": "https://www.pinterest.com/pin/4222193395681386/",
  "count": 1,
  "items": [
    {
      "type": "pin",
      "url": "https://www.pinterest.com/pin/4222193395681386/",
      "id": "4222193395681386",
      "description": "Beautiful minimalist design",
      "grid_title": "Modern Home",
      "dominant_color": "#65625e",
      "created_at": "Sun, 23 Nov 2025 23:29:44 +0000",
      "repin_count": 179,
      "like_count": 0,
      "share_count": 12,
      "comment_count": 0,
      "images": {
        "236x": { "url": "https://i.pinimg.com/236x/55/86/54/558654.jpg" },
        "564x": { "url": "https://i.pinimg.com/564x/55/86/54/558654.jpg" },
        "orig": { "url": "https://i.pinimg.com/originals/55/86/54/558654.jpg" }
      },
      "board": {
        "name": "Home Ideas",
        "privacy": "public",
        "owner": { "username": "johndoe", "full_name": "John Doe" }
      },
      "comments": []
    }
  ]
}
```

#### User Profile

```json
{
  "type": "user_profile",
  "source_url": "https://www.pinterest.com/dudadelsanto/",
  "count": 1,
  "items": [
    {
      "type": "user",
      "id": "495648099432234901",
      "url": "https://www.pinterest.com/dudadelsanto/",
      "username": "dudadelsanto",
      "full_name": "Duda Del Santo",
      "about": "Fashion & beauty enthusiast",
      "follower_count": 15200,
      "following_count": 430,
      "board_count": 48,
      "pin_count": 3200,
      "monthly_views": 2100000,
      "verified_identity": {}
    }
  ]
}
```

***

### ⚙️ Environment Variables

| Variable | Required | Description |
|----------|----------|-------------|
| `PROXY_HOST` | No | Proxy host:port (e.g. `p.webshare.io:80`) |
| `PROXY_USER` | No | Proxy username |
| `PROXY_PASS` | No | Proxy password |
| `API_URL` | No | Backend API URL (enables API mode) |
| `PINTEREST_API_KEY` | No | API key for backend API mode |

***

### 🔧 Project Structure

```
pinterest-details-scraper/
├── .actor/
│   └── actor.json          ## Apify actor configuration
├── src/
│   ├── __init__.py
│   └── scraper.py          ## Core scraping functions
├── main.py                 ## Actor entry point
├── Dockerfile              ## Docker build config
├── requirements.txt        ## Python dependencies
├── input_schema.json       ## Apify input schema
└── README.md
```

***

### 🛠 How It Works

1. Reads input from Apify (`queries` and `start_urls`)
2. Processes keyword searches via Pinterest's internal search API
3. Auto-classifies each URL as pin, profile, board, ideas, or search
4. Fetches data with full pagination support
5. Pushes structured JSON results to the Apify Dataset

***

### ⚠️ Error Handling

- Unsupported URLs are safely skipped with a log message
- All requests use retry logic (3 attempts) with 2-second delays
- Clear error logs via `Actor.log.error()`
- Graceful handling of missing or empty API responses

***

### 📌 Use Cases

- Pinterest market & trend research
- Content inspiration & discovery
- Social media analytics
- Lead generation for creators/brands
- Data aggregation for dashboards

***

### 📄 License

Free to use and extend for your own projects.

# Actor input Schema

## `queries` (type: `array`):

Pinterest keyword searches (e.g. 'car', 'logo design', 'beauty nails'). Each keyword is searched as a Pinterest pin search.

## `start_urls` (type: `array`):

Pinterest URLs to scrape. Supported types: Pin URLs, User Profile URLs, Board URLs, Ideas URLs, and Search URLs.

## `include_comments` (type: `boolean`):

If enabled, comments will be fetched and included when scraping individual pin detail URLs.

## `only_user_info` (type: `boolean`):

If enabled, only profile or board metadata is returned — no pins are scraped. Applies to user profile and board URLs.

## `max_items` (type: `integer`):

Maximum number of items (pins, boards, search results) to collect per URL or query.

## `end_page` (type: `integer`):

Number of pagination pages to scrape. Increase to collect more results for searches and boards.

## Actor input object example

```json
{
  "queries": [
    "dress",
    "car"
  ],
  "start_urls": [
    "https://www.pinterest.com/pin/4222193395681386/",
    "https://www.pinterest.com/dudadelsanto/",
    "https://www.pinterest.com/dudadelsanto/nail-inspo/",
    "https://www.pinterest.com/ideas/beauty/935541271955/",
    "https://www.pinterest.com/search/pins/?q=Valentine%E2%80%99s%20Nail%20Art"
  ],
  "include_comments": false,
  "only_user_info": false,
  "max_items": 20,
  "end_page": 1
}
```

# 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 = {
    "queries": [
        "dress",
        "car"
    ],
    "start_urls": [
        "https://www.pinterest.com/pin/4222193395681386/",
        "https://www.pinterest.com/dudadelsanto/",
        "https://www.pinterest.com/dudadelsanto/nail-inspo/",
        "https://www.pinterest.com/ideas/beauty/935541271955/",
        "https://www.pinterest.com/search/pins/?q=Valentine%E2%80%99s%20Nail%20Art"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("infinite_crow/pintarest-details-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 = {
    "queries": [
        "dress",
        "car",
    ],
    "start_urls": [
        "https://www.pinterest.com/pin/4222193395681386/",
        "https://www.pinterest.com/dudadelsanto/",
        "https://www.pinterest.com/dudadelsanto/nail-inspo/",
        "https://www.pinterest.com/ideas/beauty/935541271955/",
        "https://www.pinterest.com/search/pins/?q=Valentine%E2%80%99s%20Nail%20Art",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("infinite_crow/pintarest-details-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 '{
  "queries": [
    "dress",
    "car"
  ],
  "start_urls": [
    "https://www.pinterest.com/pin/4222193395681386/",
    "https://www.pinterest.com/dudadelsanto/",
    "https://www.pinterest.com/dudadelsanto/nail-inspo/",
    "https://www.pinterest.com/ideas/beauty/935541271955/",
    "https://www.pinterest.com/search/pins/?q=Valentine%E2%80%99s%20Nail%20Art"
  ]
}' |
apify call infinite_crow/pintarest-details-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Pintarest Details Scraper",
        "description": "Scrape Pinterest pins, boards, profiles & search results in one click. \nExtract images, engagement metrics, creator info & comments. Supports keyword search, direct URLs, ideas & search pages with smart pagination. Ideal for market research & content discovery.",
        "version": "0.0",
        "x-build-id": "x0GfGt9KPN9bOSCYX"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/infinite_crow~pintarest-details-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-infinite_crow-pintarest-details-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/infinite_crow~pintarest-details-scraper/runs": {
            "post": {
                "operationId": "runs-sync-infinite_crow-pintarest-details-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/infinite_crow~pintarest-details-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-infinite_crow-pintarest-details-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": {
                    "queries": {
                        "title": "Search Queries",
                        "type": "array",
                        "description": "Pinterest keyword searches (e.g. 'car', 'logo design', 'beauty nails'). Each keyword is searched as a Pinterest pin search.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "start_urls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Pinterest URLs to scrape. Supported types: Pin URLs, User Profile URLs, Board URLs, Ideas URLs, and Search URLs.",
                        "items": {
                            "type": "string",
                            "pattern": "^https://www\\.pinterest\\.com/.*"
                        }
                    },
                    "include_comments": {
                        "title": "Include Pin Comments",
                        "type": "boolean",
                        "description": "If enabled, comments will be fetched and included when scraping individual pin detail URLs.",
                        "default": false
                    },
                    "only_user_info": {
                        "title": "Profile / Board Info Only",
                        "type": "boolean",
                        "description": "If enabled, only profile or board metadata is returned — no pins are scraped. Applies to user profile and board URLs.",
                        "default": false
                    },
                    "max_items": {
                        "title": "Max Items Per Request",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of items (pins, boards, search results) to collect per URL or query.",
                        "default": 20
                    },
                    "end_page": {
                        "title": "Pagination End Page",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Number of pagination pages to scrape. Increase to collect more results for searches and boards.",
                        "default": 1
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
