# Instagram Story Downloader (`scraperoka/instagram-story-downloader`) Actor

📲 Instagram Story Downloader lets you save stories fast and effortlessly. 🚀 Download high-quality videos & photos with a simple tap. 🔒 Easy to use, perfect for creators, fans, and social media research. ✨ Save, share, and revisit anytime!

- **URL**: https://apify.com/scraperoka/instagram-story-downloader.md
- **Developed by:** [Scraperoka](https://apify.com/scraperoka) (community)
- **Categories:** Social media, Videos, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.99 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

### Instagram Story Downloader 🎯

Manually visiting profiles and saving story media one by one is slow and doesn’t scale. **Instagram Story Downloader** streamlines story downloads by scraping publicly available Instagram story media in bulk using your list of usernames or profile URLs. This Instagram story downloader (and instagram story saver) is ideal for marketers, researchers, and growth teams who need story downloader for Instagram results at speed—often across thousands of items in a single run.

---

### What You Get: Sample Output

Here’s a sample record from a single run:

```json
{
  "username": "neymarjr",
  "stories_count": 7,
  "stories": [
    {
      "mediatype": "video",
      "story": "https://scontent.cdninstagram.com/.../video.mp4",
      "thumbnail": "https://scontent.cdninstagram.com/.../thumbnail.jpg"
    },
    {
      "mediatype": "image",
      "story": "https://scontent.cdninstagram.com/.../image.jpg"
    }
  ]
}
````

Output fields are pushed to the **Instagram Story Data** dataset (“Scraped Profiles”):

| Field | Type | What It Tells You |
|---|---|---|
| `username` | string | The Instagram handle extracted from your input profile URL or username |
| `stories_count` | number | How many valid stories were found for this profile |
| `stories` | array | The list of story items the actor scraped for this profile |
| `stories[].mediatype` | string | Whether the story media is a `video` or an `image` |
| `stories[].story` | string | The story media URL (video file URL or image URL) |
| `stories[].thumbnail` | string | Thumbnail URL for `video` stories (present for video items) |
| `error` | string | An error message when processing fails for the input |
| `input` | string | The original input value (username or URL) associated with an error result |
| `stories_count` (error case) | number | Set to `0` when an error occurs |
| `stories` (error case) | array | Set to `[]` when an error occurs |

Export your dataset as JSON, CSV, or Excel — straight from the Apify dashboard. ✅

***

### Why Instagram Story Downloader?

There are a lot of ways to pull story media from Instagram — here’s what sets **Instagram Story Downloader** (including instagram story video downloader and download instagram stories) apart.

#### Bulk-first for story downloader workflows

Feed multiple usernames or profile URLs at once, and the actor processes each one and streams results into your dataset as it goes. This makes it practical for campaign research, competitive monitoring, and data-backed reporting.

#### Flexible inputs (URLs or usernames)

You can provide a list of full profile URLs or just plain usernames. The actor normalizes each input internally before it fetches story data, which makes “download instagram story online” workflows much easier.

#### Resilient fetching with validation

The actor includes retry logic and validates story URLs before accepting them into the output. This helps ensure you get usable media links instead of low-quality or broken entries.

#### Structured output that’s easy to use

Your output includes `username`, `stories_count`, and a `stories` array where each item is clearly labeled with `mediatype` (and `thumbnail` for video). That structure makes it straightforward to plug into downstream tools and analysis.

***

### Configuring Your Run

Drop this into your `input.json` to get started:

```json
{
  "startUrls": [
    { "url": "https://www.instagram.com/neymarjr/" },
    { "url": "instagram.com/kyliejenner/" },
    { "url": "fatimazaidii._" }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

| Parameter | Required | What It Does |
|---|---|---|
| `startUrls` | ✅ | List of Instagram profile URLs or usernames to scrape stories from |
| `proxyConfiguration` | ⬜ | Proxy settings for the run to improve reliability |
| ↳ `proxyConfiguration.proxy support` | ⬜ | If set, routes requests through Apify Proxy (recommended for reliability) |

***

### Core Capabilities

#### Multiple profiles in one run

Provide multiple targets in `startUrls`, and the actor processes each profile, pushing results as it completes. This is ideal when you need an insta story downloader outcome across many accounts.

#### Story media links with clear typing

Each story item is output with a `mediatype` of `video` or `image`. For video stories, you also receive a `thumbnail`, making it easier to preview and organize what you downloaded or saved.

#### URL validation to improve usable results

The actor validates story URLs and expects a sufficient ratio of valid story items. If stories don’t pass validation, you’ll see fewer items reflected in `stories_count`, and in failure cases you’ll get an `error` field.

#### Resilient retries and fallbacks

The run is built to be more fault-tolerant, including retry behavior and proxy fallback logic when the selected proxy fails. That reduces the number of “empty result” moments you’d otherwise have to debug.

#### Dataset-first output for analysis and automation

Results are written to the **Instagram Story Data** dataset immediately for each processed input. You can then export, join, analyze, or automate—whether you’re building an instagram highlights downloader workflow or a story downloader for instagram research pipeline.

***

### Who Gets the Most Out of This

**Growth teams and marketers** — Use this Instagram Story Downloader to quickly compile story media links for competitor monitoring and campaign inspiration, then export your dataset for reporting and creative review.

**Influencer and creator researchers** — Run download instagram stories for creator shortlists to audit consistency, formats, and content style over time, without manually opening each profile.

**Data analysts and researchers** — Use the structured `stories` array (with `mediatype`, `story`, and `thumbnail` for videos) to analyze storytelling formats, distribution patterns, and availability across many accounts.

**Automation and integration builders** — Trigger this actor and ingest the dataset output into your pipeline, so your “insta story video downloader” needs become a repeatable data feed rather than manual work.

***

### Step-by-Step: How to Use It

No coding needed. Here's how to run Instagram Story Downloader from start to finish:

1. **Open the actor on Apify** — go to [console.apify.com](https://console.apify.com) and open the Instagram Story Downloader actor page.
2. **Enter your inputs** — set `startUrls` with either Instagram profile URLs (like `https://www.instagram.com/username/`) or just usernames.
3. **Configure proxy settings** — if you want more reliability, enable `proxyConfiguration` (for example, set `proxy support`).
4. **Hit Run and watch the live log** — follow progress while each profile is processed and pushed to the dataset.
5. **View results in the dataset tab** — each item includes `username`, `stories_count`, and a `stories` array.
6. **Export as JSON, CSV, or Excel** — download your dataset from the Apify dashboard for use in spreadsheets or analysis.

The whole process takes under 5 minutes to set up.

***

### Integrations & Export Options

Once your data is collected, Instagram Story Downloader plugs directly into your existing workflow.

You can download results from the Apify dataset in common formats like JSON, CSV, or Excel, so it’s easy to move from story downloader research to deliverables. If you’re building an instagram story saver pipeline, the structured `stories` array is ready for analysis right away.

You can also use Apify’s API and automation tooling to move results into downstream systems. For more details, refer to Apify documentation at [apify.com/docs/api](https://apify.com/docs/api).

***

### Pricing & Free Trial

Instagram Story Downloader runs on the Apify platform, which offers a **free tier** — no credit card required to get started. Free platform credits on sign-up are typically enough for several test runs.

For production usage, billing is handled based on your Apify platform usage (check the pricing page for the current model). Start free at [apify.com](https://apify.com) and scale when you're ready.

***

### Reliability & Performance

| What We Handle | How |
|---|---|
| Rate-limit / server rejections | Automatic retries with retry logic |
| Proxy failures | Proxy fallback behavior to maintain scraping reliability |
| Data quality | Validates story URLs before including them in results |
| Partial run stability | Each processed profile is pushed to the dataset as the run progresses |
| Output consistency | Uniform JSON structure with `username`, `stories_count`, and `stories` |

**Limitations:** The actor works with publicly available Instagram data and cannot access private or login-gated content. If a profile has no valid stories to extract, you’ll see `stories_count` reflect that with an appropriate empty `stories` array.

For enterprise-scale runs, contact us to discuss custom configurations.

***

### Frequently Asked Questions

#### Is there a free plan or trial?

Yes. Apify offers a free tier with platform credits so you can test Instagram Story Downloader before running larger batches.

#### Do I need to log in to Instagram to use this?

No. This actor is designed to work with publicly available story data and does not require an Instagram login in the typical workflow.

#### How accurate is the data?

The output is based on stories the actor can validate and package into the `stories` array. If story URLs don’t meet validation expectations, they may be excluded, which is reflected in `stories_count`.

#### How many results can I get per run?

Your results are based on how many profiles you provide in `startUrls` and how many valid stories are available per profile. The output is streamed per profile into the dataset, so you can scale by increasing your input list.

#### How often is the data updated / how fresh is it?

Data freshness depends on when you run the actor. Each run fetches story data at the moment of processing, so story availability changes naturally between runs.

#### Is this legal? Does it comply with GDPR / CCPA?

The actor accesses **publicly available data**. You’re responsible for ensuring your use, storage, and processing comply with GDPR, CCPA, and Instagram’s Terms of Service.

#### Can I export results to Google Sheets or Excel?

Yes. You can export from the Apify dataset in formats like JSON, CSV, or Excel. From there, you can import into Google Sheets or other tools.

#### Can I run this on a schedule automatically?

Yes. You can schedule actor runs using Apify automation capabilities so the instagram story downloader workflow runs regularly without manual triggering.

#### Can I access this via API?

Yes. You can run the actor via the Apify API and pull dataset results programmatically—see [apify.com/docs/api](https://apify.com/docs/api) for details.

#### What happens if the actor hits an error?

If processing fails for a specific input, the actor pushes an error-shaped record to the dataset. Those error results include `input`, `error`, `stories_count: 0`, and `stories: []` so you can identify what needs attention.

***

### Need Help or Have a Request?

Got a question about Instagram Story Downloader or want a new feature added? Reach out at <dataforleads@gmail.com>. We welcome feedback like batch CSV input, additional export-friendly fields, and webhook notifications when runs finish.

***

### Disclaimer & Responsible Use

*Instagram Story Downloader is the fastest, most reliable way to bulk-save Instagram story media links—start your free run today.*

This actor accesses **publicly available data**. It does not access private profiles, login-gated content, or password-protected pages. You are responsible for complying with GDPR, CCPA, platform Terms of Service, and any applicable local regulations. For data removal requests, contact <dataforleads@gmail.com>. Use responsibly, ethically, and only for lawful purposes.

# Actor input Schema

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

Enter one or more Instagram profile URLs (e.g., https://www.instagram.com/username) or just usernames (e.g., username).

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

Select proxies to be used by the scraper. If the selected proxy is rejected by Instagram, a residential proxy will be used as a fallback.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.instagram.com/neymarjr/"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

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

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://www.instagram.com/neymarjr/"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scraperoka/instagram-story-downloader").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [{ "url": "https://www.instagram.com/neymarjr/" }],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scraperoka/instagram-story-downloader").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.instagram.com/neymarjr/"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scraperoka/instagram-story-downloader --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Instagram Story Downloader",
        "description": "📲 Instagram Story Downloader lets you save stories fast and effortlessly. 🚀 Download high-quality videos & photos with a simple tap. 🔒 Easy to use, perfect for creators, fans, and social media research. ✨ Save, share, and revisit anytime!",
        "version": "0.1",
        "x-build-id": "cksbhH5QD2qMgdOi8"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scraperoka~instagram-story-downloader/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scraperoka-instagram-story-downloader",
                "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/scraperoka~instagram-story-downloader/runs": {
            "post": {
                "operationId": "runs-sync-scraperoka-instagram-story-downloader",
                "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/scraperoka~instagram-story-downloader/run-sync": {
            "post": {
                "operationId": "run-sync-scraperoka-instagram-story-downloader",
                "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": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Instagram Username or Profile URL",
                        "type": "array",
                        "description": "Enter one or more Instagram profile URLs (e.g., https://www.instagram.com/username) or just usernames (e.g., username).",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Select proxies to be used by the scraper. If the selected proxy is rejected by Instagram, a residential proxy will be used as a fallback."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
