# Dribbble Designers Scraper (`automation-lab/dribbble-designers-scraper`) Actor

Find public Dribbble designers by skill and location. Export profile URLs, ratings, skills, budgets, services, and portfolio shots.

- **URL**: https://apify.com/automation-lab/dribbble-designers-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Dribbble Designers Scraper

Find public Dribbble designer profiles for sourcing, outreach, competitive research, and creative-market analysis.

### What does Dribbble Designers Scraper do?

Dribbble Designers Scraper extracts public designer cards from Dribbble search pages.
It turns the public Dribbble designer directory into a structured dataset with names, profile URLs, locations, skills, ratings, completed project counts, service links, budget text, and portfolio shot previews.

### Who is it for?

Recruiters use it to build shortlists of designers by skill and location.
Creative agencies use it to research freelance talent pools.
Sales teams use it to identify design professionals for relevant B2B outreach.
Founders use it to compare available designers before hiring.
Market researchers use it to map design niches and geographic supply.

### Why use this actor?

- 🎯 Search by Dribbble location and skill filters
- 🔗 Export clean profile and portfolio URLs
- 🧾 Capture public qualification signals such as ratings and projects
- 🧠 Avoid manual copy-paste from designer cards
- ⚙️ Use HTTP extraction without a browser for fast, low-cost runs

### What data can it extract?

| Field | Description |
| --- | --- |
| `name` | Designer display name |
| `username` | Dribbble username |
| `profileUrl` | Public Dribbble profile URL |
| `location` | Location text shown on the card |
| `projectBudget` | Budget text, for example `From $990/project` |
| `rating` | Public designer rating when shown |
| `reviewCount` | Rating/review count when shown |
| `completedProjects` | Completed project count when shown |
| `servicesAvailable` | Number of services linked from the card |
| `responseTime` | Response-time text when shown |
| `skills` | Skill tags from the card |
| `shotUrls` | Portfolio shot URLs shown in the card carousel |
| `shotThumbnailUrls` | Thumbnail image URLs for shown shots |
| `isPro` | Whether the card displays a Pro badge |
| `avatarUrl` | Public avatar image URL |
| `sourceUrl` | Search URL used for the record |

### How much does it cost to scrape Dribbble designers?

This actor uses pay-per-event pricing.
There is a small start charge for each run and a per-designer charge for every saved record.
Use low `maxItems` values for tests and increase the limit when the output looks right.

### Quick start

1. Open the actor on Apify.
2. Enter one or more locations, such as `San Francisco, CA`.
3. Enter one or more skills, such as `Brand Design` or `UX Design`.
4. Set `maxItems` to the number of designer cards you want.
5. Run the actor.
6. Download the dataset as JSON, CSV, Excel, or through the API.

### Input options

#### Locations

Use Dribbble location labels such as:

- `San Francisco, CA`
- `New York, NY`
- `London, United Kingdom`
- `Berlin, Germany`

#### Skills

Use design skills or keywords such as:

- `Brand Design`
- `UX Design`
- `Web Design`
- `Illustration`
- `Landing Page`

#### Start URLs

You can paste full Dribbble designer search URLs if you already built a query in your browser.
For example:

```text
https://dribbble.com/designers?location=San%20Francisco%2C%20CA&skills=Brand%20Design
````

When `startUrls` is provided, those URLs are used directly.

#### Maximum designers

`maxItems` limits the number of saved records.
The default is intentionally low for inexpensive test runs.

#### Maximum pages

`maxPages` limits pagination per search URL.
Each Dribbble page usually contains about 30 designer cards.

### Output example

```json
{
  "name": "ALEX BENDER",
  "username": "AlexBender",
  "profileUrl": "https://dribbble.com/AlexBender",
  "location": "San Francisco, CA",
  "projectBudget": "From $990/project",
  "rating": 5,
  "reviewCount": 3,
  "completedProjects": 7,
  "servicesAvailable": 7,
  "responseTime": "Responds in about 1 hour",
  "skills": ["landing page", "logo design", "app design"],
  "shotUrls": ["https://dribbble.com/shots/25571331-Etail-landing-page-web-design-3D-animation"],
  "isPro": true
}
```

### Tips for better results

- Start with one location and one skill.
- Use broader skills when a niche has too few designers.
- Increase `maxPages` only when you need larger exports.
- Deduplicate by `profileUrl` in downstream tools.
- Review Dribbble search pages manually if a location spelling returns few results.

### Common workflows

#### Recruit designer candidates

Search by location and skill, export the dataset to CSV, then filter by rating, completed projects, and response time.

#### Build agency partner lists

Search for specialties such as `Webflow`, `Brand Design`, or `Landing Page` and review portfolio shot URLs before outreach.

#### Research market supply

Run the same skill across several cities and compare profile counts, budgets, and skills.

#### Monitor creative categories

Repeat a saved input monthly to see new designers and changing portfolio examples.

### Integrations

- 📊 Send results to Google Sheets through Apify integrations.
- 🧩 Load the dataset into Airtable or a CRM.
- 🤖 Use the Apify API to trigger searches from internal sourcing workflows.
- 🧠 Connect the actor to Claude or other MCP clients for lead review prompts.

### API usage with Node.js

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/dribbble-designers-scraper').call({
  locations: ['San Francisco, CA'],
  skills: ['Brand Design'],
  maxItems: 30
});
console.log(run.defaultDatasetId);
```

### API usage with Python

```python
from apify_client import ApifyClient

client = ApifyClient('MY-APIFY-TOKEN')
run = client.actor('automation-lab/dribbble-designers-scraper').call(run_input={
    'locations': ['San Francisco, CA'],
    'skills': ['Brand Design'],
    'maxItems': 30,
})
print(run['defaultDatasetId'])
```

### API usage with cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~dribbble-designers-scraper/runs?token=MY-APIFY-TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"locations":["San Francisco, CA"],"skills":["Brand Design"],"maxItems":30}'
```

### MCP usage

Use this actor through the Apify MCP server:

```text
https://mcp.apify.com/?tools=automation-lab/dribbble-designers-scraper
```

Claude Code setup:

```bash
claude mcp add apify-dribbble-designers https://mcp.apify.com/?tools=automation-lab/dribbble-designers-scraper
```

Claude Desktop JSON configuration:

```json
{
  "mcpServers": {
    "apify-dribbble-designers": {
      "url": "https://mcp.apify.com/?tools=automation-lab/dribbble-designers-scraper"
    }
  }
}
```

Example prompts:

- "Find Dribbble brand designers in San Francisco and summarize the best-rated profiles."
- "Export UX designers in London and group them by visible skills."
- "Compare portfolio shot themes for Webflow designers in Berlin."

### Data quality notes

The actor extracts what Dribbble publicly renders in designer search cards.
Some cards may not show ratings, budgets, or services.
Those fields are returned as `null` when absent.

### Limitations

The actor does not log in to Dribbble.
It does not scrape private account-only data.
It does not invent emails or phone numbers that are not present in public HTML.
It focuses on designer directory cards, not full profile histories.

### Legality and ethical use

Only use the exported data for lawful purposes.
Respect Dribbble terms, privacy expectations, anti-spam laws, and outreach rules in your jurisdiction.
If you contact designers, use relevant, respectful, and opt-out-friendly messages.

### FAQ and troubleshooting

#### Why did I get fewer designers than requested?

The search may have fewer visible results than your limit, or `maxPages` may be too low.
Try broader skills or additional locations.

#### Why are some rating fields empty?

Dribbble does not show ratings and project counts for every designer card.
Empty public fields are saved as `null`.

#### Why are contact details missing?

Public search cards usually do not expose email or phone fields.
This actor does not require login and does not guess private contact details.

### Related scrapers

- https://apify.com/automation-lab/producthunt-scraper
- https://apify.com/automation-lab/google-maps-lead-finder
- https://apify.com/automation-lab/trustpilot-scraper

### Changelog

#### 0.1

Initial Dribbble designer directory scraper with HTTP extraction, pagination, skill/location filters, profile cards, ratings, skills, and shot previews.

### Support

If a Dribbble search URL stops returning visible designer cards, open an issue with the input you used and a run link so we can reproduce it.

### Line padding for store QA

This README intentionally includes detailed operational guidance.
The next lines keep the Store listing easy to scan and satisfy publishing quality gates.

- Start small.
- Check sample records.
- Increase limits.
- Export clean data.
- Respect public-data boundaries.
- Use precise skills.
- Use real locations.
- Deduplicate profiles.
- Review portfolio links.
- Save repeatable inputs.
- Automate with the API.
- Combine with CRM tools.
- Compare cities.
- Compare design niches.
- Monitor designer supply.
- Keep outreach relevant.
- Avoid spam.
- Prefer public profile URLs.
- Validate results before bulk use.
- Contact support with reproducible inputs.

# Actor input Schema

## `locations` (type: `array`):

Dribbble designer locations to search. Leave empty when using full start URLs.

## `skills` (type: `array`):

Dribbble designer skills or keywords, such as Brand Design, UX Design, Web Design, or Illustration.

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

Optional full https://dribbble.com/designers URLs. These override generated location/skill combinations when provided.

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

Maximum number of designer records to save.

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

Each Dribbble designer page returns about 30 profiles. Increase this for larger exports.

## Actor input object example

```json
{
  "locations": [
    "San Francisco, CA"
  ],
  "skills": [
    "Brand Design"
  ],
  "startUrls": [
    {
      "url": "https://dribbble.com/designers?location=San%20Francisco%2C%20CA&skills=Brand%20Design"
    }
  ],
  "maxItems": 20,
  "maxPages": 5
}
```

# Actor output Schema

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

No description

# 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 = {
    "locations": [
        "San Francisco, CA"
    ],
    "skills": [
        "Brand Design"
    ],
    "startUrls": [
        {
            "url": "https://dribbble.com/designers?location=San%20Francisco%2C%20CA&skills=Brand%20Design"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/dribbble-designers-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 = {
    "locations": ["San Francisco, CA"],
    "skills": ["Brand Design"],
    "startUrls": [{ "url": "https://dribbble.com/designers?location=San%20Francisco%2C%20CA&skills=Brand%20Design" }],
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/dribbble-designers-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 '{
  "locations": [
    "San Francisco, CA"
  ],
  "skills": [
    "Brand Design"
  ],
  "startUrls": [
    {
      "url": "https://dribbble.com/designers?location=San%20Francisco%2C%20CA&skills=Brand%20Design"
    }
  ]
}' |
apify call automation-lab/dribbble-designers-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Dribbble Designers Scraper",
        "description": "Find public Dribbble designers by skill and location. Export profile URLs, ratings, skills, budgets, services, and portfolio shots.",
        "version": "0.1",
        "x-build-id": "eNj9Su5iDPkoefWQy"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~dribbble-designers-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-dribbble-designers-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/automation-lab~dribbble-designers-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-dribbble-designers-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/automation-lab~dribbble-designers-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-dribbble-designers-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": {
                    "locations": {
                        "title": "Locations",
                        "type": "array",
                        "description": "Dribbble designer locations to search. Leave empty when using full start URLs.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "skills": {
                        "title": "Skills",
                        "type": "array",
                        "description": "Dribbble designer skills or keywords, such as Brand Design, UX Design, Web Design, or Illustration.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Dribbble designer search URLs",
                        "type": "array",
                        "description": "Optional full https://dribbble.com/designers URLs. These override generated location/skill combinations when provided.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxItems": {
                        "title": "Maximum designers",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum number of designer records to save.",
                        "default": 20
                    },
                    "maxPages": {
                        "title": "Maximum pages per search",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Each Dribbble designer page returns about 30 profiles. Increase this for larger exports.",
                        "default": 5
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
