# Visa Sponsored Jobs Scraper - International Tech Jobs (`khadinakbar/visa-sponsored-jobs-scraper`) Actor

Scrape visa sponsored jobs from Relocate.me — international tech roles with explicit visa sponsorship and full relocation packages (visa services, flights, housing, language courses). Filter by country, role, experience level, and freshness window.

- **URL**: https://apify.com/khadinakbar/visa-sponsored-jobs-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Jobs, Lead generation, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event + usage

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## Visa Sponsored Jobs Scraper

Scrape **visa sponsored jobs** from [Relocate.me](https://relocate.me) — the dedicated job board for international tech roles that come with **explicit visa sponsorship** and a **full relocation package** (visa services, flights, temporary housing, language courses, and more).

Built for international software engineers searching for sponsorship abroad, technical recruiters sourcing visa-friendly companies, and analysts benchmarking which companies and countries are actively investing in foreign tech talent in 2026.

> **Visa sponsorship**, **work visa**, **H-1B**, **Tier 2 / Skilled Worker visa**, **EU Blue Card**, **HSP visa Japan**, **highly skilled migrant Netherlands**, **English-speaking jobs**, **relocation package**, **international tech jobs** — every listing in this scraper covers them.

### What does Visa Sponsored Jobs Scraper do?

This scraper crawls [Relocate.me](https://relocate.me/international-jobs) listings across 9 countries (Netherlands, Germany, UK, Spain, Portugal, Cyprus, New Zealand, Japan, Singapore) and returns one **structured record per job** with everything you need to act on it:

- **Job title, company, country, city, employment type** — core metadata
- **Experience level** — Junior / Mid / Senior / Staff / Principal / Lead / Manager (inferred from the title)
- **Remote eligibility** — boolean from the description
- **Full relocation package** — visa services, flight ticket, temporary housing, housing search assistance, language courses, relocation bonus, and more (the data you can't get from generic job boards)
- **Tech stack and tags** — both filtered (`techStack`) and raw (`tags`) views
- **Requirements**, **responsibilities**, **benefits** — three separately parsed bullet-point sections
- **Company info** — name, logo URL, careers website, "About <Company>" paragraph
- **Cleaned plain-text description** (≤3,500 chars, AI-friendly)
- **Direct apply URL** — typically Greenhouse / Lever / Workable / SmartRecruiters / Workday — not the Relocate.me login redirect
- **Salary** when disclosed in JSON-LD
- **Posted date** and **valid through** dates from JSON-LD

Filter by **country**, **role**, **experience level**, **freshness window** (today / week / month / quarter), and **job-title keyword**.

Try it: hit the **Run** button on this Actor with the prefilled inputs to scrape the first 50 backend jobs end-to-end.

### Why use Visa Sponsored Jobs Scraper?

Generic job boards bury visa sponsorship behind keyword searches that miss most listings, and the few that do mention it rarely tell you what relocation support is actually offered. Relocate.me is the only aggregator where **every listing is explicitly visa-sponsored** and the relocation package is **structured per company**.

This actor turns that signal into a clean, filterable dataset for:

- **Recruiters** sourcing candidates who specifically need sponsorship in countries where they are licensed sponsors (UK Tier 2, Dutch Highly Skilled Migrant, German Blue Card, Japan HSP, Singapore EP)
- **International software engineers** building target lists of companies that already sponsor in their preferred destination
- **Career platforms and Telegram bots** powering daily digests of visa-sponsored roles
- **Researchers** benchmarking which countries and companies offer the strongest relocation packages
- **AI agents** that need a single MCP tool returning visa-sponsored jobs as structured JSON — every field is named for LLM consumption, every dataset item ≤500 tokens

Apify gives you scheduled runs, REST API access, JSON / CSV / Excel / RSS export, integrations with Make / Zapier / Airbyte, automatic proxy rotation, and run monitoring.

### How to use Visa Sponsored Jobs Scraper

1. Click the **Try for free** button on the Actor page (top right).
2. In the **Input** tab, choose a **role** (or leave `all`), a **country** (or leave `all`), an **experience level** (or leave `all`), and optionally a freshness window or job-title keyword.
3. Set **Max results** (default 50). Each result costs $0.005, so 100 jobs ≈ $0.50.
4. Click **Save & Start**. The first results land in the **Output** tab within seconds.
5. Export as JSON, CSV, or Excel from the Output tab, or pull from `https://api.apify.com/v2/datasets/{datasetId}/items` programmatically.

For a fully automated daily feed, set up a **Schedule** (Schedules tab) — for example, every morning at 8:00 UTC for the country/role you care about — and pipe the output to your CRM, Slack, or sheet via [Apify integrations](https://apify.com/integrations).

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `searchQuery` | string | (empty) | Optional title keyword filter (case-insensitive substring) |
| `country` | enum | `all` | One of: `all`, `netherlands`, `germany`, `united-kingdom`, `spain`, `portugal`, `cyprus`, `new-zealand`, `japan`, `singapore` |
| `role` | enum | `all` | One of: `all`, `backend`, `frontend`, `full-stack`, `mobile`, `devops`, `data-science`, `qa`, `security`, `manager`, `software-engineer` |
| `experienceLevel` | enum | `all` | One of: `all`, `junior`, `mid`, `senior`, `staff`, `principal`, `lead`, `manager` |
| `postedSince` | enum | `any` | One of: `any`, `today`, `week`, `month`, `quarter` |
| `maxResults` | int | 50 | Max number of jobs (1–500) |
| `includeJobDetails` | bool | true | Visit each detail page for full data |
| `persistJobSnapshots` | bool | false | Mirror every job to the key-value store under `job-{jobId}` for cross-run de-dup |
| `proxyConfiguration` | object | Apify residential | Proxy settings (Advanced) |

Example input:

```json
{
    "searchQuery": "senior backend",
    "country": "germany",
    "role": "backend",
    "experienceLevel": "senior",
    "postedSince": "month",
    "maxResults": 50,
    "includeJobDetails": true
}
````

### Output

Each item in the dataset represents one visa-sponsored job listing.

```json
{
    "jobUrl": "https://relocate.me/germany/hamburg/about-you/senior-backend-engineer-m-f-d-checkout-10237",
    "jobId": "10237",
    "title": "Senior Backend Engineer (m/f/d) – Checkout",
    "company": "ABOUT YOU",
    "companyLogo": "https://relocate.me/uploads/companies/about-you/logo.png",
    "companyWebsite": "https://corporate.aboutyou.com/",
    "companyAbout": "ABOUT YOU is one of Europe's fastest-growing fashion platforms…",
    "country": "Germany",
    "city": "Hamburg",
    "role": "Backend",
    "experienceLevel": "Senior",
    "employmentType": "FULL_TIME",
    "remoteAllowed": false,
    "visaSponsored": true,
    "relocationPackage": [
        "Language courses",
        "Visa services"
    ],
    "techStack": ["PHP", "Golang", "Go", "TDD", "API", "MySQL", "Laravel", "Symfony", "Redis"],
    "tags": ["PHP", "Golang", "TDD", "API", "MySQL", "Laravel", "Symfony", "Redis", "Engineer"],
    "requirements": [
        "5+ years of backend engineering experience",
        "Strong knowledge of distributed systems",
        "Fluent English"
    ],
    "responsibilities": [
        "Own the checkout backend services end to end",
        "Mentor mid-level engineers",
        "Drive architectural decisions across the platform"
    ],
    "benefits": [
        "30 days paid vacation",
        "Hybrid work model with home-office option",
        "Annual learning budget",
        "Generous relocation package"
    ],
    "salary": null,
    "description": "ABOUT YOU is one of Europe's fastest-growing fashion platforms…",
    "applyUrl": "https://smrtr.io/xRNbV",
    "postedAt": "2026-03-20",
    "validThrough": null,
    "scrapedAt": "2026-05-03T19:42:00.000Z",
    "source": "relocate.me"
}
```

In addition to the dataset, every run writes a **`last-run-stats`** record to the key-value store with aggregated metrics — totals, breakdown by country / company / role / experience level, top tech stacks, and top relocation items. Useful for dashboards and analytics.

You can download the dataset in JSON, CSV, Excel, RSS, HTML, or XML.

#### Data table

| Field | Type | Notes |
|---|---|---|
| `jobUrl`, `jobId` | string | Canonical Relocate.me URL + numeric ID |
| `title` | string | Job title |
| `company`, `companyLogo`, `companyWebsite`, `companyAbout` | string | null | Hiring organization metadata |
| `country`, `city` | string | null | Inferred from URL path and JSON-LD |
| `role` | string | null | Backend / Frontend / DevOps / Data Science / Mobile / QA / Security / Manager |
| `experienceLevel` | string | null | Junior / Mid / Senior / Staff / Principal / Lead / Manager / Intern |
| `employmentType` | string | null | FULL\_TIME / PART\_TIME / CONTRACTOR |
| `remoteAllowed` | bool | Heuristic from title and description |
| `visaSponsored` | bool | Always `true` |
| `relocationPackage` | string\[] | Visa services, flight, housing, language courses, etc. |
| `techStack` | string\[] | Filtered technologies (generic role words removed) |
| `tags` | string\[] | Raw tag chips from the listing page |
| `requirements`, `responsibilities`, `benefits` | string\[] | Three separately parsed bullet sections |
| `salary` | object | null | `{ currency, min, max, unit, raw }` from JSON-LD baseSalary |
| `description` | string | null | Cleaned, ≤3,500 chars, HTML-decoded |
| `applyUrl` | string | null | Direct ATS apply link |
| `postedAt`, `validThrough` | string | null | ISO 8601 from JSON-LD |
| `scrapedAt` | string | ISO 8601 |
| `source` | string | Always `relocate.me` |

### Pricing

This Actor uses **pay-per-event** (PPE):

| Event | Price |
|---|---|
| Actor start | $0.00005 (per 1 GB of memory) |
| Job scraped | **$0.005 per job** |

A typical 50-job run costs ~**$0.25**. A 500-job run (the hard cap) costs ~**$2.50**. There are no monthly subscription fees — you pay only for what you actually return.

### Tips and advanced options

- **Cheaper preview runs** — set `includeJobDetails: false` to skip detail pages. You'll get title / company / location / URL only and the run finishes much faster. Useful for daily monitoring.
- **Country deep dives** — leave `role: all` and pick a single country to harvest the full inventory for that market.
- **Daily new-jobs feed** — schedule with `postedSince: today` or `postedSince: week` and `maxResults: 200`, then de-duplicate downstream by `jobId`.
- **Cross-run de-dup** — enable `persistJobSnapshots: true` to mirror every job to the key-value store under `job-{jobId}`. Subsequent runs can read from it before re-emitting.
- **AI-agent usage** — every field is named for LLM consumption. Hand the dataset items directly to an agent without preprocessing. Average item size: ~500 tokens.
- **Run analytics** — every run writes `last-run-stats` to the key-value store with breakdowns by country / company / role / level and top tech stacks, ready for dashboards.

### FAQ

**Is the data legal to scrape?**
Relocate.me publishes job listings as a public job board. This Actor reads only public pages, respects polite delays, and does not bypass any login wall. We recommend you comply with Relocate.me's terms of use and your local data-protection regulations. **You are responsible for how you use the data.** The Actor does not collect personal data of applicants — only employer-published listings.

**Why is salary mostly null?**
Most Relocate.me listings don't disclose salary in machine-readable form. When a salary is present in the JSON-LD JobPosting structured data, this Actor returns it; otherwise, the field is `null`. This is a property of the source, not a bug.

**Why is `visaSponsored` always true?**
Because Relocate.me only lists roles that offer visa sponsorship — that's the entire point of the platform. The field is included for downstream pipelines that join visa-sponsored listings with non-sponsored ones.

**How is `experienceLevel` derived?**
From the job title using deterministic regex matching for "junior" / "senior" / "staff" / "principal" / "lead" / "manager" / "intern". Titles without an explicit signal return `null`.

**How is `remoteAllowed` derived?**
Heuristic match against the title and description for "remote" / "work from home" / "WFH", with negation for "no remote" / "onsite only".

**Does this actor scrape LinkedIn / Indeed / Glassdoor?**
No. For those, use [linkedin-jobs-scraper](https://apify.com/khadinakbar/linkedin-jobs-scraper), [indeed-job-scraper](https://apify.com/khadinakbar/indeed-job-scraper), or the multi-source [jobs-scraper](https://apify.com/khadinakbar/jobs-scraper). This Actor specializes in the visa-sponsorship + relocation niche where Relocate.me has the cleanest signal.

**Where can I report a bug or request a feature?**
Use the **Issues** tab on the Actor page. Every report is read.

### Disclaimer

This Actor extracts publicly accessible job listings only. The data is offered as-is for legitimate research, recruiting, and job-search purposes. Use responsibly and in compliance with Relocate.me's terms of service, applicable employment-data regulations, and your jurisdiction's privacy laws. The Actor author is not affiliated with Relocate.me.

# Actor input Schema

## `searchQuery` (type: `string`):

Optional keyword filter applied to the job title (case-insensitive substring match). Example: 'react' or 'senior backend'. Leave empty to include every job in the role/country slice. NOT a full-text description search — only matches against the job title.

## `country` (type: `string`):

Restrict results to a single country supported by Relocate.me. Use 'all' to scrape across every country. Example: 'germany' or 'united-kingdom'. NOT a free-text city or region filter — pick from the enum.

## `role` (type: `string`):

Restrict results to one of Relocate.me's role categories. 'all' returns every category. Example: 'backend' or 'devops'. NOT a free-text role string — pick from the enum.

## `experienceLevel` (type: `string`):

Filter by seniority level inferred from the job title (e.g., 'senior', 'staff', 'principal'). Use 'all' to skip the filter. Example: 'senior' for senior+ roles only. NOT a years-of-experience number — pick from the enum.

## `postedSince` (type: `string`):

Skip jobs posted before this freshness window, based on the JSON-LD datePosted field. Use 'any' for no freshness filter. Example: 'week' returns only jobs posted in the last 7 days. NOT a free-text date — pick from the enum.

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

Maximum number of jobs to return in this run. Each returned job is charged at $0.005 plus the actor-start fee. Default 50, hard cap 500. NOT a per-page limit — this is the global cap across all paginated pages.

## `includeJobDetails` (type: `boolean`):

When enabled, the scraper visits each job's detail page to extract relocation package items, tech stack, full description, requirements, responsibilities, benefits, and apply URL. Disable for a faster, lower-cost run that only returns title/company/location/URL. Default true. NOT a toggle for skipping the listings step.

## `persistJobSnapshots` (type: `boolean`):

When enabled, every scraped job is also written to the key-value store under the key 'job-{jobId}'. Useful for cross-run de-duplication, audit trails, or rebuilding the dataset later. Default false. NOT required for normal use — the dataset already contains all records.

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

Proxy settings. Defaults to Apify residential proxy for the most reliable results. Override only if you have a specific need. NOT required to be changed for typical use.

## Actor input object example

```json
{
  "searchQuery": "senior backend",
  "country": "all",
  "role": "all",
  "experienceLevel": "all",
  "postedSince": "any",
  "maxResults": 50,
  "includeJobDetails": true,
  "persistJobSnapshots": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `lastRunStats` (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 = {
    "searchQuery": "backend",
    "maxResults": 50,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/visa-sponsored-jobs-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 = {
    "searchQuery": "backend",
    "maxResults": 50,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/visa-sponsored-jobs-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 '{
  "searchQuery": "backend",
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call khadinakbar/visa-sponsored-jobs-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Visa Sponsored Jobs Scraper - International Tech Jobs",
        "description": "Scrape visa sponsored jobs from Relocate.me — international tech roles with explicit visa sponsorship and full relocation packages (visa services, flights, housing, language courses). Filter by country, role, experience level, and freshness window.",
        "version": "0.2",
        "x-build-id": "0p7qbvMYPkIVh6gW1"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/khadinakbar~visa-sponsored-jobs-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-khadinakbar-visa-sponsored-jobs-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/khadinakbar~visa-sponsored-jobs-scraper/runs": {
            "post": {
                "operationId": "runs-sync-khadinakbar-visa-sponsored-jobs-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/khadinakbar~visa-sponsored-jobs-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-khadinakbar-visa-sponsored-jobs-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": {
                    "searchQuery": {
                        "title": "Job title keyword (optional)",
                        "type": "string",
                        "description": "Optional keyword filter applied to the job title (case-insensitive substring match). Example: 'react' or 'senior backend'. Leave empty to include every job in the role/country slice. NOT a full-text description search — only matches against the job title."
                    },
                    "country": {
                        "title": "Country",
                        "enum": [
                            "all",
                            "netherlands",
                            "germany",
                            "united-kingdom",
                            "spain",
                            "portugal",
                            "cyprus",
                            "new-zealand",
                            "japan",
                            "singapore"
                        ],
                        "type": "string",
                        "description": "Restrict results to a single country supported by Relocate.me. Use 'all' to scrape across every country. Example: 'germany' or 'united-kingdom'. NOT a free-text city or region filter — pick from the enum.",
                        "default": "all"
                    },
                    "role": {
                        "title": "Role / Category",
                        "enum": [
                            "all",
                            "backend",
                            "frontend",
                            "full-stack",
                            "mobile",
                            "devops",
                            "data-science",
                            "qa",
                            "security",
                            "manager",
                            "software-engineer"
                        ],
                        "type": "string",
                        "description": "Restrict results to one of Relocate.me's role categories. 'all' returns every category. Example: 'backend' or 'devops'. NOT a free-text role string — pick from the enum.",
                        "default": "all"
                    },
                    "experienceLevel": {
                        "title": "Experience level",
                        "enum": [
                            "all",
                            "junior",
                            "mid",
                            "senior",
                            "staff",
                            "principal",
                            "lead",
                            "manager"
                        ],
                        "type": "string",
                        "description": "Filter by seniority level inferred from the job title (e.g., 'senior', 'staff', 'principal'). Use 'all' to skip the filter. Example: 'senior' for senior+ roles only. NOT a years-of-experience number — pick from the enum.",
                        "default": "all"
                    },
                    "postedSince": {
                        "title": "Posted since",
                        "enum": [
                            "any",
                            "today",
                            "week",
                            "month",
                            "quarter"
                        ],
                        "type": "string",
                        "description": "Skip jobs posted before this freshness window, based on the JSON-LD datePosted field. Use 'any' for no freshness filter. Example: 'week' returns only jobs posted in the last 7 days. NOT a free-text date — pick from the enum.",
                        "default": "any"
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of jobs to return in this run. Each returned job is charged at $0.005 plus the actor-start fee. Default 50, hard cap 500. NOT a per-page limit — this is the global cap across all paginated pages.",
                        "default": 50
                    },
                    "includeJobDetails": {
                        "title": "Fetch full job details",
                        "type": "boolean",
                        "description": "When enabled, the scraper visits each job's detail page to extract relocation package items, tech stack, full description, requirements, responsibilities, benefits, and apply URL. Disable for a faster, lower-cost run that only returns title/company/location/URL. Default true. NOT a toggle for skipping the listings step.",
                        "default": true
                    },
                    "persistJobSnapshots": {
                        "title": "Persist per-job snapshots to key-value store",
                        "type": "boolean",
                        "description": "When enabled, every scraped job is also written to the key-value store under the key 'job-{jobId}'. Useful for cross-run de-duplication, audit trails, or rebuilding the dataset later. Default false. NOT required for normal use — the dataset already contains all records.",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. Defaults to Apify residential proxy for the most reliable results. Override only if you have a specific need. NOT required to be changed for typical use.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
