# ✅ TikTok Post Comments Scraper (`datamagnet/tiktok-comments-fetcher`) Actor

Fetch comments from any TikTok video or post using its video ID. Collect as many comments as you need, up to your chosen limit, and get the raw comment data exactly as returned by the source for easy analysis and reporting.

- **URL**: https://apify.com/datamagnet/tiktok-comments-fetcher.md
- **Developed by:** [Datamagnet](https://apify.com/datamagnet) (community)
- **Categories:** Social media, Videos
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## Video Comments Fetcher — TikTok Comments Scraper

Video Comments Fetcher is a TikTok comments scraper built for marketers, researchers, creators, and agencies who need to collect comments from a specific video or post quickly. It pulls the comments attached to the TikTok content you provide and returns them in a clean, ready-to-use format. Use it to analyze audience reactions, track engagement, or save comment data for reporting and content research. Set a maximum number of comments and get the raw results exactly as returned by the source.

### Key Features

- **Extract** comments from a specific TikTok video or post using only the video ID.
- **Collect** as many comments as you need in one run, up to your chosen limit.
- **Preserve** the original comment structure so you can review the data exactly as it appears.
- **Capture** useful engagement details such as likes, reply counts, timestamps, and author information.
- **Review** comment text, language, and thread activity to understand audience sentiment.
- **Save** time by automatically gathering multiple pages of comments until the limit is reached.
- **Export** results in formats that are easy to share, analyze, and archive.

### Use Cases

#### Social Media Research
Social media managers use this actor to study how people respond to a specific TikTok video or post. The returned fields like `text`, `digg_count`, `create_time`, and `comment_language` help teams understand what viewers are saying, when they said it, and which comments are getting the most attention.

#### Brand Sentiment Analysis
Brands can collect comments to see whether a campaign is being received positively, negatively, or with mixed reactions. Fields such as `text`, `user.nickname`, `user.unique_id`, and `reply_comment_total` help identify recurring themes, active commenters, and the level of discussion around each comment.

#### Creator Community Monitoring
Creators can track audience feedback on their own posts to spot questions, praise, and recurring requests. The `reply_comment`, `thread_has_more`, and `reply_comment_total` fields are especially useful for understanding whether a comment is starting a conversation and how deep that conversation goes.

#### Content Performance Reporting
Agencies and in-house teams can use the output to build reports on engagement quality, not just engagement volume. With fields like `digg_count`, `author_pin`, `status`, and `stick_position`, they can identify standout comments, pinned comments, and the comments that are shaping the conversation.

#### Audience Insight and Trend Tracking
Researchers and analysts can compare comments across different videos to spot patterns in language, sentiment, and audience behavior. The `comment_language`, `is_comment_translatable`, `share_info`, and `create_time` fields make it easier to group comments by language, timing, and shareability.

#### Moderation and Community Review
Community teams can review comments to understand what needs attention, escalation, or follow-up. The output includes the full comment text plus author details, making it easier to inspect individual comments and decide how to respond.

### Input

| Field | Type | Required | Description | Example |
|---|---|---:|---|---|
| count | integer | No | How many comments to fetch in each batch. The default and maximum value is 50. | 50 |
| videoId | string | Yes | The ID of the TikTok video or post you want comments from. | 7306132438047116586 |
| max_results | integer | No | The total number of comments to collect before stopping. | 100 |

### Output

| Field | Type | Description |
|---|---|---|
| allow_download_photo | boolean | Shows whether the commenter’s profile photo can be downloaded. |
| author_pin | boolean | Indicates whether the comment was pinned by the creator. |
| aweme_id | string | The ID of the TikTok video or post the comment belongs to. |
| cid | string | The unique ID of the comment itself. |
| collect_stat | integer | A status value related to how the comment is collected or tracked. |
| comment_language | string | The language detected for the comment. |
| comment_post_item_ids | array or null | Related item IDs connected to the comment, if available. |
| create_time | integer | The time the comment was posted, shown as a timestamp. |
| digg_count | integer | How many likes the comment received. |
| fold_status | integer | Indicates whether the comment is collapsed or fully shown. |
| image_list | array or null | Any images attached to the comment, if present. |
| is_author_digged | boolean | Shows whether the creator liked the comment. |
| is_comment_translatable | boolean | Shows whether the comment can be translated. |
| is_high_purchase_intent | boolean | Indicates whether the comment suggests buying interest. |
| label_list | array or null | Any labels attached to the comment. |
| no_show | boolean | Indicates whether the comment should be hidden from normal view. |
| reply_comment | object or null | The direct reply attached to the comment, if there is one. |
| reply_comment_total | integer | The total number of replies under this comment. |
| reply_id | string | The ID of the parent reply, if applicable. |
| reply_to_reply_id | string | The ID of the reply being answered, if applicable. |
| seeking_help_model_type | integer | A status value related to help-seeking or moderation classification. |
| share_info | object | Share details for the comment, including title, description, and link. |
| sort_extra_score | object | Extra ranking details that help explain comment ordering. |
| sort_tags | string | Tags that describe how the comment is categorized or ranked. |
| status | integer | The current status of the comment in the source system. |
| stick_position | integer | The pinned position of the comment, if it is pinned. |
| text | string | The main comment text written by the user. |
| text_extra | array | Extra text elements or annotations attached to the comment. |
| text_to_image_item_ids | array or null | Related image item IDs, if any. |
| thread_has_more | boolean | Shows whether there are more replies in the thread. |
| thread_id | integer | The thread ID for the comment conversation. |
| trans_btn_style | integer | A display setting related to translation controls. |
| user | object | Information about the commenter, including name, profile, and account details. |
| user_buried | boolean | Indicates whether the user’s comment is buried or hidden lower in the thread. |
| user_digged | integer | Shows whether the user liked their own comment or related content. |

### Sample Output

```json
{
  "allow_download_photo": true,
  "author_pin": false,
  "aweme_id": "7306132438047116586",
  "cid": "7306162850404975402",
  "collect_stat": 0,
  "comment_language": "en",
  "comment_post_item_ids": null,
  "create_time": 1701098641,
  "digg_count": 41773,
  "fold_status": -1,
  "image_list": null,
  "is_author_digged": false,
  "is_comment_translatable": true,
  "is_high_purchase_intent": false,
  "label_list": null,
  "no_show": false,
  "reply_comment": null,
  "reply_comment_total": 53,
  "reply_id": "0",
  "reply_to_reply_id": "0",
  "seeking_help_model_type": 0,
  "share_info": {
    "acl": {
      "add_to_story_code": 0,
      "code": 0,
      "extra": "{}"
    },
    "desc": "Kyler<3’s comment: The way her voice has matured still gets me",
    "title": "Hi! Well, so, basically I have a birthday coming up and I was thinking a fun way to celebrate the year we’ve had together would be to make The Eras Tour Concert Film available for you to watch at home! Very happy to be able to tell you that the extended version of the film including “Wildest Dreams,” “The Archer” and “Long Live” will be available to rent on demand in the US, Canada & additional countries to be announced soon starting on … you guessed it, December 13 🫶💋",
    "url": "https://m.tiktok.com/v/7306132438047116586.html?_d=f0bc91j3dgg7a6&comment_author_id=6870606316903056390&preview_pb=0&share_comment_id=7306162850404975402&share_item_id=7306132438047116586&sharer_language=en&source=h5_m&u_code=0"
  },
  "sort_extra_score": {
    "reply_score": 0.000659,
    "show_more_score": 0.16859
  },
  "sort_tags": "{\"top_list\":1}",
  "status": 1,
  "stick_position": 0,
  "text": "The way her voice has matured still gets me",
  "text_extra": [],
  "text_to_image_item_ids": null,
  "thread_has_more": false,
  "thread_id": 0,
  "trans_btn_style": 0,
  "user": {
    "account_labels": null,
    "ad_cover_url": null,
    "advance_feature_item_order": null,
    "advanced_feature_info": null,
    "avatar_thumb": {
      "uri": "tos-maliva-avt-0068/2926ebcac5ce064523ec5121d24f80f8",
      "url_list": [
        "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/2926ebcac5ce064523ec5121d24f80f8~tplv-tiktokx-cropcenter:100:100.jpg?...",
        "https://p19-common-sign.tiktokcdn.com/tos-maliva-avt-0068/2926ebcac5ce064523ec5121d24f80f8~tplv-tiktokx-cropcenter:100:100.jpg?...",
        "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/2926ebcac5ce064523ec5121d24f80f8~tplv-tiktokx-cropcenter:100:100.jpeg?..."
      ],
      "url_prefix": null
    },
    "bold_fields": null,
    "can_message_follow_status_list": null,
    "can_set_geofencing": null,
    "cha_list": null,
    "cover_url": null,
    "custom_verify": "",
    "enterprise_verify_reason": "",
    "events": null,
    "followers_detail": null,
    "geofencing": null,
    "homepage_bottom_toast": null,
    "item_list": null,
    "mutual_relation_avatars": null,
    "need_points": null,
    "nickname": "Kyler<3",
    "platform_sync_info": null,
    "predicted_age_group": "3",
    "relative_users": null,
    "search_highlight": null,
    "sec_uid": "MS4wLjABAAAAF9Dxc3l2aIY6iyooRPiyCij_GHhCE7CwVuWZVRqENV0J_YGZAeB5Z5G5F4B18t_2",
    "shield_edit_field_info": null,
    "type_label": null,
    "uid": "6870606316903056390",
    "unique_id": "kylerharrison.20",
    "user_profile_guide": null,
    "user_tags": null,
    "white_cover_url": null
  },
  "user_buried": false,
  "user_digged": 0
}
````

### How It Works

1. You paste the TikTok video ID for the post you want to analyze.
2. You choose how many comments you want collected in each run and set your overall limit.
3. The actor gathers the comments automatically and keeps going until it reaches your limit or runs out of comments.
4. The results are returned in the same structure provided by the source, so you can review them without extra cleanup.
5. You download the output and use it for reporting, research, moderation, or content planning.

### Getting Started

Getting started is simple and does not require any coding knowledge. Click **Try for free**, paste the video ID, choose your preferred limits, and click **Run**. The actor will collect the comments for that TikTok post and return the results in a format that is easy to work with. You can then download the data as JSON, CSV, or Excel depending on how you want to review or share it.

### Frequently Asked Questions

#### Do I need technical skills?

No. This actor is designed for business users, marketers, researchers, and creators who want comment data without dealing with complicated setup. Just enter the video ID, choose your limits, and run it.

#### How fast does it run?

Speed depends on how many comments you request and how much discussion is attached to the post. Smaller runs finish quickly, while larger runs may take longer because the actor keeps collecting comments until it reaches your chosen limit.

#### What format is the output?

You can export the results in JSON, CSV, or Excel. That makes it easy to open the data in spreadsheets, share it with teammates, or import it into your reporting workflow.

#### Is this legal to use?

You should always use the data in a way that respects applicable laws, platform rules, and privacy expectations. This actor is intended for legitimate research, analysis, and business workflows, so make sure your use case is appropriate for your organization.

#### Can I schedule it to run automatically?

Yes, you can set it up to run on a schedule if you want regular comment monitoring. That is useful for tracking audience reactions over time, watching campaign performance, or keeping an eye on new replies to important posts.

# Actor input Schema

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

The ID of the TikTok video or post you want to fetch comments for.

## `max_results` (type: `integer`):

The total number of comments to collect before stopping.

## Actor input object example

```json
{
  "videoId": "7306132438047116586",
  "max_results": 10
}
```

# 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 = {
    "videoId": "7306132438047116586",
    "max_results": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("datamagnet/tiktok-comments-fetcher").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 = {
    "videoId": "7306132438047116586",
    "max_results": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("datamagnet/tiktok-comments-fetcher").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 '{
  "videoId": "7306132438047116586",
  "max_results": 10
}' |
apify call datamagnet/tiktok-comments-fetcher --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "✅ TikTok Post Comments Scraper",
        "description": "Fetch comments from any TikTok video or post using its video ID. Collect as many comments as you need, up to your chosen limit, and get the raw comment data exactly as returned by the source for easy analysis and reporting.",
        "version": "0.0",
        "x-build-id": "fAsLbWsj0jsmecGyf"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/datamagnet~tiktok-comments-fetcher/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-datamagnet-tiktok-comments-fetcher",
                "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/datamagnet~tiktok-comments-fetcher/runs": {
            "post": {
                "operationId": "runs-sync-datamagnet-tiktok-comments-fetcher",
                "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/datamagnet~tiktok-comments-fetcher/run-sync": {
            "post": {
                "operationId": "run-sync-datamagnet-tiktok-comments-fetcher",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "videoId"
                ],
                "properties": {
                    "videoId": {
                        "title": "Video ID",
                        "type": "string",
                        "description": "The ID of the TikTok video or post you want to fetch comments for."
                    },
                    "max_results": {
                        "title": "Maximum results",
                        "type": "integer",
                        "description": "The total number of comments to collect before stopping."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
