# Mercari Sold Listings Scraper (eBay Alternative Comp Tracker) (`scrapemint/ebay-sold-listings-scraper`) Actor

Pull eBay's public sold/completed listings by keyword or category. Each row carries item ID, title, sold price, sold date, condition, bids, shipping, seller, and image URL. Real sale prices, not asking prices. JSON. No login. Pay per sold listing.

- **URL**: https://apify.com/scrapemint/ebay-sold-listings-scraper.md
- **Developed by:** [Ken M](https://apify.com/scrapemint) (community)
- **Categories:** E-commerce, Business, Marketing
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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 Sold Listings Scraper (Comp & Resale Price Tracker)

Pull eBay's sold and completed listings by keyword or category through eBay's official Finding API. No HTML scraping. No proxy stress. Each row ships the item ID, title, the actual sold price (not the asking price), the sold date, condition, bid count for auctions, shipping cost, seller (name + feedback score + positive percent), category, and image URL. Pay per sold listing.

Powered by eBay's Finding API. The actor ships with a bundled AppID for casual usage; power users with high run volume can supply their own free AppID to avoid the shared 5,000 calls/day quota.

**Built for** vintage and antique dealers running comp pulls before pricing inventory, sneaker and watch resellers benchmarking the last 90 days of sales, collectible card traders pricing PSA grades, used equipment dealers building bid sheets, probate and estate appraisers documenting fair market value, insurance adjusters validating claims, and ASO consultants tracking price drift across categories.

**Keywords this actor ranks for:** ebay sold listings api, ebay completed listings scraper, ebay comp tracker, terapeak alternative, watchcount alternative, ebay resale price api, ebay flipping tool, antique comp scraper, sneaker resale price api, watch comp tool, collectible card price scraper.

---

### Why this actor

| Other eBay scrapers | **This actor** |
|---|---|
| Pull active listings (asking prices, not sold prices) | Pull only completed and sold listings, real sale data |
| Need a Terapeak subscription | Pay per sold listing, no contract |
| Charge $24 to $99 a month for the same public data | Apify free tier on the first 25 sold listings per run |
| Return one HTML blob per page | Item ID, title, sold price, currency, sold date, condition, bids, shipping parsed |
| Get rate limited at five rows | Built on residential proxy with session pooling for sustained runs |

---

### How it works

```mermaid
flowchart LR
    A[Keyword or category] --> B[Build Finding API call<br/>findCompletedItems]
    B --> C[itemFilter SoldItemsOnly=true<br/>Condition, MinPrice, MaxPrice, EndTimeFrom]
    C --> D[Paginate JSON pages<br/>100 items per page]
    D --> E[Map item to row<br/>itemId title sellingStatus listingInfo]
    E --> F[Drop rows outside filters<br/>belt-and-braces]
    F --> G[Push one row per sold listing]
    G --> H[(JSON CSV Excel API)]
````

The actor calls eBay's Finding API `findCompletedItems` operation, passing `SoldItemsOnly=true` and any condition or price filters as indexed `itemFilter` parameters. Pagination is bounded by `maxListingsPerSource`. Sold price is read from `sellingStatus.currentPrice`, which is the actual transaction value (Best Offer accepted prices included). Sold date comes from `listingInfo.endTime` and is normalized to ISO 8601.

***

### What you get per row

```mermaid
flowchart LR
    R[Sold listing row] --> R1[Identity<br/>itemId url title]
    R --> R2[Sale<br/>soldPrice currency soldDate condition]
    R --> R3[Format<br/>isAuction isBuyItNow bidsCount shippingCost]
    R --> R4[Provenance<br/>sellerName imageUrl region searchQuery]
```

Pipe straight into a comp pricing sheet, a resale margin tracker, or a probate fair-market value report.

***

### Quick start

**Track 90 days of sneaker sales**

```json
{
  "queries": ["nike dunk low panda size 10"],
  "maxListingsPerSource": 100,
  "daysBack": 90
}
```

**Watch market comps for graded cards**

```json
{
  "queries": [
    "pokemon charizard psa 9",
    "pokemon pikachu illustrator"
  ],
  "conditions": ["used"],
  "minPrice": 100
}
```

**UK watch market comp**

```json
{
  "queries": ["omega seamaster 2531"],
  "region": "GB",
  "conditions": ["used", "preowned"],
  "minPrice": 1000,
  "maxPrice": 5000
}
```

***

### Sample output

```json
{
  "itemId": "275842310912",
  "url": "https://www.ebay.com/itm/275842310912",
  "title": "Nike Dunk Low Panda Black White DD1391-100 Men's Size 10 Brand New",
  "soldPrice": 112.50,
  "currency": "USD",
  "soldDate": "2026-05-08",
  "condition": "new",
  "isAuction": false,
  "isBuyItNow": true,
  "bidsCount": 0,
  "shippingCost": 0.00,
  "freeShipping": true,
  "sellerName": "kicks_central",
  "imageUrl": "https://i.ebayimg.com/images/g/abc/s-l500.jpg",
  "region": "US",
  "searchQuery": "nike dunk low panda size 10",
  "categoryId": null,
  "scrapedAt": "2026-05-10T09:30:00.000Z"
}
```

***

### Who uses this

| Role | Use case |
|---|---|
| Vintage / antique dealer | Pull comps before pricing inventory or buying at auction |
| Sneaker reseller | Benchmark the last 90 days of size-specific sales |
| Watch trader | Track real sold prices across reference numbers |
| Collectible card flipper | Price PSA / BGS graded cards by recent comps |
| Used equipment dealer | Build bid sheets from completed industrial sales |
| Probate / estate appraiser | Document fair market value with sale-by-sale evidence |
| Insurance adjuster | Validate claim values with comparable sale data |
| Marketplace seller | Set prices that match the market, not aspiration |

***

### Input reference

| Field | Type | What it does |
|---|---|---|
| `queries` | string\[] | Search keywords. One Finding API search per query. |
| `categoryIds` | string\[] | Optional eBay category IDs. Each category combines with each query. |
| `conditions` | string\[] | Filter by condition. Empty includes everything. |
| `minPrice` | integer | Drop listings sold below this price. |
| `maxPrice` | integer | Drop listings sold above this price. Zero disables. |
| `daysBack` | integer | Only return sales completed within the last N days. Max 90. Default 90. |
| `region` | string | Regional eBay marketplace. Default US. |
| `maxListingsPerSource` | integer | Max sold listings collected per query or category. Default 100. |
| `ebayAppId` | string (secret) | Optional. Your own eBay Finding API App ID. Bring your own to bypass the shared 5,000 calls/day quota. Free at developer.ebay.com. |

***

### API call

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/YOUR_USER~ebay-sold-listings-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "queries": ["nike dunk low panda"],
    "maxListingsPerSource": 100,
    "daysBack": 90
  }'
```

***

### Pricing

The first 25 sold listing rows per run are free so you can validate output before paying. After that, each sold listing row is charged. No surprise add on charges.

***

### FAQ

#### How far back does eBay's sold index go?

eBay typically surfaces the last 90 days of sold and completed listings in the public SERP. Some categories show shorter windows. Set `daysBack` to clip whatever the SERP returns.

#### Can I get the actual buyer username?

No. eBay anonymizes buyer IDs on the public completed listings view. The actor returns the seller name where shown.

#### Best Offer accepted versus Buy It Now price?

eBay shows the final accepted Best Offer when an offer was accepted. The actor returns that as `soldPrice` because it is the real transaction price, not the listed Buy It Now.

#### What about eBay UK / DE / AU?

Set `region` to GB, DE, AU, CA, FR, IT, or ES. Currency follows the regional storefront.

#### Is the shipping cost included in the sold price?

No. `soldPrice` is the item price only. `shippingCost` is returned as a separate field, with `freeShipping: true` when applicable.

#### How fresh is the data?

Each run hits the live SERP, so sold prices reflect what eBay shows at scrape time. Schedule daily runs to track price drift across a niche.

#### Is scraping eBay allowed?

This actor reads HTML any anonymous web visitor can see. Respect eBay's terms and rate limit sensibly. Do not redistribute personal data you have no lawful basis to process.

***

### Related actors

- **Etsy Listings & Seller Intel Scraper** — pull active Etsy listings with shop sales, years active, and star seller status
- **Amazon Product Scraper** — pull product listings, prices, and badges from Amazon storefronts
- **Facebook Marketplace Deal Finder** — pull live Marketplace listings with price, location, and seller
- **G2 Reviews Scraper** — pull SaaS product ratings, top features, top cons, and review snippets
- **Glassdoor Company & Salary Scraper** — pull company rating, headquarters, size, founded year, and salary ranges

# Actor input Schema

## `queries` (type: `array`):

Keywords to search Mercari's sold-items index. Each query runs as one search. Examples: 'pokemon charizard psa 9', 'nike dunk low panda size 10', 'iphone 13 pro max 256gb'.

## `minPrice` (type: `integer`):

Drop listings sold below this price.

## `maxPrice` (type: `integer`):

Drop listings sold above this price. Zero or empty disables the cap.

## `maxListingsPerSource` (type: `integer`):

Stop paginating for a given query once this many sold listings have been collected. Higher numbers add latency and proxy cost.

## `concurrency` (type: `integer`):

Number of search pages processed in parallel. Three is a safe default for Mercari.

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

Apify proxy. Residential is required at any meaningful volume.

## Actor input object example

```json
{
  "queries": [
    "nike dunk low panda"
  ],
  "minPrice": 0,
  "maxPrice": 0,
  "maxListingsPerSource": 60,
  "concurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "queries": [
        "nike dunk low panda"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapemint/ebay-sold-listings-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 = {
    "queries": ["nike dunk low panda"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapemint/ebay-sold-listings-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 '{
  "queries": [
    "nike dunk low panda"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call scrapemint/ebay-sold-listings-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Mercari Sold Listings Scraper (eBay Alternative Comp Tracker)",
        "description": "Pull eBay's public sold/completed listings by keyword or category. Each row carries item ID, title, sold price, sold date, condition, bids, shipping, seller, and image URL. Real sale prices, not asking prices. JSON. No login. Pay per sold listing.",
        "version": "0.1",
        "x-build-id": "AlD2zyI4b2fG7rT05"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapemint~ebay-sold-listings-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapemint-ebay-sold-listings-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/scrapemint~ebay-sold-listings-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapemint-ebay-sold-listings-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/scrapemint~ebay-sold-listings-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapemint-ebay-sold-listings-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": {
                    "queries": {
                        "title": "Search keywords",
                        "type": "array",
                        "description": "Keywords to search Mercari's sold-items index. Each query runs as one search. Examples: 'pokemon charizard psa 9', 'nike dunk low panda size 10', 'iphone 13 pro max 256gb'.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "minPrice": {
                        "title": "Minimum sold price (USD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Drop listings sold below this price.",
                        "default": 0
                    },
                    "maxPrice": {
                        "title": "Maximum sold price (USD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Drop listings sold above this price. Zero or empty disables the cap.",
                        "default": 0
                    },
                    "maxListingsPerSource": {
                        "title": "Max listings per query",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Stop paginating for a given query once this many sold listings have been collected. Higher numbers add latency and proxy cost.",
                        "default": 60
                    },
                    "concurrency": {
                        "title": "Concurrency",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Number of search pages processed in parallel. Three is a safe default for Mercari.",
                        "default": 3
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify proxy. Residential is required at any meaningful volume.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
