# Remotive Scraper - Remote Jobs & Salaries | $3/1K Jobs (`santamaria-automations/remotive-scraper`) Actor

Extract remote jobs from Remotive.com. 25 fields: salary (min/max), full description (text + HTML), skills/tags, job type, category, company (logo/website/tagline/profile/open positions). Remote job search data extraction for Software dev, design, marketing, DevOps, QA, product and similar roles.

- **URL**: https://apify.com/santamaria-automations/remotive-scraper.md
- **Developed by:** [Ale](https://apify.com/santamaria-automations) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 jobs

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

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

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

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

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

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

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

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

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

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


# README

## Remotive Scraper - Remote Jobs, Salaries & Companies

Extract remote job listings from [Remotive.com](https://remotive.com) — a curated remote job board with hundreds of active listings across software development, design, marketing, DevOps, QA, and more. Get structured data including salaries, full descriptions, company info, and apply URLs. No code needed.

---

### What data can you extract?

Every job listing includes:

**Job details**
- Job title and unique ID
- Full description (plain text + raw HTML)
- Category (e.g. "Software Development", "Design", "Marketing")
- Tags / role keywords
- Job type (full-time, part-time, contract, freelance)
- Salary: structured min/max + currency + display text
- Posting date (ISO 8601)
- Direct apply URL

**Company details**
- Company name
- Company logo URL
- Company website (with `includeCompanyInfo`)
- Company tagline (with `includeCompanyInfo`)
- Open positions count (with `includeCompanyInfo`)
- Company profile URL (with `includeCompanyInfo`)

**Location**
- Required candidate location (e.g. "Worldwide", "USA Only", "Europe", or specific regions)

**Meta**
- Source URL on Remotive
- Which search query or URL found the job
- Scrape timestamp

---

### Pricing

| Event | Cost | Trigger |
|-------|------|---------|
| Actor start | **$0.001** | Once per run |
| Per job result | **$0.003** | Each job added to dataset |

**Examples:**

| Jobs | Cost |
|------|------|
| 10 jobs | $0.03 |
| 100 jobs | $0.30 |
| 1,000 jobs | $3.00 |

Every job includes the full description, salary, tags, and apply URL. No hidden fees, no monthly subscription.

---

### Use with AI Agents (MCP)

Connect this actor to any MCP-compatible AI client — Claude Desktop, Claude.ai, Cursor, VS Code, LangChain, LlamaIndex, or custom agents.

**Apify MCP server URL:**

````

https://mcp.apify.com?tools=santamaria-automations/remotive-scraper

````

**Example prompt once connected:**

> "Use `remotive-scraper` to find remote software development jobs. Return the top 20 results as a table with title, company, salary, and location."

> "Use `remotive-scraper` to extract all remote design jobs and filter for those offering $80k+ salary."

---

### How to use

The scraper supports two input modes:

#### 1. Search URLs (recommended)

Go to [remotive.com/remote-jobs](https://remotive.com/remote-jobs), apply filters in the browser, and paste the URL. Both category paths and filter query parameters are supported.

**Category URL:**
```json
{
  "searchUrls": [
    "https://remotive.com/remote-jobs/software-dev",
    "https://remotive.com/remote-jobs/design"
  ]
}
````

**Filter URL (from browser):**

```json
{
  "searchUrls": [
    "https://remotive.com/remote-jobs?query=golang&location=Germany&employment-type=full-time&skills=golang,go&min_salary=10000"
  ]
}
```

Supported filter parameters:

- `query` — free-text search (maps to API search)
- `location` — filters results by candidate location
- `employment-type` — comma-separated: full-time, part-time, contract, freelance, internship
- `skills` — comma-separated tag filter
- `min_salary` — minimum salary threshold

#### 2. Search Keywords

Enter one or more search terms. Known category slugs map directly; other terms use the API search endpoint.

Available categories: `software-dev`, `design`, `customer-service`, `marketing`, `writing`, `devops`, `qa`, `product`, `business`, `data`, `finance`, `hr`, `legal`, `sales`, `all-others`

```json
{
  "searchQueries": ["golang", "react developer", "devops"],
  "maxResultsPerQuery": 50
}
```

#### 3. Company enrichment

Enable `includeCompanyInfo` to fetch each company's profile page and extract their website, tagline, and open positions count.

```json
{
  "searchUrls": ["https://remotive.com/remote-jobs?query=developer"],
  "includeCompanyInfo": true,
  "maxResults": 20
}
```

***

### Input reference

| Field | Type | Description |
|-------|------|-------------|
| `searchUrls` | string\[] | Remotive URLs — category paths or filter URLs with query params. |
| `searchQueries` | string\[] | Search terms or category keywords. |
| `includeCompanyInfo` | boolean | Fetch company profiles for website, tagline, positions (default: false). |
| `maxResultsPerQuery` | integer | Max results per keyword/URL (default 100). |
| `maxResults` | integer | Total cap across all modes (default 10, 0 = unlimited). |
| `proxyConfiguration` | object | Proxy settings. Datacenter proxies work great. |

***

### Output example

```json
{
  "id": "1842567",
  "title": "Senior Backend Engineer",
  "company": "Automattic",
  "company_logo_url": "https://remotive.com/job/1842567/logo",
  "company_website": "https://automattic.com",
  "company_tagline": "We are the people behind WordPress.com",
  "company_open_positions": 12,
  "company_profile_url": "https://remotive.com/remote-companies/automattic",
  "location": "Worldwide",
  "category": "Software Development",
  "tags": ["python", "aws", "docker"],
  "job_type": "full_time",
  "description_full": "About the Role\nWe're looking for a Senior Backend Engineer to join our platform team...",
  "description_html": "<p>About the Role</p><p>We're looking for a Senior Backend Engineer...</p>",
  "salary_min": 120000,
  "salary_max": 170000,
  "salary_currency": "USD",
  "salary_period": "year",
  "salary_text": "$120,000 - $170,000",
  "posted_at": "2026-05-01T00:00:00",
  "source_url": "https://remotive.com/remote-jobs/software-dev/senior-backend-engineer-1842567",
  "source_platform": "remotive.com",
  "apply_url": "https://remotive.com/remote-jobs/software-dev/senior-backend-engineer-1842567",
  "search_query": "https://remotive.com/remote-jobs?query=developer",
  "scraped_at": "2026-05-04T14:30:00Z"
}
```

Note: `company_website`, `company_tagline`, `company_open_positions`, and `company_profile_url` are only populated when `includeCompanyInfo` is enabled.

***

### Use cases

#### Remote job aggregation

Build a comprehensive remote job feed by combining Remotive with other remote boards (RemoteOK, WeWorkRemotely). Deduplicate across sources for a unified dataset.

#### Skills demand tracking

Use the tags/skills array to track which technologies are most in-demand for remote roles. Monitor trends across categories (engineering vs. design vs. marketing).

#### Salary benchmarking

Compare remote salary ranges across categories and locations. Build compensation intelligence for remote-first companies.

#### Recruitment automation

Feed remote job listings into your CRM, ATS, or candidate matching platform via Apify API, webhooks, or Zapier/Make integrations.

***

### Speed

| Jobs | ~Time | Memory |
|------|-------|--------|
| 10 | **~3 seconds** | ~16 MB |
| 100 | **~3 seconds** | ~16 MB |
| 500+ | **~5 seconds** | ~16 MB |
| 100 + company info | **~30 seconds** | ~16 MB |

Remotive returns all matching jobs in a single API call, so even large result sets complete in seconds. Company enrichment adds ~0.5s per unique company.

***

### Integrations

This actor works with all Apify integrations:

- **API** — trigger runs and download results programmatically
- **Webhooks** — get notified when a run completes
- **Zapier & Make** — connect to 5,000+ apps
- **Google Sheets** — export directly to a spreadsheet
- **Slack, Email** — get notifications with results

***

### Related actors

- [Dice Scraper](https://apify.com/santamaria-automations/dice-scraper) — US tech jobs with skills & company profiles
- [RemoteOK Scraper](https://apify.com/santamaria-automations/remoteok-scraper) — Remote jobs from RemoteOK.com
- [Indeed Scraper](https://apify.com/santamaria-automations/indeed-scraper) — 60+ countries, salary & company enrichment
- [Built In Scraper](https://apify.com/santamaria-automations/builtin-scraper) — US tech jobs with company tech stack

***

Something not working? [Create an issue](https://console.apify.com/actors/MPMOIReTpYaynzqq8/issues) and we'll fix it fast.

# Actor input Schema

## `searchUrls` (type: `array`):

Paste one or more Remotive URLs. Supports category URLs (remotive.com/remote-jobs/software-dev) and filter URLs with query params (remotive.com/remote-jobs?query=golang\&location=Germany\&employment-type=full-time\&skills=golang\&min\_salary=10000).

## `searchQueries` (type: `array`):

One or more search terms or category keywords (e.g. 'software-dev', 'design', 'golang', 'react developer'). Each runs as a separate search. Results are deduplicated across queries.

## `includeCompanyInfo` (type: `boolean`):

Fetch company profile pages to enrich results with company website, tagline, open positions count, and profile URL. Adds ~0.5s per unique company.

## `maxResultsPerQuery` (type: `integer`):

Maximum results per search URL or keyword.

## `maxResults` (type: `integer`):

Total cap across all queries and search URLs. Set to 0 for unlimited.

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

Proxy configuration. Default uses Apify datacenter proxies.

## Actor input object example

```json
{
  "searchUrls": [
    "https://remotive.com/remote-jobs?query=developer"
  ],
  "includeCompanyInfo": false,
  "maxResultsPerQuery": 100,
  "maxResults": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": []
  }
}
```

# Actor output Schema

## `jobListings` (type: `string`):

Dataset containing scraped remote job listings. Each record includes: job title, company name, company logo URL, company website, company tagline, company open positions, company profile URL, location, category, tags, job type, salary (min/max/currency/period/text), full description (plain text + HTML), posting date, apply URL, source URL.

# 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 = {
    "searchUrls": [
        "https://remotive.com/remote-jobs?query=developer"
    ],
    "maxResultsPerQuery": 100,
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("santamaria-automations/remotive-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 = {
    "searchUrls": ["https://remotive.com/remote-jobs?query=developer"],
    "maxResultsPerQuery": 100,
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("santamaria-automations/remotive-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 '{
  "searchUrls": [
    "https://remotive.com/remote-jobs?query=developer"
  ],
  "maxResultsPerQuery": 100,
  "maxResults": 10
}' |
apify call santamaria-automations/remotive-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Remotive Scraper - Remote Jobs & Salaries | $3/1K Jobs",
        "description": "Extract remote jobs from Remotive.com. 25 fields: salary (min/max), full description (text + HTML), skills/tags, job type, category, company (logo/website/tagline/profile/open positions). Remote job search data extraction for Software dev, design, marketing, DevOps, QA, product and similar roles.",
        "version": "1.0",
        "x-build-id": "o2X0wphLCo26IBrEm"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/santamaria-automations~remotive-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-santamaria-automations-remotive-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/santamaria-automations~remotive-scraper/runs": {
            "post": {
                "operationId": "runs-sync-santamaria-automations-remotive-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/santamaria-automations~remotive-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-santamaria-automations-remotive-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": {
                    "searchUrls": {
                        "title": "Search URLs",
                        "type": "array",
                        "description": "Paste one or more Remotive URLs. Supports category URLs (remotive.com/remote-jobs/software-dev) and filter URLs with query params (remotive.com/remote-jobs?query=golang&location=Germany&employment-type=full-time&skills=golang&min_salary=10000).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchQueries": {
                        "title": "Search Keywords",
                        "type": "array",
                        "description": "One or more search terms or category keywords (e.g. 'software-dev', 'design', 'golang', 'react developer'). Each runs as a separate search. Results are deduplicated across queries.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "includeCompanyInfo": {
                        "title": "Include Company Info",
                        "type": "boolean",
                        "description": "Fetch company profile pages to enrich results with company website, tagline, open positions count, and profile URL. Adds ~0.5s per unique company.",
                        "default": false
                    },
                    "maxResultsPerQuery": {
                        "title": "Max Results per Query",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum results per search URL or keyword.",
                        "default": 100
                    },
                    "maxResults": {
                        "title": "Max Total Results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Total cap across all queries and search URLs. Set to 0 for unlimited.",
                        "default": 10
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy configuration. Default uses Apify datacenter proxies.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": []
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
