# Startpage Search Scraper (`igolaizola/startpage-search-scraper`) Actor

Scrape organic SERPs from startpage.com, a privacy-focused alternative to Google Search. Collect rankings, titles, URLs, snippets, domains, and sitelinks for SEO research. Export JSON, CSV, or Excel, or access results via API.

- **URL**: https://apify.com/igolaizola/startpage-search-scraper.md
- **Developed by:** [Iñigo Garcia Olaizola](https://apify.com/igolaizola) (community)
- **Categories:** SEO tools, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 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/docs.md):

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

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

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

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

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

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

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

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

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


# README

## Startpage Search Scraper — Organic SERP Rankings, URLs & SEO Data

Startpage Search Scraper extracts organic SERPs from startpage.com, a privacy-focused alternative to Google Search. Use it for SEO research, competitor monitoring, content discovery, and lead generation; run multiple queries, apply regional or recency filters, and export analysis-ready results in JSON, CSV, or Excel, or access them via API.

### 🤖 What does Startpage Search Scraper do?

- **Organic rankings** — collect overall and page-level result positions.
- **Page details** — extract titles, destination URLs, display URLs, domains, and snippets.
- **Related links** — capture sitelinks when Startpage displays them.
- **Anonymous View links** — collect privacy-viewing links when available.
- **Search targeting** — control region, language, Safe Search, time period, and result count.

**Great for:** SEO tracking, competitor research, link prospecting, content analysis, and lead list building.

> SEO keywords: **startpage.com scraper**, **Startpage SERP API**, **Google Search alternative**, **scrape organic search results**, **privacy search data**, **Apify actor**.

### 💡 Why scrape Startpage search results?

- 📈 **Track organic visibility** — see which domains and pages rank for important queries.
- 🎯 **Find prospects** — build focused URL and domain lists for outreach or partnerships.
- 🔎 **Discover competitors** — identify publishers and businesses appearing around a topic.
- 🗓️ **Monitor changes** — schedule repeated runs to compare rankings and snippets over time.
- 🌍 **Research markets** — compare result sets across supported regions and languages.

### 🚀 How to use

1. **Add the actor** — open **Startpage Search Scraper** in Apify Store.
2. **Enter queries** — add one or more keywords, phrases, or search operators to `queries`.
3. **Choose a limit** — set `maxItems` and optionally select region, language, Safe Search, or time period.
4. **Run the actor** — click **Run** or trigger it through an Apify integration.
5. **Download results** — export the Dataset as JSON, CSV, Excel, XML, or another supported format.

### 📝 Input Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `queries` | String array | Yes | Keywords or search operators. Each query is paginated before the next starts. |
| `maxItems` | Integer | Yes | Maximum organic results to save across all queries. Set `0` for unlimited. Minimum `0`; prefilled with `10`. |
| `region` | String | No | Preferred result region. Choose `all` or a supported locale such as `en_US`, `de_DE`, `es_ES`, or `en-GB_GB`. Default `all`. |
| `language` | String | No | Preferred result language selected from 82 Startpage-supported languages. Default `english`. |
| `safeSearch` | String | No | Explicit-content filtering: `strict` · `moderate` · `off`. Default `moderate`. |
| `timePeriod` | String | No | Recency filter: `any` · `day` · `week` · `month` · `year`. Default `any`. |

**SEO competitor research**

```json
{
  "queries": ["best web scraping platforms", "web scraping API"],
  "maxItems": 50,
  "region": "en_US",
  "language": "english",
  "safeSearch": "moderate",
  "timePeriod": "month"
}
````

**Recent pages from a specific domain**

```json
{
  "queries": ["site:apify.com scraping actors"],
  "maxItems": 100,
  "region": "en-GB_GB",
  "language": "english",
  "safeSearch": "strict",
  "timePeriod": "week"
}
```

### 📊 Output Results

Each Dataset item can contain:

- **query** *(string)* — original search query.
- **position** *(number)* — overall rank across saved pages.
- **page** *(number)* — Startpage result page number.
- **pagePosition** *(number)* — rank within that page.
- **title** *(string)* — result headline.
- **url** *(string)* — destination URL.
- **displayUrl** *(string)* — URL text shown in the result.
- **domain** *(string)* — destination hostname.
- **snippet** *(string)* — result description.
- **sitelinks** *(array, conditional)* — related links shown below the result.
- **anonymousViewUrl** *(string, conditional)* — Anonymous View link.

```json
{
  "query": "best web scraping platforms",
  "position": 1,
  "page": 1,
  "pagePosition": 1,
  "title": "Web Scraping, Data Extraction and Automation",
  "url": "https://apify.com/",
  "displayUrl": "https://apify.com",
  "domain": "apify.com",
  "snippet": "Build and run web scrapers and automation tools in the cloud.",
  "sitelinks": [
    {"title": "Apify Store", "url": "https://apify.com/store"}
  ],
  "anonymousViewUrl": "https://browse.startpage.com/anonymous/example"
}
```

### 🧭 Common Recipes

- **Brand monitoring:** search a brand name, use `timePeriod="week"`, and schedule regular runs.
- **Link prospecting:** combine a topic with operators such as `inurl:resources` or `site:.org`.
- **Regional comparison:** repeat the same query with `region="en_US"`, `region="de_DE"`, and other target locales.
- **Fresh content discovery:** use `timePeriod="day"` or `timePeriod="week"`.

### ⚙️ Best Practices

- Start with 10–50 results while refining queries, then increase `maxItems`.
- Keep queries, region, and language stable when comparing scheduled runs.
- Region and language are preferences; Startpage may still include relevant results from elsewhere.
- Sitelinks and Anonymous View URLs are conditional and will not appear for every result.

### ⚖️ Legal & Ethical Considerations

- Review Startpage's terms and applicable website policies before collecting data.
- Keep request volumes reasonable and avoid disrupting services.
- Handle personal data under applicable privacy laws, including GDPR and CCPA where relevant.
- Respect copyrights and provide attribution when republishing collected content.
- Use the Dataset only for lawful research, monitoring, and business purposes.

This Actor is an independent tool and is **not affiliated with, endorsed by, or sponsored by Startpage**. All trademarks belong to their respective owners.

### ❓ FAQ

**Does the actor include advertisements?**

No. It focuses on organic web results and excludes sponsored placements and unrelated page modules.

**How many results can I collect?**

Set `maxItems` to the desired combined limit, or use `0` to exhaust every query. PPE run limits still apply when configured.

**Why do rankings differ between runs?**

Search results change with time, region, and language. Keep these settings stable for comparable monitoring.

**Are sitelinks and Anonymous View links always available?**

No. They appear only when Startpage includes them for a result.

### 🛟 Support

Need a custom field, filter, or export workflow? Contact the developer at https://igolaizola.com/#contact or https://t.me/igolaizola.

# Actor input Schema

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

One or more search queries. Each query is paginated fully before the next one starts.

## `maxItems` (type: `integer`):

Maximum number of organic search results to save across all queries.

## `region` (type: `string`):

Region whose web results should be preferred.

## `language` (type: `string`):

Preferred language for search results.

## `safeSearch` (type: `string`):

Level of explicit-content filtering.

## `timePeriod` (type: `string`):

Only return results from the selected recent period.

## Actor input object example

```json
{
  "queries": [
    "apify"
  ],
  "maxItems": 10,
  "region": "all",
  "language": "english",
  "safeSearch": "moderate",
  "timePeriod": "any"
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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": [
        "apify"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("igolaizola/startpage-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 = {
    "queries": ["apify"],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("igolaizola/startpage-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 '{
  "queries": [
    "apify"
  ],
  "maxItems": 10
}' |
apify call igolaizola/startpage-search-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Startpage Search Scraper",
        "description": "Scrape organic SERPs from startpage.com, a privacy-focused alternative to Google Search. Collect rankings, titles, URLs, snippets, domains, and sitelinks for SEO research. Export JSON, CSV, or Excel, or access results via API.",
        "version": "0.0",
        "x-build-id": "cNUgoeOeHJsSHOudv"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/igolaizola~startpage-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-igolaizola-startpage-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/igolaizola~startpage-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-igolaizola-startpage-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/igolaizola~startpage-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-igolaizola-startpage-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",
                "required": [
                    "queries",
                    "maxItems"
                ],
                "properties": {
                    "queries": {
                        "title": "Search queries",
                        "minItems": 1,
                        "type": "array",
                        "description": "One or more search queries. Each query is paginated fully before the next one starts.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItems": {
                        "title": "Maximum results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of organic search results to save across all queries."
                    },
                    "region": {
                        "title": "Region",
                        "enum": [
                            "all",
                            "es_AR",
                            "en_AU",
                            "de_AT",
                            "ru_BY",
                            "fr_BE",
                            "nl_BE",
                            "pt-BR_BR",
                            "bg_BG",
                            "en_CA",
                            "fr_CA",
                            "es_CL",
                            "zh-CN_CN",
                            "es_CO",
                            "cs_CZ",
                            "da_DK",
                            "ar_EG",
                            "et_EE",
                            "fi_FI",
                            "fr_FR",
                            "de_DE",
                            "el_GR",
                            "zh-TW_HK",
                            "hu_HU",
                            "en_IN",
                            "hi_IN",
                            "en_ID",
                            "id_ID",
                            "en_IE",
                            "it_IT",
                            "ja_JP",
                            "ko_KR",
                            "en_MY",
                            "ms_MY",
                            "es_MX",
                            "nl_NL",
                            "en_NZ",
                            "no_NO",
                            "es_PE",
                            "en_PH",
                            "fil_PH",
                            "pl_PL",
                            "pt_PT",
                            "ro_RO",
                            "ru_RU",
                            "en_SG",
                            "ms_SG",
                            "en_ZA",
                            "ca_ES",
                            "es_ES",
                            "sv_SE",
                            "de_CH",
                            "fr_CH",
                            "it_CH",
                            "zh-TW_TW",
                            "tr_TR",
                            "uk_UA",
                            "en-GB_GB",
                            "es_UY",
                            "en_US",
                            "es_US",
                            "es_VE",
                            "en_VN",
                            "vi_VN"
                        ],
                        "type": "string",
                        "description": "Region whose web results should be preferred.",
                        "default": "all"
                    },
                    "language": {
                        "title": "Search language",
                        "enum": [
                            "afrikaans",
                            "arabic",
                            "amharic",
                            "azerbaijani",
                            "indonesian",
                            "malay",
                            "bulgarian",
                            "bengali",
                            "javanese",
                            "sudanese",
                            "bosnian",
                            "brazilian",
                            "belarusian",
                            "catalan",
                            "czech",
                            "welsh",
                            "dansk",
                            "deutsch",
                            "estonian",
                            "greek",
                            "english",
                            "espanol",
                            "esperanto",
                            "basque",
                            "persian",
                            "tagalog",
                            "faroese",
                            "francais",
                            "frisian",
                            "irish",
                            "gaelic",
                            "galician",
                            "gujarati",
                            "hindi",
                            "croatian",
                            "interlingua",
                            "xhosa",
                            "zulu",
                            "icelandic",
                            "italiano",
                            "hebrew",
                            "kannada",
                            "georgian",
                            "swahili",
                            "latin",
                            "latvian",
                            "lithuanian",
                            "hungarian",
                            "bihari",
                            "macedonian",
                            "malayalam",
                            "maltese",
                            "marathi",
                            "nederlands",
                            "nepali",
                            "norsk",
                            "uzbek",
                            "occitan",
                            "thai",
                            "polski",
                            "portugues",
                            "punjabi",
                            "romanian",
                            "russian",
                            "albanian",
                            "sinhalese",
                            "slovak",
                            "slovenian",
                            "serbian",
                            "suomi",
                            "svenska",
                            "tamil",
                            "telugu",
                            "vietnamese",
                            "tigrinya",
                            "turkce",
                            "ukrainian",
                            "urdu",
                            "hangul",
                            "jiantizhongwen",
                            "nihongo",
                            "fantizhengwen"
                        ],
                        "type": "string",
                        "description": "Preferred language for search results.",
                        "default": "english"
                    },
                    "safeSearch": {
                        "title": "Safe Search",
                        "enum": [
                            "strict",
                            "moderate",
                            "off"
                        ],
                        "type": "string",
                        "description": "Level of explicit-content filtering.",
                        "default": "moderate"
                    },
                    "timePeriod": {
                        "title": "Time period",
                        "enum": [
                            "any",
                            "day",
                            "week",
                            "month",
                            "year"
                        ],
                        "type": "string",
                        "description": "Only return results from the selected recent period.",
                        "default": "any"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
