# eBay Product Scraper (`scrapecraze/ebay-product-scraper`) Actor

eBay Product Scraper extracts product listings, prices, seller details, ratings, descriptions, images, availability, shipping information, and URLs from eBay. Ideal for market research, competitor tracking, price monitoring, ecommerce analytics, and product discovery.

- **URL**: https://apify.com/scrapecraze/ebay-product-scraper.md
- **Developed by:** [ScrapeCraze](https://apify.com/scrapecraze) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.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.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

### eBay Product Scraper ⚡

If you need eBay listing data at scale, manually opening each product page quickly becomes a time sink. **eBay Product Scraper** extracts product details, seller info, pricing, images, shipping, and descriptions from the eBay product URLs you provide. It’s an eBay listing scraper and eBay product scraper for marketers, analysts, and researchers who want structured eBay data extraction without the busywork. In one run, you can process a list of URLs and export results to a dataset in minutes—so you spend less time collecting and more time analyzing.

---

### See the Data: Sample Output

Here's a real record from a single run:

```json
{
  "success": true,
  "seller_name": "example_seller_store",
  "seller_items_sold": "2450",
  "positive_feedback": "98.7% positive",
  "product_title": "Vintage Example Item 1990s Edition",
  "product_image": [
    "https://example.com/images/s-l1600.jpg",
    "https://example.com/images/s-l1600.png"
  ],
  "product_price": "$39.99",
  "product_condition": "Used",
  "shipping_info": "Free shipping",
  "delivery_info": "Arrives by Wed, Jun 12",
  "return_policy": "Returns accepted",
  "item_number": "357269512786",
  "item_description": "This is a sample plain-text description extracted from the item description content.",
  "item_description_html": "<body>...</body>",
  "item_specifics": {
    "Brand": "Example Brand",
    "Type": "Example Type"
  },
  "detail_url": "https://www.ebay.com/itm/357269512786"
}
````

Even when something fails, the actor returns an error record with a clear `success: False` and an error message.

| Field | Type | What It Tells You |
|---|---|---|
| `success` | boolean | Whether the item page was scraped successfully |
| `seller_name` | string | The seller identifier you can use for seller-level analysis or CRM enrichment |
| `seller_items_sold` | string | A numeric value (as text) representing sold items / feedback score context |
| `positive_feedback` | string | Positive feedback percentage text for trust and quality scoring |
| `product_title` | string | The item title you can use for categorization, deduping, and reporting |
| `product_image` | array | Image URLs (built to higher resolution variants) for creative review or listings research |
| `product_price` | string | The displayed price text from the product page |
| `product_condition` | string | Condition label to help segment by quality/usage level |
| `shipping_info` | string | Shipping details shown on the page |
| `delivery_info` | string | Delivery expectation text useful for timing-based comparisons |
| `return_policy` | string | Return policy text to support buying-behavior analysis |
| `item_number` | string | Extracted item number parsed from the URL |
| `item_description` | string | Plain-text description content for clean downstream analysis |
| `item_description_html` | string | HTML body content for richer formatting or auditing |
| `item_specifics` | object | Key-value attributes (excluding fields already handled as top-level fields) |
| `detail_url` | string | The original URL used for the record so you can trace back sources |
| `error` | string | Present on failures from the `scrape_ebay_item` error path (if scraping HTML fails) |
| `url` | string | The URL associated with the error record |

Export your full dataset as JSON, CSV, or Excel from the Apify dashboard.

***

### Setting It Up

Drop this into your `input.json` and you're ready to go:

```json
{
  "Urls": [
    "https://www.ebay.com/itm/357269512786"
  ]
}
```

| Parameter | Required | What It Does |
|---|---|---|
| `Urls` | ✅ | A list of eBay product URLs to scrape in this run |

***

### What It Does

The eBay Product Scraper takes your list of eBay item URLs and returns structured JSON records with product and seller details.

#### Extracts product and seller details from each URL

For every eBay product URL you provide, the actor parses the product title, item number, seller name, pricing, condition, shipping, delivery info, and return policy into consistent fields.

#### Builds a clean product dataset for analysis

It extracts a plain-text `item_description` plus `item_description_html` so you can choose the format that fits your workflow—whether that’s text analysis, audit trails, or feeding downstream systems.

#### Captures images and item specifics in structured form

The actor returns `product_image` as an array of image URLs and `item_specifics` as an object of attributes, giving you more than just title and price for eBay data extraction use cases.

#### Works in bulk with resilient execution

Designed for batch processing, the actor iterates over your provided `Urls` and collects results into a single output dataset. It also includes error paths that return `success: False` along with `error`/`url` when a page can’t be fetched.

#### Returns output ready for exporting and downstream tooling

Each result includes `detail_url` so records are traceable. After the run, the actor pushes all results to the Apify dataset, making it easy to export and integrate—just like an eBay product feed scraper would, but driven by your input URL list.

Overall, the eBay Product Scraper is a practical way to scrape eBay products and turn listing pages into analysis-ready data.

***

### Why eBay Product Scraper?

There are plenty of ways to pull data from eBay listings — here’s why eBay Product Scraper stands out.

#### Structured fields that match real listing needs

Instead of leaving you with raw HTML only, it returns product fields like `product_title`, `product_price`, `product_condition`, `shipping_info`, `delivery_info`, and `return_policy`, plus `item_specifics` for deeper attribute-level research.

#### Bulk-friendly for eBay listing scraper workflows

You can pass a list of URLs and get a dataset back in one run, which is exactly what you want when you’re doing scrape eBay products work for research, reporting, or competitive monitoring.

#### Clear success/failure records

When scraping fails, the actor returns an error record with `success: False` and associated error details. That makes it easier to filter results and re-run only what’s missing—useful for any eBay scraping tool you rely on repeatedly.

***

### Real-World Use Cases

Here's how different teams put eBay Product Scraper to work:

**Competitive Intelligence Teams**\
A research team collects URLs from eBay listings for a category and runs eBay Product Scraper to build a structured dataset. They compare pricing, condition, shipping, delivery expectations, and return policy text across products without manually copying anything.

**Sales Enablement & Sourcing**\
Sourcing analysts maintain a list of candidate product pages and re-scrape them as new leads arrive. With fields like `seller_name`, `positive_feedback`, and `seller_items_sold`, they can prioritize sellers and products before outreach.

**Ecommerce Data Analysts**\
An analyst needs eBay data extraction for reporting and anomaly detection. They use `item_description` (plain text) for analysis and keep `item_description_html` for validation when formatting matters.

**Marketing Agencies**\
A PPC or creative team audits product messaging and feature claims across multiple listings. By pulling `item_specifics` and `product_title` into one dataset, they quickly spot patterns and build better ad angles for client campaigns.

**Automation Specialists & Developers**\
A developer triggers runs via Apify tooling and then loads the dataset into their pipeline. Because the output is structured JSON with `detail_url`, they can reliably join results to internal systems and track sources.

***

### How to Run It

No code required. Here's how to get your first results in under 5 minutes:

1. **Go to the actor page on Apify**\
   Open the actor listing in the Apify console at [console.apify.com](https://console.apify.com).

2. **Enter your inputs**\
   In the input editor, add your eBay product URLs in the `Urls` field.

3. **Configure proxy settings (optional)**\
   If you want more reliable scraping for larger batches, enable proxy settings in the run configuration.

4. **Start the run and watch the live log**\
   Launch the run and follow progress in the logs as each URL is processed.

5. **Open the Dataset tab to see live results**\
   As items complete, you’ll see the structured records appear in the dataset.

6. **Export in your preferred format**\
   Download your dataset as JSON, CSV, or Excel from the Apify dashboard.

The whole setup takes under 5 minutes — results start appearing within seconds of launch.

***

### Export & Integration Options

Once your data is collected, eBay Product Scraper fits directly into your existing workflow.

You can export your Apify dataset from the Apify dashboard as JSON, CSV, or Excel for reporting, spreadsheets, and offline analysis. For integrations, you can connect your results to other tools using Apify’s API capabilities and automation flows (for example, via Zapier or Make), so scraped eBay listing data lands where your team already works.

For deeper automation, you can also access results programmatically via the Apify API and trigger downstream processing right after the run finishes.

***

### Pricing

eBay Product Scraper runs on Apify, which includes a **free tier** — no credit card needed to start. The free tier includes $5 platform credits on sign-up, enough for several real test runs. For larger workloads, you’ll typically pay pay-as-you-go based on Apify Actor compute units (CU), and you can scale when your batch sizes grow. Start free at [apify.com](https://apify.com) — scale up when you need to.

***

### Reliability & Limitations

| What We Handle | How |
|---|---|
| Proxy support | Supports proxy usage for more reliable fetching when configured |
| Bulk execution | Processes the list you provide and collects results into one dataset |
| Failure handling | Returns `success: False` with error details when scraping fails |

**Limitations:** The actor scrapes from accessible public item pages provided via `Urls`. If a page can’t be fetched (for example, due to access restrictions or fetch failures), you’ll receive failure records with error details. For enterprise-scale needs or custom configurations, reach out and we’ll help.

***

### Frequently Asked Questions

#### Is there a free plan?

Yes. Apify offers a free tier with credits so you can test eBay Product Scraper on real eBay product URLs before scaling up.

#### Do I need to log in or create an account on eBay?

No. This actor is designed to scrape eBay product URLs you provide and extract data from publicly accessible pages, without requiring an eBay login.

#### How accurate is the extracted data?

Accuracy depends on what’s available on each listing page. The actor extracts the product fields it can find (like `product_title`, `product_price`, `shipping_info`, `delivery_info`, and `return_policy`) and returns them as structured JSON.

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

You can scrape as many URLs as you put into `Urls`. There’s no fixed results value in the actor input—your run size is driven by the list you provide.

#### How fresh is the data?

The data is captured during your run, based on what’s currently visible on each product page at fetch time. If you want newer pricing or updated shipping details, run the actor again with the same or updated `Urls`.

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

Yes, but you still need to use it responsibly. eBay Product Scraper works with **publicly available data** you provide via product URLs, and it’s your responsibility to comply with GDPR, CCPA, platform Terms of Service, and any local regulations when storing or using the scraped data.

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

Yes. You can export your dataset as JSON, CSV, or Excel from the Apify dashboard, then import it into Google Sheets or other tools.

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

Yes. You can schedule runs in Apify so the actor executes on a recurring basis. This is useful for ongoing eBay category scraper style monitoring.

#### Can I access results via the API?

Yes. You can run the actor and retrieve results programmatically using the Apify API, depending on your integration setup.

#### What happens when the actor encounters an error?

When a page can’t be fetched or parsed, the actor returns a failure record with `success: False` and error details (for example, via the returned `error` field and associated `url`/`detail_url` where applicable). This makes it easier to identify missing items and re-run specific URLs.

***

### Get Help & Use Responsibly

Got a question about eBay Product Scraper or a feature you'd like added? Reach out at <dataforleads@gmail.com>. We actively maintain this actor based on user feedback and can help with ideas like batch URL ingestion enhancements and more validation around extracted fields.

***

**publicly available data**. It does not access private accounts, login-gated pages, or password-protected content. You’re responsible for complying with GDPR, CCPA, and the relevant platform Terms of Service when using the output. For data removal requests, contact <dataforleads@gmail.com>. Use responsibly, ethically, and only for lawful purposes.

# Actor input Schema

## `Urls` (type: `array`):

List of eBay product URLs to scrape.

## Actor input object example

```json
{
  "Urls": [
    "https://www.ebay.com/itm/357269512786"
  ]
}
```

# 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.ebay.com/itm/357269512786"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapecraze/ebay-product-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.ebay.com/itm/357269512786"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapecraze/ebay-product-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.ebay.com/itm/357269512786"
  ]
}' |
apify call scrapecraze/ebay-product-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "eBay Product Scraper",
        "description": "eBay Product Scraper extracts product listings, prices, seller details, ratings, descriptions, images, availability, shipping information, and URLs from eBay. Ideal for market research, competitor tracking, price monitoring, ecommerce analytics, and product discovery.",
        "version": "0.1",
        "x-build-id": "5VFhpCmgOw6KLpZ0A"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapecraze~ebay-product-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapecraze-ebay-product-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/scrapecraze~ebay-product-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapecraze-ebay-product-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/scrapecraze~ebay-product-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapecraze-ebay-product-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",
                "required": [
                    "Urls"
                ],
                "properties": {
                    "Urls": {
                        "title": "eBay Product URLs",
                        "type": "array",
                        "description": "List of eBay product URLs to scrape.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "https://www.ebay.com/itm/357269512786"
                        ]
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
