# Viagogo Events Search Scraper (`stealth_mode/viagogo-events-search-scraper`) Actor

Scrape event search results from Viagogo.com instantly. Collect 33 data fields per event including dates, venue details, ticket availability, and pricing — perfect for ticket aggregators, event analytics, and market research.

- **URL**: https://apify.com/stealth\_mode/viagogo-events-search-scraper.md
- **Developed by:** [Stealth mode](https://apify.com/stealth_mode) (community)
- **Categories:** Automation, Developer tools, News
- **Stats:** 4 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.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.md):

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

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

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

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

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

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

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

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

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


# README

## Viagogo Events Search Scraper: Extract Event Listings & Ticket Data

---

### What Is Viagogo?

Viagogo is a global online ticketing marketplace where millions of users buy and sell tickets to concerts, sports events, theater shows, and live entertainment. With thousands of events listed daily across multiple genres and regions, manually collecting and analyzing this event data is impractical at scale. The **Viagogo Events Search Scraper** automates extraction of search results, delivering structured event intelligence in seconds.

---

### Overview

The **Viagogo Events Search Scraper** extracts event listings from Viagogo search pages, capturing 33+ data fields per event including dates, venues, availability status, and pricing indicators. It is ideal for:

- **Ticket aggregators** building comprehensive event databases
- **Event analysts** tracking market trends and ticket availability
- **Researchers** studying live entertainment demand patterns
- **Developers** powering event discovery applications
- **Business intelligence teams** monitoring competitor listings

The scraper handles pagination automatically, respects rate limits with built-in failure tolerance, and outputs clean, structured JSON ready for analysis or integration.

---

### Input Format

The scraper accepts a JSON configuration object specifying which search pages to scrape:

```json
{
  "urls": [
    "https://www.viagogo.com/Concert-Tickets/Pop-Rock/Pop?restPage=2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 200
}
````

| Parameter | Type | Description |
|---|---|---|
| `urls` | Array of strings | Search page URLs from Viagogo.com (e.g., filtered by genre, category, or location). Supports multiple URLs for bulk scraping. |
| `ignore_url_failures` | Boolean | If `true`, the scraper continues even if some URLs fail; if `false`, any failure halts the run. Recommended: `true` for reliability. |
| `max_items_per_url` | Integer | Maximum number of events extracted per URL (e.g., `200`). Higher values capture more listings but take longer to process. |

**Example URLs:**

- Genre/category: `https://www.viagogo.com/Concert-Tickets/Pop-Rock/Pop`
- Location-filtered: `https://www.viagogo.com/Concert-Tickets/New-York` (paginated with `?restPage=2`)
- Sport events: `https://www.viagogo.com/Sports-Tickets/Football`

> **Tip:** Use pagination parameters (`?restPage=N`) to split large result sets across multiple URLs for faster processing.

***

### Output Format

**Example output record:**

```json
{
  "event_id": 160599955,
  "name": "K-pop Demon Hunters",
  "url": "https://www.viagogo.com/E-160599955?qid=68f2f4ef-10aa-49c6-b645-19285000ba16&iid=54d9fb64-b5fe-4111-bbc8-0ee2db5e8a0d&index=stubhub&ut=60c486f2-452f-4368-ad3f-aa2fcc01579a",
  "day_of_week": "Sat",
  "formatted_date": "Jun 20",
  "formatted_time": "7:00 PM",
  "formatted_date_without_year": "Jun 20",
  "formatted_date_with_day_of_week": "Saturday, June 20",
  "is_tbd": false,
  "is_date_confirmed": true,
  "is_time_confirmed": true,
  "event_state": 1,
  "venue_id": 28010,
  "venue_name": "Palace Theatre at Stamford Center for the Arts - Complex",
  "allow_public_purchase": true,
  "formatted_venue_location": "Stamford, CT, USA",
  "country_code": "US",
  "user_distance_from_venue": "13176193.8684",
  "formatted_distance_in_miles": "",
  "formatted_rescheduled_from_date": "",
  "event_countdown_message": "Week after next",
  "notification_signup_link_message": {
    "message": "Join the list",
    "disclaimer": "Sign up to stay in the know and be notified when there are new tickets available for this event.",
    "has_value": true,
    "feature_tracking_key": ""
  },
  "notification_signup_modal_message": {
    "message": "Sign up to be informed whenever new K-pop Demon Hunters tickets become available",
    "has_value": true,
    "feature_tracking_key": "e3e87858-5eef-4d8c-9e51-73aa7e179bde"
  },
  "has_active_listings": true,
  "venue_city": "Stamford",
  "sold_out_message": {
    "has_value": false
  },
  "event_availability_state": 0,
  "is_favorite": false,
  "aggregate_favorites": 0,
  "is_parking_event": false,
  "notification_modal_content": null,
  "is_refetched_global_event": false,
  "country_name": "USA",
  "event_metadata": {
    "common": {
      "venue_time_zone_offset": "-14400000",
      "event_start_date_time": 1781996400000
    }
  },
  "is_under_hundred": false,
  "is_multiday_event": false,
  "from_url": "https://www.viagogo.com/secure/Search?restPage=5&q=pop&searchGuid=55606B21-99CA-467D-8683-3FEEF2E73A2A"
}
```

Each event in the results includes up to 33 fields providing comprehensive event and ticket marketplace data:

#### Event Identification & Metadata

| Field | Description |
|---|---|
| `Event ID` | Unique Viagogo identifier for the event |
| `Name` | Official event name/title |
| `URL` | Direct link to the event page on Viagogo |
| `Event Metadata` | Additional structured metadata about the event type |

#### Date & Time Information

| Field | Description |
|---|---|
| `Formatted Date` | Event date in readable format (e.g., "Sat, Dec 15, 2024") |
| `Formatted Date Without Year` | Event date excluding year (e.g., "Dec 15") |
| `Formatted Date With Day Of Week` | Full formatted date with day name (e.g., "Saturday, December 15, 2024") |
| `Day Of Week` | Day name (e.g., "Saturday") |
| `Formatted Time` | Event start time if available (e.g., "7:30 PM") |
| `Is TBD` | Boolean: `true` if date/time is still "To Be Determined" |
| `Is Date Confirmed` | Boolean: `true` if the date has been officially confirmed |
| `Is Time Confirmed` | Boolean: `true` if the start time is confirmed |
| `Formatted Rescheduled From Date` | Original date if the event was rescheduled |
| `Is Multiday Event` | Boolean: `true` if the event spans multiple days |

#### Venue Information

| Field | Description |
|---|---|
| `Venue ID` | Unique identifier for the venue/location |
| `Venue Name` | Name of the venue (e.g., "Madison Square Garden") |
| `Formatted Venue Location` | Full venue address and location string |
| `Venue City` | City where the venue is located |
| `Country Code` | ISO country code (e.g., "US", "GB") |
| `Country Name` | Full country name |
| `User Distance From Venue` | Distance from user's location (if available) |
| `Formatted Distance In Miles` | Distance to venue in miles format |

#### Ticket Availability & Status

| Field | Description |
|---|---|
| `Has Active Listings` | Boolean: `true` if tickets are currently for sale by sellers |
| `Event Availability State` | Status of ticket availability (e.g., "available", "sold\_out", "upcoming") |
| `Sold Out Message` | Message displayed if event is sold out |
| `Allow Public Purchase` | Boolean: whether tickets can be publicly purchased |
| `Event State` | Overall event state (e.g., "active", "completed", "cancelled") |
| `Event Countdown Message` | Dynamic message showing time until event (e.g., "3 days left") |
| `Notification Signup Link Message` | Call-to-action text for waitlist signup |
| `Notification Signup Modal Message` | Modal message encouraging ticket alerts |
| `Notification Modal Content` | Full content of notification/alert modal |

#### User & Preference Data

| Field | Description |
|---|---|
| `Is Favorite` | Boolean: `true` if the event is in user's favorites |
| `Aggregate Favorites` | Total number of users who favorited this event |

#### Special Event Flags

| Field | Description |
|---|---|
| `Is Parking Event` | Boolean: `true` if this is a parking/transportation event listing |
| `Is Refetched Global Event` | Internal flag indicating data freshness |
| `Is Under Hundred` | Boolean: `true` if fewer than 100 listings available |

***

### How to Use

1. **Identify search pages** — Browse Viagogo.com and find search result pages matching your criteria (genre, location, artist, sport). Copy the full URLs including pagination parameters.

2. **Configure the scraper** — Paste URLs into the `urls` array. Example:

```json
   {
     "urls": [
       "https://www.viagogo.com/Concert-Tickets/Pop-Rock/Pop?restPage=1",
       "https://www.viagogo.com/Concert-Tickets/Pop-Rock/Pop?restPage=2"
     ],
     "max_items_per_url": 200,
     "ignore_url_failures": true
   }
```

3. **Set extraction limits** — Adjust `max_items_per_url` based on your needs:
   - `20–50` for quick samples
   - `100–200` for comprehensive analysis
   - Higher values for full-scale aggregation (slower processing)

4. **Run the scraper** — Start the actor and monitor progress in the run log. Failed URLs are skipped if `ignore_url_failures: true`.

5. **Export & analyze** — Download results as JSON, CSV, or Excel. Import into spreadsheets, databases, or visualization tools.

**Best practices:**

- Use pagination (`?restPage=N`) to split large searches into smaller, faster runs
- Set `ignore_url_failures: true` to prevent timeouts from blocking entire runs
- Filter URLs by genre or location to reduce dataset size and improve relevance

***

### Use Cases & Business Value

- **Ticket aggregators:** Build real-time event inventories across multiple categories and regions
- **Price monitoring:** Track average ticket prices and availability trends over time
- **Event discovery apps:** Power search and recommendation engines with live Viagogo data
- **Market analysis:** Study demand patterns by genre, venue, or geography
- **Competitive intelligence:** Monitor competitor pricing and event selection
- **Automated alerts:** Notify users when favorite artists or events are listed

By automating data collection, the scraper eliminates manual browsing and delivers insights that inform business decisions in minutes instead of hours.

***

### Conclusion

The **Viagogo Events Search Scraper** is a powerful tool for anyone needing structured event and ticket data at scale. Whether you're building a ticket aggregator, analyzing market trends, or powering an event discovery platform, this scraper delivers 33+ fields of actionable intelligence per event. Start scraping today and unlock the full potential of Viagogo's event marketplace data.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the events search urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "urls": [
    "https://www.viagogo.com/Concert-Tickets/Pop-Rock/Pop?restPage=2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 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 = {
    "urls": [
        "https://www.viagogo.com/Concert-Tickets/Pop-Rock/Pop?restPage=2"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("stealth_mode/viagogo-events-search-scraper").call(input);

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

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

```

## Python example

```python
from apify_client import ApifyClient

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

# Prepare the Actor input
run_input = {
    "urls": ["https://www.viagogo.com/Concert-Tickets/Pop-Rock/Pop?restPage=2"],
    "ignore_url_failures": True,
    "max_items_per_url": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("stealth_mode/viagogo-events-search-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "urls": [
    "https://www.viagogo.com/Concert-Tickets/Pop-Rock/Pop?restPage=2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}' |
apify call stealth_mode/viagogo-events-search-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Viagogo Events Search Scraper",
        "description": "Scrape event search results from Viagogo.com instantly. Collect 33 data fields per event including dates, venue details, ticket availability, and pricing — perfect for ticket aggregators, event analytics, and market research.",
        "version": "0.0",
        "x-build-id": "QHD68b1gPHYK060Yw"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/stealth_mode~viagogo-events-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-stealth_mode-viagogo-events-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/stealth_mode~viagogo-events-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-stealth_mode-viagogo-events-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/stealth_mode~viagogo-events-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-stealth_mode-viagogo-events-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "urls": {
                        "title": "URLs of the events search urls to scrape",
                        "type": "array",
                        "description": "Add the URLs of the events search urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "ignore_url_failures": {
                        "title": "Continue running even if some URLs fail to be scraped",
                        "type": "boolean",
                        "description": "If true, the scraper will continue running even if some URLs fail to be scraped."
                    },
                    "max_items_per_url": {
                        "title": "Max items per URL",
                        "type": "integer",
                        "description": "The maximum number of items to scrape per URL."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
