# Freelancermap Scraper — German IT Freelance Projects & Profiles (`studio-amba/freelancermap-scraper`) Actor

Scrape freelancermap.de, the German IT-freelancer marketplace. Get open freelance project listings (title, company, skills, location, remote, dates) or freelancer profiles (headline, skills, location). No login.

- **URL**: https://apify.com/studio-amba/freelancermap-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 result scrapeds

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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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

## Freelancermap Scraper

Scrape freelancermap.de, the largest German IT-freelancer marketplace, for open freelance project listings or freelancer profiles — including disclosed hourly/daily rates, skills, location, and remote status.

### Why use this actor?

Recruiters, staffing agencies, and B2B sales teams use freelancermap.de to find IT freelancers or to see who's hiring contractors right now. This actor turns both sides of that marketplace into structured data: **project listings** tell you which companies are actively looking for freelance IT talent (a live buying signal — company name, contact person, required skills, start date, contract length), and **freelancer profiles** tell you who's available, what they charge, and how to reach them (name, headline, skills, city, hourly/daily rate when public, latest role). No account, no login required.

### How to scrape Freelancermap data

freelancermap.de server-renders its search results as HTML, but it also embeds the full underlying data as a JSON payload inside the page (a React hydration script tag) — this actor reads that JSON directly instead of parsing brittle CSS selectors. That means every run returns the **complete project description or freelancer work history** in a single request, with no separate "detail page" fetch needed.

1. Pick a **mode**: `projects` for open freelance project listings, or `freelancers` for the searchable freelancer directory.
2. Give it one or more **search queries** — German IT keywords or skills such as `SAP`, `Java`, `.NET`, `Projektmanagement`, `Netzwerk`, `SAP FI`, or a city name via the location filter.
3. Run it. The actor fetches each query's results page, extracts the embedded JSON, maps every project or profile to a clean output row, and pushes it to the dataset — full description, skill tags, and (for freelancers) disclosed hourly/daily rate included.
4. Export as JSON, CSV, or Excel, or pull it via the Apify API into your CRM or lead list.

Leave the input empty (`{}`) and the actor still returns real data: it runs a small set of default German IT keywords (`SAP`, `Java`, `Projektmanagement`, `Netzwerk`) plus the site's general recommended feed.

#### A note on pagination

freelancermap.de shows anonymous (non-logged-in) visitors the first page of results for any given search — requesting page 2 is gated behind account registration ("Registrieren Sie sich, um mehr Suchergebnisse zu sehen"). The actor detects this automatically: it requests additional pages defensively, and the moment a page repeats the previous page's results it stops that query and moves to the next one. To cover more ground in a single run, pass several `searchQueries` (e.g. `["SAP", "Java", "Python", "Netzwerk", "Projektmanagement"]`) — each query typically surfaces 18-28 distinct results, and results are deduplicated by ID across all of them.

### Input

| Field | Type | Required | Description |
|-------|------|----------|--------------|
| `mode` | String | No | `projects` (default) for freelance project listings, `freelancers` for the profile directory |
| `searchQueries` | Array of strings | No | German keywords/skills, e.g. `["SAP", "Java", "Projektmanagement"]`. Leave empty for the default IT keyword set |
| `location` | String | No | Filter by city (German spelling, e.g. `Berlin`, `München`, `Hamburg`) |
| `remoteOnly` | Boolean | No | Only return 100% remote projects/freelancers |
| `maxResults` | Integer | No | Maximum results across all queries (default: 60) |
| `proxyConfiguration` | Object | No | Proxy settings — freelancermap.de has no anti-bot protection, Apify datacenter proxies work fine |

### Output

#### Mode: `projects`

| Field | Type | Example |
|-------|------|---------|
| `title` | String | `"Interim Corporate Purchasing Professional Services (m/w/d)"` |
| `company` | String | `"Michael Page"` |
| `posterName` | String | `"Alexander Jones"` |
| `city` | String | `"Düsseldorf"` |
| `locations` | Array | `["Düsseldorf", "Nordrhein-Westfalen"]` |
| `country` | String | `"Deutschland"` |
| `remoteInPercent` | Number | `0` |
| `startDate` | String | `"2026-08"` |
| `durationMonths` | Number | `5` |
| `extendable` | Boolean | `false` |
| `isTopProject` | Boolean | `false` |
| `isEndCustomer` | Boolean | `false` |
| `industry` | String | `"Handel"` |
| `skills` | Array | `["SAP FI", "SAP CO"]` |
| `description` | String | Full plain-text project description (up to 3,000 chars) |
| `postedDate` | String | ISO 8601 |
| `url` | String | Project page URL |

#### Mode: `freelancers`

| Field | Type | Example |
|-------|------|---------|
| `name` | String | `"Ralph Roßberger"` |
| `headline` | String | `"Fachinformatiker Spezialisierung Anwendungsentwicklung"` |
| `city` | String | `"Feldkirchen"` |
| `country` | String | `"Deutschland"` |
| `graduation` | String | `"Hochschulingenieurökonom"` |
| `availabilityPercent` | Number | `3` |
| `remoteOnly` | Boolean | `true` |
| `hourlyRate` | Number | `85` |
| `dailyRate` | Number | `680` |
| `currency` | String | `"EUR"` |
| `skills` | Array | `["Asp.Net", ".Net Framework", "Architektur"]` |
| `languages` | Array | `["de", "en"]` |
| `latestRoleCompany` | String | Most recent listed reference |
| `url` | String | Profile page URL |

### Example output

**Project:**

```json
{
    "type": "project",
    "id": "3028028",
    "title": "Interim Corporate Purchasing Professional Services (m/w/d)",
    "company": "Michael Page",
    "posterName": "Alexander Jones",
    "url": "https://www.freelancermap.de/projekt/interim-corporate-purchasing-professional-services-m-w-d-3028028",
    "city": "Düsseldorf",
    "locations": ["Düsseldorf", "Nordrhein-Westfalen"],
    "country": "Deutschland",
    "remoteInPercent": 0,
    "startDate": "2026-08",
    "durationMonths": 5,
    "extendable": false,
    "isTopProject": false,
    "isEndCustomer": false,
    "description": "Interim Corporate Purchasing Professional Services (m/w/d)...",
    "postedDate": "2026-07-24T21:43:11.000Z",
    "searchQuery": "SAP",
    "scrapedAt": "2026-07-26T09:49:13.843Z"
}
````

**Freelancer:**

```json
{
    "type": "freelancer",
    "id": "18704",
    "name": "Ralph Roßberger",
    "headline": "Fachinformatiker Spezialisierung Anwendungsentwicklung",
    "url": "https://www.freelancermap.de/profil/ralph-rossberger",
    "city": "Feldkirchen",
    "country": "Deutschland",
    "graduation": "Hochschulingenieurökonom",
    "availabilityPercent": 3,
    "remoteOnly": true,
    "hourlyRate": 85,
    "dailyRate": 680,
    "currency": "EUR",
    "rateComment": "Der Stunden- und Tagessatz ist ein Mittelwert und kann bei Bedarf verhandelt werden",
    "languages": ["de", "en"],
    "isVerified": false,
    "postedDate": "2010-10-24T22:00:00.000Z",
    "scrapedAt": "2026-07-26T09:48:36.605Z"
}
```

### Cost estimate

This actor makes one HTTP request per search page (no browser, no per-item detail fetch), so it's cheap to run: roughly **0.02-0.05 compute units per 1,000 results** on the default Apify datacenter proxy tier.

### Limitations

- freelancermap.de caps anonymous (non-logged-in) result pages at the first page per search query (~18-28 results). Use multiple `searchQueries` to broaden coverage in one run — results are deduplicated by ID.
- `hourlyRate`/`dailyRate` are only present when the freelancer chose to make them public — in practice around 60-80% of profiles disclose a rate. Project-side `budget` is almost never disclosed by companies on this marketplace.
- `skills` tags are only populated when the poster/profile owner explicitly assigned them — free-text mentions inside the description are not extracted separately.
- Data is scraped from the public website and may change without notice.

### Need this data on a schedule, or a custom version?

We run this scraper as a managed service for businesses: scheduled runs,
deduplication, delta detection, and delivery to your inbox, Google Sheets,
or API — maintenance included. We can also build a custom version with your
exact fields and filters, or combine multiple sources into one feed.

See [studioamba.dev/services](https://studioamba.dev/services/) or email
<hello@studioamba.dev> for a free data sample.
We maintain 300+ European web scrapers and answer within one business day.

# Actor input Schema

## `mode` (type: `string`):

'projects' scrapes open freelance project listings (fresh lead-gen data). 'freelancers' scrapes the searchable freelancer profile directory.

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

German keywords or skills to search (e.g. 'SAP', 'Java', 'Projektmanagement', 'Netzwerk'). Each query is run separately and results are merged. Leave empty to use a broad default set of popular IT keywords.

## `location` (type: `string`):

Filter by city (German spelling, e.g. 'Berlin', 'München', 'Hamburg'). Leave empty to search all of Germany/DACH.

## `remoteOnly` (type: `boolean`):

Only return 100% remote projects/freelancers.

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

Maximum number of results to return across all search queries.

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

Proxy settings. freelancermap.de has no anti-bot protection — Apify datacenter proxies work fine.

## Actor input object example

```json
{
  "mode": "projects",
  "searchQueries": [
    "SAP",
    "Java",
    "Projektmanagement"
  ],
  "remoteOnly": false,
  "maxResults": 30,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "searchQueries": [
        "SAP",
        "Java",
        "Projektmanagement"
    ],
    "maxResults": 30,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/freelancermap-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 = {
    "searchQueries": [
        "SAP",
        "Java",
        "Projektmanagement",
    ],
    "maxResults": 30,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/freelancermap-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 '{
  "searchQueries": [
    "SAP",
    "Java",
    "Projektmanagement"
  ],
  "maxResults": 30,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call studio-amba/freelancermap-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Freelancermap Scraper — German IT Freelance Projects & Profiles",
        "description": "Scrape freelancermap.de, the German IT-freelancer marketplace. Get open freelance project listings (title, company, skills, location, remote, dates) or freelancer profiles (headline, skills, location). No login.",
        "version": "0.1",
        "x-build-id": "T6iI7nHWOW3KTSZ9H"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/studio-amba~freelancermap-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-studio-amba-freelancermap-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/studio-amba~freelancermap-scraper/runs": {
            "post": {
                "operationId": "runs-sync-studio-amba-freelancermap-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/studio-amba~freelancermap-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-studio-amba-freelancermap-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": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "projects",
                            "freelancers"
                        ],
                        "type": "string",
                        "description": "'projects' scrapes open freelance project listings (fresh lead-gen data). 'freelancers' scrapes the searchable freelancer profile directory.",
                        "default": "projects"
                    },
                    "searchQueries": {
                        "title": "Search Queries",
                        "type": "array",
                        "description": "German keywords or skills to search (e.g. 'SAP', 'Java', 'Projektmanagement', 'Netzwerk'). Each query is run separately and results are merged. Leave empty to use a broad default set of popular IT keywords.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "Filter by city (German spelling, e.g. 'Berlin', 'München', 'Hamburg'). Leave empty to search all of Germany/DACH."
                    },
                    "remoteOnly": {
                        "title": "Remote Only",
                        "type": "boolean",
                        "description": "Only return 100% remote projects/freelancers.",
                        "default": false
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of results to return across all search queries.",
                        "default": 60
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings. freelancermap.de has no anti-bot protection — Apify datacenter proxies work fine."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
