# Startpage Images Scraper (`igolaizola/startpage-images-scraper`) Actor

Scrape image SERPs from startpage.com, a privacy-focused alternative to Google Search. Collect original images, thumbnails, source pages, dimensions, formats, file sizes, and rankings. Export JSON, CSV, or Excel, or access results via API.

- **URL**: https://apify.com/igolaizola/startpage-images-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 Images Scraper — Image SERPs, Sources & Dimensions

Startpage Images Scraper extracts image SERPs from startpage.com, a privacy-focused alternative to Google Search. Use it for visual research, asset discovery, brand monitoring, and image SEO analysis; collect original image URLs, thumbnails, source pages, dimensions, formats, file sizes, and rankings for export in JSON, CSV, or Excel, or access them via API.

### 🤖 What does Startpage Images Scraper do?

- **Original media** — collect direct original image and thumbnail URLs.
- **Source discovery** — capture the page where each image appears.
- **Technical details** — extract image dimensions, thumbnail dimensions, format, and reported file size.
- **Search rankings** — retain overall position, result page, and page-level position.
- **Search targeting** — filter by region, language, Safe Search, time period, and result count.

**Great for:** visual market research, brand monitoring, image sourcing, content planning, and image SEO.

> SEO keywords: **startpage.com image scraper**, **image SERP scraper**, **Google Search alternative**, **image search API alternative**, **original image URL extractor**, **Apify actor**.

### 💡 Why scrape Startpage images?

- 🖼️ **Discover visual assets** — find relevant images and their publishing pages quickly.
- 📊 **Analyze image SEO** — compare which sources and image formats rank for target queries.
- 🏷️ **Monitor brands and products** — track imagery associated with a name or campaign.
- 🔍 **Build research datasets** — collect image URLs with dimensions and file metadata.
- 🌍 **Compare markets** — see how image results vary by region and language.

### 🚀 How to use

1. **Add the actor** — open **Startpage Images Scraper** in Apify Store.
2. **Enter queries** — add one or more descriptions of the images you want to find.
3. **Set `maxItems`** — choose the number of image results and optional filters.
4. **Run the actor** — click **Run** or start 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 | Image search keywords. Each query is paginated before the next starts. |
| `maxItems` | Integer | Yes | Maximum image 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`, or `es_ES`. 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`. |

**Visual inspiration research**

```json
{
  "queries": ["sustainable architecture timber", "biophilic office design"],
  "maxItems": 100,
  "region": "en_US",
  "language": "english",
  "safeSearch": "moderate",
  "timePeriod": "year"
}
````

**Recent product imagery**

```json
{
  "queries": ["electric SUV concept interior"],
  "maxItems": 250,
  "region": "de_DE",
  "language": "deutsch",
  "safeSearch": "strict",
  "timePeriod": "month"
}
```

### 📊 Output Results

Each Dataset item can contain:

- **query**, **position**, **page**, **pagePosition** — search and ranking context.
- **title** — image title returned by Startpage.
- **imageUrl** — original image URL.
- **thumbnailUrl** — image preview URL.
- **sourceUrl** — page that publishes the image.
- **width**, **height** — original image dimensions in pixels.
- **thumbnailWidth**, **thumbnailHeight** — thumbnail dimensions in pixels.
- **format** — reported image format.
- **fileSize** — reported file size.
- **anonymousImageUrl** *(conditional)* — Startpage anonymous image link.

```json
{
  "query": "sustainable architecture timber",
  "position": 1,
  "page": 1,
  "pagePosition": 1,
  "title": "Timber office building with planted terraces",
  "imageUrl": "https://images.example.org/architecture/timber-office.jpg",
  "thumbnailUrl": "https://tse3.mm.bing.net/th/id/example",
  "sourceUrl": "https://example.org/projects/timber-office",
  "width": 2400,
  "height": 1600,
  "thumbnailWidth": 474,
  "thumbnailHeight": 316,
  "format": "jpeg",
  "fileSize": "548720 B",
  "anonymousImageUrl": "https://browse.startpage.com/av/anon-image/example"
}
```

### 🧭 Common Recipes

- **Image SEO audit:** search a product or topic and compare `sourceUrl`, format, and dimensions among top results.
- **Fresh campaign monitoring:** set `timePeriod="week"` and schedule recurring runs.
- **High-volume discovery:** raise `maxItems` after testing the query with 30–100 results.
- **Regional visual research:** repeat the same query with different `region` values.

### ⚙️ Best Practices

- Confirm usage rights on the source page before downloading or republishing an image.
- Treat dimensions and file size as source metadata; availability can vary between results.
- Keep filters stable when comparing image rankings over time.
- Original media can move or expire after collection because it is hosted by third-party sites.

### ⚖️ Legal & Ethical Considerations

- Review Startpage's terms and the source website's policies.
- Verify copyright, license, and attribution requirements before using any image.
- Do not use collected images to violate privacy, publicity, or intellectual-property rights.
- Keep request volumes reasonable and store only data needed for a legitimate purpose.
- Follow applicable privacy laws when images contain identifiable people.

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

### ❓ FAQ

**Does `imageUrl` point to the original image?**

Yes, when Startpage supplies it. `thumbnailUrl` is the smaller search preview and `sourceUrl` is the publishing page.

**Can I filter by exact image dimensions or license?**

Not currently. The actor records returned dimensions and format so you can filter the Dataset after the run.

**Why are some formats reported as `unknown`?**

The upstream result does not always identify the file type even when an image URL is available.

**Can I reuse every collected image?**

No. Search visibility does not grant reuse rights. Check the source page and applicable license first.

### 🛟 Support

Need another image 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 image results to save across all queries.

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

Region whose image 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": [
    "birds"
  ],
  "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": [
        "birds"
    ],
    "maxItems": 10
};

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

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

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Startpage Images Scraper",
        "description": "Scrape image SERPs from startpage.com, a privacy-focused alternative to Google Search. Collect original images, thumbnails, source pages, dimensions, formats, file sizes, and rankings. Export JSON, CSV, or Excel, or access results via API.",
        "version": "0.0",
        "x-build-id": "9RM3vaqao8CAsrqby"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/igolaizola~startpage-images-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-igolaizola-startpage-images-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-images-scraper/runs": {
            "post": {
                "operationId": "runs-sync-igolaizola-startpage-images-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-images-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-igolaizola-startpage-images-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 image 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 image 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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
