# TikTok Profile Scraper — Identity & Stats (`herus13/tiktok-profile-scraper`) Actor

Scrape any public TikTok profile: identity, bio, avatar, verified/private, region, and follower/following/like/video counts. Fast HTTP, no login.

- **URL**: https://apify.com/herus13/tiktok-profile-scraper.md
- **Developed by:** [bootforge](https://apify.com/herus13) (community)
- **Categories:** Automation, Social media, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 profile scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

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

## How to integrate an Actor?

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

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

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

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

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

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

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

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

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

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

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


# README

## TikTok Profile Scraper

The TikTok Profile Scraper is an Apify actor that extracts **public** [TikTok](https://www.tiktok.com) profile identity and stats by **handle** or **profile URL** — no login, no account, no cookies. It returns one structured record per profile: nickname, bio, avatar, verified/private flags, region, `secUid`, `userId`, and follower/following/heart/video counts.

Use it for creator research, influencer discovery, competitor tracking, or social-media analytics at scale — exported to JSON, CSV, or Excel.

> **This actor returns profile identity and stats only.** TikTok's logged-out profile pages do not reliably embed recent videos — verified live against top creators (@mrbeast at 129M followers and @khaby.lame at 162M both return zero embedded videos). For video listings, see [TikTok Video Scraper](https://apify.com/herus13/tiktok-video-scraper).

### Table of contents

- [What the TikTok profile scraper does](#what-the-tiktok-profile-scraper-does)
- [How to scrape TikTok profiles](#how-to-scrape-tiktok-profiles)
- [TikTok profile scraper input](#tiktok-profile-scraper-input)
- [TikTok profile data output](#tiktok-profile-data-output)
- [How much it costs](#how-much-it-costs)
- [Recommended proxies for TikTok profiles](#recommended-proxies-for-tiktok-profiles)
- [Why this TikTok profile scraper](#why-this-tiktok-profile-scraper)
- [FAQ](#faq)
- [Rate this actor](#rate-this-actor-)
- [Related actors](#related-actors)

### What the TikTok profile scraper does

- 🔎 **Handle or URL input** — accepts `nasa`, `@nasa`, or `https://www.tiktok.com/@nasa`.
- 🆔 **Identity + stats in one pass** — nickname, bio, avatar, verified/private, region, `secUid`, `userId`.
- 📊 **Full public counts** — follower, following, heart (total likes), and video counts per profile.
- ⚡ **HTTP-first, no browser** — anonymous extraction with no TikTok account, password, or session cookie, so it's cheap and fast per profile.
- 💸 **Pay only for delivered profiles** — $0.004 per profile; not-found, blocked, and errored profiles are never charged.
- 🌍 **Export-ready** — one flat row per profile, ready for JSON, CSV, or Excel.

### How to scrape TikTok profiles

1. Click **Try for free** and open the actor.
2. Add one or more `targets` — handles (`nasa`), `@handles`, or full profile URLs.
3. Set your `proxy` — **US residential** is required (prefilled to Apify RESIDENTIAL, US).
4. Optional: cap the run with `max_profiles`.
5. Click **Start** and watch results stream into the dataset.
6. Export as **JSON, CSV, or Excel**, or pull it from the [Apify API](https://docs.apify.com/api/v2).

Scrape profiles by handle or URL:

```json
{
  "targets": ["nasa", "@natgeo", "https://www.tiktok.com/@bbcearth"],
  "max_profiles": 100,
  "proxy": {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US"}
}
````

### TikTok profile scraper input

| Field | Description |
|---|---|
| `targets` | Handles or profile URLs (`nasa`, `@nasa`, or `https://www.tiktok.com/@nasa`). Required. |
| `include_videos` | Opportunistically include embedded videos if the profile page exposes them (default `true`, no extra charge). Logged-out TikTok pages currently don't embed videos, so this is normally empty — kept for forward compatibility. |
| `max_profiles` | Optional cap on how many profiles from `targets` to scrape. |
| `proxy` | Proxy config. **US residential required** — TikTok blocks datacenter and non-US IPs. Prefilled to Apify RESIDENTIAL pinned to the US. |

### TikTok profile data output

Each profile is one flat dataset row. Sample:

```json
{
  "row_type": "profile",
  "unique_id": "nasa",
  "nickname": "NASA",
  "sec_uid": "MS4wLjABAAAA...",
  "user_id": "6997748855948083205",
  "avatar_url": "https://p16-sign-va.tiktokcdn.com/...",
  "signature": "Exploring the universe and our home planet.",
  "verified": true,
  "private": false,
  "region": "US",
  "follower_count": 3500000,
  "following_count": 12,
  "heart_count": 41000000,
  "video_count": 210,
  "profile_url": "https://www.tiktok.com/@nasa",
  "scraped_at": "2026-07-07T00:00:00Z",
  "error": null
}
```

| Field | Description |
|---|---|
| `unique_id` | The TikTok handle (without `@`). |
| `nickname` | Display name. |
| `sec_uid`, `user_id` | Stable identifiers for cross-run joins. |
| `avatar_url` | Profile picture URL. |
| `signature` | Bio text. |
| `verified`, `private` | Account status flags. |
| `region` | Account region code (e.g. `US`). |
| `follower_count`, `following_count`, `heart_count`, `video_count` | Public stats (`heart_count` = total likes across all videos). |
| `profile_url` | Canonical profile URL. |
| `scraped_at` | ISO timestamp of the run. |
| `error` | `null` on success, or `not_found` / `blocked` / `error` on failure (unbilled). |

Every profile emits exactly one `profile` row. If a future TikTok page ever embeds recent videos, the actor opportunistically emits extra `video` rows carrying the parent profile's `unique_id` so they join cleanly in a flat dataset — but as of July 2026 this does not occur on logged-out pages.

### How much it costs

This actor uses **pay-per-event** pricing — you pay for delivered profiles, not for time.

| Event | USD |
|---|---|
| Actor start (per GB memory) | $0.0001 |
| Profile scraped | $0.004 |

| Use case | Profiles | Est. cost |
|---|---|---|
| Single profile | 1 | ~$0.0041 |
| 100 creators | 100 | ~$0.40 |
| 1,000 profiles | 1,000 | ~$4.00 |

You only pay for profiles actually delivered (`error` is `null`). Not-found, blocked, and errored profiles are **not** charged. Any opportunistic embedded videos are bundled in at no extra charge.

### Recommended proxies for TikTok profiles

A **US residential** proxy is required — TikTok blocks datacenter IPs (including Apify's servers) and non-US IPs. The proxy input prefills Apify's RESIDENTIAL group pinned to the US (`apifyProxyCountry: "US"`), so the correct region applies out of the box. You can also plug in Bright Data, Oxylabs, SmartProxy, or a raw proxy URL.

If you run your own scrapers (inside or outside Apify) and need reliable residential proxies for TikTok and other social sites, we recommend **DataImpulse** — pay-as-you-go, per-country targeting, no monthly minimum:

👉 **[Get DataImpulse residential proxies](https://dataimpulse.com/?aff=404588\&utm_source=apify)** (referral link)

### Why this TikTok profile scraper

- **No login required** — anonymous HTTP extraction; no account, password, or session cookie.
- **HTTP-first, browser-free** — cheap and fast per profile, no CAPTCHA-solving overhead.
- **Live data** — follower/heart/video counts reflect the moment of the run.
- **Pay only for results** — not-found, blocked, and errored profiles are never billed.
- **Open source** — the underlying `tiktok-scraper` Python package ships a Typer CLI and a FastAPI server; the Apify wrapper is a thin layer.

### FAQ

**Do I need a TikTok account or login?** No. The actor extracts only publicly visible profile data anonymously over HTTP — no account, password, or session cookie. Private accounts return whatever public metadata is visible.

**Which proxies work best for TikTok profiles?** US residential proxies with per-country targeting. The input prefills `{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US"}`. Datacenter and non-US IPs are blocked. For your own scrapers, [DataImpulse](https://dataimpulse.com/?aff=404588\&utm_source=apify) (referral link) residential IPs work well.

**Can I get a creator's recent videos or full video history?** Not with this actor. TikTok's logged-out profile pages don't reliably embed video data — verified live against top creators returning zero embedded videos. Video listing needs a request-signer and lives in the separate [TikTok Video Scraper](https://apify.com/herus13/tiktok-video-scraper). Use this actor for profile identity and stats.

**Am I charged for profiles that don't exist or are blocked?** No. Not-found, blocked, and errored profiles are never charged — you pay only for profiles with delivered data.

**How fresh is the data?** The actor scrapes TikTok live at run time, so follower/following/heart/video counts reflect the moment of the run.

**Is scraping TikTok profiles legal?** This actor collects only publicly available profile data. You are responsible for complying with TikTok's terms and applicable laws. Do not collect personal data without a lawful basis.

### Rate this actor ⭐

If the TikTok Profile Scraper saved you time, please **leave a review on its Apify Store page** — ratings help other people find it and tell us what to build next. Hit a bug or missing field? Open an issue or contact us through the actor's **Issues** tab and we'll fix it fast — recency and reliability are what keep this actor ranking.

### Related actors

Building a broader social or lead pipeline? These actors use the same proxy config format and Pydantic-validated output, all open source.

- **[TikTok Shop Product Scraper](https://apify.com/herus13/tiktok-shop-scraper)** — scrape TikTok Shop products across 10 regions — variants, prices, seller info, ratings, sold counts, with a built-in CAPTCHA solver.
- **[TikTok Video Scraper](https://apify.com/herus13/tiktok-video-scraper)** — scrape a creator's videos by handle — descriptions, play/like/comment/share counts, and cover images.
- **[Instagram Profile Scraper](https://apify.com/herus13/instagram-profile-scraper)** — public Instagram profiles — bio, followers, recent posts. No login.
- **[LinkedIn Profile Scraper](https://apify.com/herus13/linkedin-profile-scraper)** — scrape LinkedIn profiles via your `li_at` cookie — structured fields, full experience history, optional contact enrichment.

# Actor input Schema

## `targets` (type: `array`):

@handles, bare handles, or full profile URLs (https://www.tiktok.com/@nasa).

## `include_videos` (type: `boolean`):

Include the profile page's embedded recent videos when present (no extra charge).

## `max_profiles` (type: `integer`):

Optional cap on how many profiles to scrape.

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

<p><strong>Required.</strong> TikTok blocks datacenter IPs. Use residential proxies.</p>

## Actor input object example

```json
{
  "targets": [
    "nasa"
  ],
  "include_videos": true,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

TikTok profile identity + public stats (one row per profile).

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

// Run the Actor and wait for it to finish
const run = await client.actor("herus13/tiktok-profile-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 = {
    "targets": ["nasa"],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("herus13/tiktok-profile-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 '{
  "targets": [
    "nasa"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call herus13/tiktok-profile-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "TikTok Profile Scraper — Identity & Stats",
        "description": "Scrape any public TikTok profile: identity, bio, avatar, verified/private, region, and follower/following/like/video counts. Fast HTTP, no login.",
        "version": "0.2",
        "x-build-id": "y44Dut8r0ykj06Wya"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/herus13~tiktok-profile-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-herus13-tiktok-profile-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/herus13~tiktok-profile-scraper/runs": {
            "post": {
                "operationId": "runs-sync-herus13-tiktok-profile-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/herus13~tiktok-profile-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-herus13-tiktok-profile-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": {
                    "targets": {
                        "title": "TikTok handles or profile URLs",
                        "type": "array",
                        "description": "@handles, bare handles, or full profile URLs (https://www.tiktok.com/@nasa).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "include_videos": {
                        "title": "Include recent videos",
                        "type": "boolean",
                        "description": "Include the profile page's embedded recent videos when present (no extra charge).",
                        "default": true
                    },
                    "max_profiles": {
                        "title": "Max profiles",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Optional cap on how many profiles to scrape."
                    },
                    "proxy": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "<p><strong>Required.</strong> TikTok blocks datacenter IPs. Use residential proxies.</p>"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
