# CareerCross Scraper: Japan Bilingual Jobs (`getascraper/career-cross-scraper`) Actor

Scrape CareerCross Japan bilingual jobs. Extract JPY salaries, company data, and required language levels. Drop-in for HubSpot, Salesforce, and Airtable. Skip slow browser automation and expensive proxy costs. $1.99 per 1,000 results.

- **URL**: https://apify.com/getascraper/career-cross-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Jobs, Lead generation, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.99 / 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

## CareerCross Scraper: Japan Bilingual Job Listings

**CareerCross job scraper and Japanese bilingual recruitment data extraction API.** Extract public job vacancies, hiring companies, parsed salary ranges, required English and Japanese proficiency levels, visa statuses, industries, and full plain-text descriptions from careercross.com with this Apify Actor. Bypasses blocking without browser overhead using fast, static Cheerio code, delivering clean structured datasets in English or Japanese.

Whether you are a global recruitment agency tracking multinational hiring trends across Japan, an HR analytics platform benchmarking JPY salary scales, or a sales development team sourcing foreign companies currently expanding locally, this Actor delivers complete recruitment datasets on a scheduled basis.

---

### What does CareerCross Scraper do?

* **Highly Optimized Performance:** Connects directly to the static search results and detailed job pages, avoiding the overhead of browser-based automation like Playwright or Puppeteer.
* **Stable Google Jobs Selectors:** Targets explicit, hardcoded DOM identifiers (e.g., `#jsonld-job-title`, `#jsonld-base-salary` attributes) utilized by CareerCross for Google Jobs structured data, making the scraper extremely resilient to structural changes.
* **Precise Salary Extraction:** Normalizes salary text on-the-fly, extracting minimum and maximum bounds, currency (always JPY), and pay frequency.
* **Multi-Language UI Support:** Supports scraping via both English `/en/` and Japanese `/jp/` paths, allowing you to extract bilingual recruitment details seamlessly.

---

### Why use CareerCross Scraper?

CareerCross is Japan's premier job board for bilingual professionals, global corporations hiring locally, and international talent. It hosts thousands of high-paying vacancies across executive leadership, finance, marketing, technology, and engineering.

Use this Actor to:
1. **Squeeze B2B Leads:** Target hiring-intent global companies currently expanding their presence in Tokyo and greater Japan.
2. **Benchmark Local Compensation:** Extract precise JPY salary ranges by industry and career level to track localized bilingual compensation scales.
3. **Populate Job Directories:** Aggregate and display foreign-affiliated and multinational job vacancies on your own specialized job search portals.

---

### How to Scrape CareerCross Data Step-by-Step

1. Open the **Input** tab in Apify Console.
2. Configure **Input Mode** (choose from keyword search, direct URLs, or exact numeric job IDs).
3. Specify search parameters like **Search Keyword** (e.g., "engineer") and **UI Language** (English `en` or Japanese `ja`).
4. Click **Start** and export your clean dataset.

---

### Input

| Field | Type | Description | Default |
|---|---|---|---|
| `mode` | string | `search` (keyword search), `urls` (direct URLs), or `ids` (numeric job IDs). | `"search"` |
| `keyword` | string | Filter jobs by title keywords or skills (e.g., "engineer"). | `"engineer"` |
| `language` | string | Target interface locale (`"en"` or `"ja"`). | `"en"` |
| `startUrls` | array | Specific careercross.com search or listing URLs. | `[]` |
| `jobIds` | array | List of exact numeric Job IDs to scrape directly. | `[]` |
| `maxItems` | integer | Hard cap on total results returned. | `100` |
| `proxyConfiguration` | object | Proxy settings. Bypassing is unshielded, so standard proxies are recommended. | `{"useApifyProxy": true}` |

---

### Output Example

Each dataset item represents a single job vacancy.

```json
{
  "job_id": "1543051",
  "url": "https://www.careercross.com/en/job/detail-1543051?sid=76064917&page=1",
  "title": "【Senior Software Engineer】Permanent/Foreign Engineer WELCOME",
  "company_name": "Human Resocia Co.,Ltd.",
  "company_url": "https://www.careercross.com/en/company/detail-37907",
  "location": "Available across Japan",
  "employment_type": "Other",
  "salary_min": 4000000,
  "salary_max": 6000000,
  "salary_currency": "JPY",
  "english_level": "Minimum English Level: Business Level",
  "japanese_level": "Minimum Japanese Level: Business Level",
  "visa_status": "No permission to work in Japan required",
  "industry": "",
  "description_html": "<p>We are currently a global company with more than 500 foreign engineers...</p>",
  "description_text": "We are currently a global company with more than 500 foreign engineers from about 60 countries actively working. You will be working on projects by clients...",
  "date_posted": "2026-06-01T22:30:20.000Z",
  "scraped_at": "2026-06-07T02:05:14.610Z"
}
````

***

### Data Fields Explanation

| Field Name | Format | Description |
|---|---|---|
| `job_id` | text | Unique numerical ID parsed from the detail URL path. |
| `url` | link | Direct canonical link of the CareerCross job vacancy. |
| `title` | text | Job title (Japanese, English, or bilingual). |
| `company_name` | text | Hiring company display name. |
| `company_url` | link | Direct link to the company profile page on CareerCross. |
| `location` | text | Prefecture, city, or district hub in Japan. |
| `employment_type` | text | Job classification (Permanent Full-time, Contract, etc.). |
| `salary_min` | number | Minimum annual salary bound in JPY. |
| `salary_max` | number | Maximum annual salary bound in JPY. |
| `salary_currency` | text | Always JPY. |
| `english_level` | text | Minimum English proficiency required. |
| `japanese_level` | text | Minimum Japanese proficiency required. |
| `visa_status` | text | Visa requirement status for working in Japan. |
| `industry` | text | Market category of the employer. |
| `description_html` | html | Extracted, unstripped HTML job description section. |
| `description_text` | text | Plain-text job description section. |
| `date_posted` | date | ISO 8601 timestamp of listing update. |
| `scraped_at` | date | ISO 8601 scraping timestamp. |

***

### How Much Does It Cost to Scrape CareerCross?

**$1.99 per 1,000 results.**

We offer high-value bilingual recruitment data at a lower price point than specialized international competitors. Because the platform loads listings natively via server-side rendered HTML, there is zero headless browser overhead or expensive residential proxy data transfer fees. A typical run for 1,000 results completes in under a minute and incurs negligible platform compute costs.

***

### Advanced Options & Tips

- **Mode Versatility:** Use `search` mode for keyword exploration. Use `urls` mode when you already have specific pagination paths. Use `ids` mode for refreshing previously saved listings directly.
- **Locale Normalization:** We recommend keeping `language` set to `"en"` (English) to ensure table fields and requirements default to English-labeled keys, making downstream database mapping much easier.

***

### FAQ (Frequently Asked Questions)

#### How does this scraper bypass bot protections?

CareerCross operates behind Cloudflare edge proxies. However, its bot management posture is highly permissive. The scraper uses advanced browser-like header fingerprinting and request rotation, allowing it to execute safely and cleanly on standard datacenter proxies without encountering JavaScript challenge walls or blocks.

#### Do I need a login or API Key?

No. All CareerCross job listings are fully public and require no authentication or cookies to read.

#### Does the scraper resolve candidate application links?

No. CareerCross loads intermediate recruiter redirections and secure application modals behind session-locked endpoints. This is a platform-level restriction, and all CareerCross scrapers share this same behavior. The scraper will output the standard `apply_type` (internal or external form) where applicable.

***

### Disclaimers & Support

This Actor is an independent web scraping tool and is not affiliated with, endorsed by, or sponsored by CareerCross Co., Ltd., careercross.com, or any of their subsidiaries or affiliates. All trademarks are the property of their respective owners.

The scraper accesses only public, unauthenticated job listings of the CareerCross website, matching data the platform serves to any public user. Users are responsible for ensuring compliance with CareerCross Terms of Service and local data regulations (e.g., Japan's APPI).

If you encounter issues or have custom requirements, please submit a report on our repository's **Issues** tab. For custom scraping or dataset services, contact the author's profile.

# Actor input Schema

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

How the scraper will find jobs. 'search' runs a keyword search, 'urls' processes direct listing/detail links, and 'ids' scrapes exact numeric IDs.

## `keyword` (type: `string`):

Keyword to search on CareerCross (e.g., 'engineer', 'manager', 'bilingual'). Used only in 'search' mode.

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

Preferred UI locale. English and Japanese pages extract the same raw data, but selecting English ensures all mapped fields default to English labels.

## `startUrls` (type: `array`):

Direct CareerCross URLs to scrape (search result pages or job details). Used only in 'urls' mode.

## `jobIds` (type: `array`):

List of exact numeric Job IDs to scrape directly. Used only in 'ids' mode.

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

Maximum number of job listings to extract during this crawl session.

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

Proxy settings for scraping. Standard Apify proxies work perfectly.

## Actor input object example

```json
{
  "mode": "search",
  "keyword": "engineer",
  "language": "en",
  "startUrls": [
    {
      "url": "https://www.careercross.com/en/job/detail-1595279"
    }
  ],
  "jobIds": [
    "1595279"
  ],
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "keyword": "engineer",
    "startUrls": [
        {
            "url": "https://www.careercross.com/en/job/detail-1595279"
        }
    ],
    "jobIds": [
        "1595279"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/career-cross-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 = {
    "keyword": "engineer",
    "startUrls": [{ "url": "https://www.careercross.com/en/job/detail-1595279" }],
    "jobIds": ["1595279"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/career-cross-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 '{
  "keyword": "engineer",
  "startUrls": [
    {
      "url": "https://www.careercross.com/en/job/detail-1595279"
    }
  ],
  "jobIds": [
    "1595279"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call getascraper/career-cross-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "CareerCross Scraper: Japan Bilingual Jobs",
        "description": "Scrape CareerCross Japan bilingual jobs. Extract JPY salaries, company data, and required language levels. Drop-in for HubSpot, Salesforce, and Airtable. Skip slow browser automation and expensive proxy costs. $1.99 per 1,000 results.",
        "version": "1.0",
        "x-build-id": "aeod4HhZXPcZegEN8"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/getascraper~career-cross-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-getascraper-career-cross-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/getascraper~career-cross-scraper/runs": {
            "post": {
                "operationId": "runs-sync-getascraper-career-cross-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/getascraper~career-cross-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-getascraper-career-cross-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": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Input Mode",
                        "enum": [
                            "search",
                            "urls",
                            "ids"
                        ],
                        "type": "string",
                        "description": "How the scraper will find jobs. 'search' runs a keyword search, 'urls' processes direct listing/detail links, and 'ids' scrapes exact numeric IDs.",
                        "default": "search"
                    },
                    "keyword": {
                        "title": "Search Keyword",
                        "type": "string",
                        "description": "Keyword to search on CareerCross (e.g., 'engineer', 'manager', 'bilingual'). Used only in 'search' mode.",
                        "default": "engineer"
                    },
                    "language": {
                        "title": "UI Language",
                        "enum": [
                            "en",
                            "ja"
                        ],
                        "type": "string",
                        "description": "Preferred UI locale. English and Japanese pages extract the same raw data, but selecting English ensures all mapped fields default to English labels.",
                        "default": "en"
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Direct CareerCross URLs to scrape (search result pages or job details). Used only in 'urls' mode.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "jobIds": {
                        "title": "Job IDs",
                        "type": "array",
                        "description": "List of exact numeric Job IDs to scrape directly. Used only in 'ids' mode.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of job listings to extract during this crawl session.",
                        "default": 100
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings for scraping. Standard Apify proxies work perfectly.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
