# Podcast Niche Activity & Saturation Tracker (`saint_person/podcast-niche-activity-tracker`) Actor

Compare podcast niches side by side - how many shows exist, how many are still actively releasing episodes, and how saturated the niche is - before you launch or pitch one.

- **URL**: https://apify.com/saint\_person/podcast-niche-activity-tracker.md
- **Developed by:** [saint person](https://apify.com/saint_person) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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

## 🎙️ Podcast Niche Activity & Saturation Tracker

> 🚀 **Compare podcast niches before you launch or pitch one.** How many shows exist, how many are still actively releasing, and how saturated the niche really is.

> 🕒 **Last updated:** 2026-07-07 · 📊 **7 fields** per niche · Built on Apple's iTunes Search API (official, no key)

> 🎁 **Try it free:** the free Apify plan returns up to **10 results per run** - enough to see the output quality. Any paid Apify plan unlocks full-size runs.

Give it a list of podcast niches and it samples the top shows in each, then scores how active (episodes released in the last 30 days) and how saturated (show count + average episode maturity) each niche is - so you can spot the least-crowded, still-active niche without manually browsing Apple Podcasts topic by topic.

| 🎯 Target Audience | 💡 Primary Use Cases |
| --- | --- |
| Aspiring podcasters, podcast networks, sponsors/advertisers, content strategists | Niche selection before launch, sponsorship targeting, competitive landscape research |

---

### 📋 What this Actor does

- Searches Apple's official podcast directory for each niche you list
- Measures what share of top shows released an episode in the last 30 days
- Computes average episode count per niche as a maturity/saturation signal
- Ranks and labels each niche HIGH / MEDIUM / LOW saturation

> 💡 **Why it matters:** "There are podcasts about X" tells you nothing. "80% of the top 20 X shows are still active, averaging 440 episodes" tells you whether there's room.

---

### 🎬 Full demo

🚧 Video walkthrough coming soon - the Quick Start below takes under 3 minutes end to end.

---

### ⚙️ Input

| Input | Type | Default | Behavior |
| --- | --- | --- | --- |
| `niches` | string | (prefilled) | Comma-separated niches/topics, up to 8 |
| `maxResults` | integer | 20 | Shows sampled per niche (5-50) |

**Example: Compare 5 popular niches**

```json
{ "niches": "true crime, startup, fitness, comedy, history", "maxResults": 20 }
````

**Example: Narrow niche check**

```json
{ "niches": "beekeeping, urban gardening", "maxResults": 15 }
```

> ⚠️ **Good to know:** results reflect Apple Podcasts' directory only (the largest podcast index, not exhaustive of every platform).

***

### 📊 Output

Each niche returns **7 fields**. Download as CSV, Excel, JSON, or XML, or consume via the Apify API.

#### 🧾 Schema

| Field | Type | Example |
| --- | --- | --- |
| niche | string | true crime |
| showsFound | integer | 20 |
| activeLast30DaysPct | number | 75.0 |
| avgEpisodeCount | number | 440.6 |
| saturationLevel | string | HIGH |
| topShows | array | \["Crime Junkie", "Dateline NBC"] |
| generatedAt | string | 2026-07-07T10:24:12Z |

#### 📦 Sample record

```json
{"niche":"true crime","showsFound":20,"activeLast30DaysPct":75.0,"avgEpisodeCount":440.6,"saturationLevel":"HIGH","topShows":["Crime Junkie","True Crime with Kendall Rae","Dateline NBC"],"generatedAt":"2026-07-07T10:24:12Z"}
```

***

### ✨ Why choose this Actor

| | Capability |
| --- | --- |
| 🏆 | **Scores, doesn't just list.** Freshness + maturity signals, not a raw search results dump. |
| 🎯 | **Multi-niche in one run.** Compare up to 8 niches side by side. |
| ⚡ | **Built on Apple's iTunes Search API.** Official, free, no key - stable and durable. |
| 🔁 | **Automatic retries.** Transient failures retry with backoff. |
| 💳 | **Pay per result.** No subscription. A typical 5-niche run costs about $0.035. |

> 📊 Turns 5 manual directory browses into 1 ranked table.

***

### 📈 How it compares to alternatives

| Approach | Cost | Coverage | Refresh | Setup |
| --- | --- | --- | --- | --- |
| **⭐ Podcast Niche Activity & Saturation Tracker** *(this Actor)* | $5 free credit, then pay-per-use | Any niche, up to 8 per run | **Live per run** | ⚡ 2 min |
| Browsing Apple Podcasts manually | Free | One niche at a time | Live | 🐢 Manual, one by one |
| Podcast analytics SaaS | $50-300+/mo subscription | Broad | Live | 🐢 Sales call + onboarding |
| Manual copy-paste | Free | Current session only | One-shot | 🐢 Hours of clicking |

Pick this Actor when you want a ranked, multi-niche saturation view without a subscription.

***

### 🚀 How to use

1. 📝 **Sign up.** Create a free Apify account with $5 credit (takes 2 minutes).
2. 🌐 **Open the Actor.** Go to the Podcast Niche Activity & Saturation Tracker page on the Apify Store.
3. ✏️ **Set your input.** List your niches - or just press Start, the prefilled example works.
4. 🚀 **Run it.** Watch results stream into the Dataset tab.
5. 📥 **Download.** Grab results as CSV, Excel, JSON, or XML - or pipe them anywhere via the Apify API.

> ⏱️ Total time from signup to downloaded dataset: **3-5 minutes.** No coding required.

***

### 💼 Business use cases

- **Aspiring podcasters:** find a niche that's active but not overcrowded before committing.
- **Podcast networks:** screen acquisition targets' niches for growth headroom.
- **Advertisers/sponsors:** identify active niches matching a target audience.
- **Content strategists:** back up a pitch deck with real saturation numbers.

***

### 🌟 Beyond business use cases

- 🎓 **Research & academia** - media landscape studies, content-trend coursework.
- 🎨 **Personal & creative** - validate a podcast idea before recording episode one.
- 🤝 **Non-profit & civic** - find under-served topic niches for outreach content.
- 🧪 **Experimentation** - prototype content-strategy dashboards on real data.

***

### 🔌 Automating Podcast Niche Activity & Saturation Tracker

**Node.js** (`apify-client` on NPM):

```javascript
const { ApifyClient } = require('apify-client');
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('saint_person/podcast-niche-activity-tracker').call({ niches: "true crime, startup, fitness", maxResults: 20 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

**Python** (`apify-client` on PyPI):

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_APIFY_TOKEN')
run = client.actor('saint_person/podcast-niche-activity-tracker').call(run_input={"niches": "true crime, startup, fitness", "maxResults": 20})
items = client.dataset(run['defaultDatasetId']).list_items().items
```

📚 [Full Apify API documentation](https://docs.apify.com/api/v2)

[Apify Schedules](https://docs.apify.com/platform/schedules) triggers this Actor on any cron interval - monthly for a standing niche-saturation watch.

***

### 🧠 Use via MCP (for AI agents)

Podcast Niche Activity & Saturation Tracker is directly callable by any MCP-compatible AI agent (Claude, ChatGPT, Cursor, and others) through Apify's hosted MCP server - no custom integration code needed.

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com/sse?actors=saint_person/podcast-niche-activity-tracker",
      "headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
    }
  }
}
```

Once connected, just ask your agent something like: *"Use the Podcast Niche Activity Tracker Actor to find the least saturated niche among these 5 topics I'm considering."*

📚 [Apify MCP server docs](https://docs.apify.com/platform/integrations/mcp)

***

### 🤖 Ask an AI assistant about this Actor

- 💬 [**ChatGPT**](https://chat.openai.com/?q=How%20do%20I%20use%20the%20Podcast%20Niche%20Activity%20%26%20Saturation%20Tracker%20on%20Apify%3F)
- 🧠 [**Claude**](https://claude.ai/new?q=How%20do%20I%20use%20the%20Podcast%20Niche%20Activity%20%26%20Saturation%20Tracker%20on%20Apify%3F)
- 🔍 [**Perplexity**](https://perplexity.ai/search?q=How%20do%20I%20use%20the%20Podcast%20Niche%20Activity%20%26%20Saturation%20Tracker%20on%20Apify%3F)

***

### ❓ Frequently Asked Questions

#### 🧩 How does it work?

It calls Apple's official iTunes Search API for each niche, then computes recent-release freshness and average episode count across the sampled shows.

#### Why iTunes Search and not Spotify?

Apple's podcast directory has the largest indexed catalog with a free, unauthenticated, genuinely-filtering search API - verified directly before building this Actor.

#### What does "saturation" mean here?

HIGH = 15+ shows sampled averaging 100+ episodes (mature, crowded niche). MEDIUM = 8+ shows averaging 30+ episodes. LOW = below both - likely room to enter.

#### ⏰ Can I schedule regular runs?

Yes. Use Apify Schedules to run this Actor on any cron interval.

#### ⚖️ Is this data legal to collect?

This Actor only collects data that is publicly accessible via Apple's free Search API. No login, no bypass of access controls.

#### 💳 Do I need a paid Apify plan?

No. The free Apify plan is enough for testing and small runs.

#### 🔁 What happens if a run fails?

Transient errors retry automatically with backoff. If a run still fails, the log explains exactly why.

#### 🆘 What if I need help?

Open an issue on this Actor's Issues tab.

***

### 🔌 Integrate with any app

- [**Zapier**](https://docs.apify.com/platform/integrations/zapier)
- [**Make**](https://docs.apify.com/platform/integrations/make)
- [**n8n**](https://docs.apify.com/platform/integrations)
- [**Google Sheets**](https://docs.apify.com/platform/integrations/drive)
- [**Slack**](https://docs.apify.com/platform/integrations/slack)
- [**Gmail**](https://docs.apify.com/platform/integrations/gmail)
- [**Webhooks**](https://docs.apify.com/platform/integrations/webhooks)
- [**MCP**](https://docs.apify.com/platform/integrations/mcp)

***

### 🔗 Recommended Actors

Pairs well with [HN Topic Momentum Tracker](https://apify.com/saint_person/hn-topic-momentum-tracker) for cross-checking content trends across platforms.

> 💡 **Pro tip:** browse the complete [saint\_person collection](https://apify.com/saint_person) for more tools like this.

***

### 🆘 Help & custom requests

- 🐛 **Something not working?** Open an issue on this Actor's **Issues tab**.
- 🛠️ **Need a custom feature or a different data source?** Open an issue describing what you need.

***

> **⚠️ Disclaimer:** this Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Apple. All trademarks are the property of their respective owners. Only publicly available data is collected.

# Actor input Schema

## `niches` (type: `string`):

Comma-separated list of podcast niches or topics to compare (up to 8), e.g. 'true crime, startup, fitness'. Works out of the box with the prefilled example.

## `maxResults` (type: `integer`):

How many top shows to sample per niche for freshness/episode-count detail. Controls your cost: you pay per niche profile returned.

## Actor input object example

```json
{
  "niches": "true crime, startup, fitness, comedy, history",
  "maxResults": 20
}
```

# 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 = {
    "niches": "true crime, startup, fitness, comedy, history"
};

// Run the Actor and wait for it to finish
const run = await client.actor("saint_person/podcast-niche-activity-tracker").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 = { "niches": "true crime, startup, fitness, comedy, history" }

# Run the Actor and wait for it to finish
run = client.actor("saint_person/podcast-niche-activity-tracker").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 '{
  "niches": "true crime, startup, fitness, comedy, history"
}' |
apify call saint_person/podcast-niche-activity-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=saint_person/podcast-niche-activity-tracker",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Podcast Niche Activity & Saturation Tracker",
        "description": "Compare podcast niches side by side - how many shows exist, how many are still actively releasing episodes, and how saturated the niche is - before you launch or pitch one.",
        "version": "1.0",
        "x-build-id": "o1VvuSa72D8gNodr9"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/saint_person~podcast-niche-activity-tracker/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-saint_person-podcast-niche-activity-tracker",
                "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/saint_person~podcast-niche-activity-tracker/runs": {
            "post": {
                "operationId": "runs-sync-saint_person-podcast-niche-activity-tracker",
                "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/saint_person~podcast-niche-activity-tracker/run-sync": {
            "post": {
                "operationId": "run-sync-saint_person-podcast-niche-activity-tracker",
                "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": [
                    "niches"
                ],
                "properties": {
                    "niches": {
                        "title": "Podcast niches / topics",
                        "type": "string",
                        "description": "Comma-separated list of podcast niches or topics to compare (up to 8), e.g. 'true crime, startup, fitness'. Works out of the box with the prefilled example."
                    },
                    "maxResults": {
                        "title": "Shows sampled per niche",
                        "minimum": 5,
                        "maximum": 50,
                        "type": "integer",
                        "description": "How many top shows to sample per niche for freshness/episode-count detail. Controls your cost: you pay per niche profile returned.",
                        "default": 20
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
