# Visa Sponsorship & Relocation Jobs API (`relomote/visa-sponsorship-relocation-jobs-api`) Actor

64,000+ live jobs with visa sponsorship or relocation support from 8,200+ companies, straight from their career pages on 62 applicant tracking systems. The destination country, salary, application questions and the employer's apply link. The official Relomote feed.

- **URL**: https://apify.com/relomote/visa-sponsorship-relocation-jobs-api.md
- **Developed by:** [Relomote](https://apify.com/relomote) (community)
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 jobs

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Visa Sponsorship & Relocation Jobs API

**64,000+ live jobs with visa sponsorship or relocation support from 8,200+ companies, straight from their career pages on 62 applicant tracking systems.** Every job says the country it moves you to. This is the official jobs feed of [Relomote](https://relomote.com), a job board that reads every description for relocation and visa offers.

| As of October 11, 2026 | |
|---|---|
| Live jobs | 64,443 |
| Companies with live jobs | 8,268 |
| Company career pages Relomote checks | 254,284 |
| Applicant tracking systems | 62 |

| Jobs added | |
|---|---|
| July 2026 | 17,645 |
| August 2026 | 15,387 |
| September 2026 | 33,286 |

A month's jobs are those Relomote found that month that made it onto the board, including those that have closed since.

- **Relocation support, visa sponsorship or both,** read from each job's description.
- **The destination country** for every job, so you can list "visa sponsorship jobs in Germany" without reading descriptions.
- **Straight from employers:** every apply link goes to the employer's own application page, on one of 62 applicant tracking systems or the employer's own careers site.
- **The application form's questions** for over 4 in 10 jobs: every field's label, type, options and whether it is required.
- **Salary** when the posting gives one, employment type, category, and the full description as text and, when the source had markup, as HTML.
- **No scraping on your side:** the Actor reads Relomote's feed directly, so runs are fast.

### What you can filter on

| Input | What it does |
|---|---|
| Job titles or keywords | Up to 5 searches, one per line. A job matches if its title or company name has every word of any one line; a few common translations count too, so "nurse" also finds "Enfermeira". |
| Moves you to | Destination countries, or regions, which cover their countries. |
| Categories | Engineering, Healthcare & Nursing, Data & Analytics, Skilled Trades and 18 more. |
| Support offered | Relocation or visa sponsorship, visa sponsorship only, or relocation support only. |
| Minimum salary | The top of the posted range, in US dollars a year. |
| Added in the last | Only jobs that reached Relomote in this many hours. |
| Maximum jobs | Newest first, 10 to 5,000 a run. |
| Return | Jobs, or the ids of the jobs that closed, to remove them from your copy. |
| Closed in the last | With Return set to closed job ids: how many hours back, up to a week. |

### Output

One item per job:

```json
{
  "id": 190897447,
  "board": "relocation",
  "title": "Senior C++ Performance Engineer (all genders)",
  "company": "Agile Robots SE",
  "ats": "greenhouse",
  "apply_url": "https://job-boards.eu.greenhouse.io/agilerobotsse/jobs/4992472101",
  "location": "Germany",
  "relocation_destination": "Germany",
  "visa_sponsorship": true,
  "relocation_support": true,
  "work_arrangement": null,
  "category": "Engineering & Development",
  "salary": null,
  "employment_type": [],
  "date_posted": "2026-10-07T14:43:09.000Z",
  "first_seen_at": "2026-10-10T08:15:28.507Z",
  "added_at": "2026-10-11T05:22:01.647Z",
  "last_checked_at": "2026-10-11T05:22:58.085Z",
  "application_deadline": null,
  "application_questions": [
    { "type": "input_text", "label": "First Name", "required": true },
    { "type": "input_file", "label": "Resume/CV", "required": true },
    {
      "type": "multi_value_single_select",
      "label": "What is your notice period?",
      "options": ["Available immediately", "Up to 4 weeks", "1–3 months", "More than 3 months"],
      "required": true
    }
  ],
  "description_text": "…",
  "description_html": null
}
```

| Field | Meaning |
|---|---|
| `id` | Relomote's id for the job. It never changes, so use it to skip jobs you already have. |
| `relocation_destination` | Where the job moves the person to: one or more countries, or a region. |
| `visa_sponsorship` / `relocation_support` | What the posting offers, read from its description. Either can be true; at least one is. |
| `location` | Where the job is based. Nearly always the same as `relocation_destination`; it differs for a remote job that also offers to relocate you. |
| `salary` | `{ min, max, currency, period }`, with `period` one of hour, day, week, month or year, or null when the posting doesn't say (40% of salaries; most of those are yearly, and the salary filter reads them as yearly). Null when the posting has no salary. |
| `date_posted` | The date the employer's posting gives. Null when it gives none. About 4 in 10 postings give a day without a time, which shows as midnight UTC. |
| `first_seen_at` | When Relomote first found the job on the employer's site. |
| `added_at` | When the job reached Relomote's board. A job can be found days before its description is read and it is listed, so sync on this, not on `date_posted`. |
| `last_checked_at` | The last time the job was seen live on the employer's site. Most career pages are re-checked several times a day: on October 11, 2026, 90% of live jobs had been seen in the previous 9 hours. Workable pages are re-checked about every 4 days. |
| `application_questions` | The application form's fields: `type` as the applicant tracking system names it, `label`, `required` and `options`. Null when the form wasn't read. |

### Good to know

Not every posting has every field. Measured on the live board on October 11, 2026:

| Field | Filled for |
|---|---|
| `application_questions` | About 45% of jobs. Forms on Greenhouse, Ashby and Lever are almost always read; forms on Workday, SmartRecruiters, iCIMS and Oracle are not read at all. |
| `date_posted` | About 86% |
| `employment_type` | About 65% |
| `salary` | About 45% |
| `description_html` | About two thirds. The rest have plain text only, in `description_text`. |
| `application_deadline` | About 5% |

Relocation and visa offers, the destination and the category are read from the posting by software. They are right most of the time, not every time, so check the posting before relying on one.

### How a run works

- A run returns jobs that are live on Relomote right now, newest first by when Relomote found them, up to **Maximum jobs** (10 to 5,000).
- **Added in the last** keeps only the jobs that reached the board in that many hours, for any number of hours.
- The feed is the live board: a job is in it within about 10 minutes of being listed, and out of it as soon as Relomote sees it has closed.

### Keeping a copy up to date

1. **Start:** run once without **Added in the last** for the newest 5,000 jobs. For more, run once per destination or category.
2. **Stay current:** schedule the Actor to run daily with **Added in the last** set to 25 hours, and skip ids you already have. The extra hour covers the gap between runs. The board gains about 1,100 jobs a day, well within one run's 5,000.
3. **Remove closed jobs:** jobs close about as fast as they arrive, between about 400 and 2,800 a day in the week to October 11, 2026. Once a day, run the Actor with **Return** set to "Closed job ids" and **Closed in the last** at 25 hours, then delete those ids from your copy. The list covers the whole board, whatever the filters.

The list is saved as the `OUTPUT` record of the run's key-value store, not in the dataset, most recently closed first:

```json
{ "board": "relocation", "closed_since": "2026-10-10T21:00:00.000Z", "total": 3, "ids": [190958308, 190958301, 190958297] }
```

A job is on it within about 10 minutes of Relomote seeing it closed. For a scheduled task, the latest list is at `https://api.apify.com/v2/actor-tasks/<task id>/runs/last/key-value-store/records/OUTPUT?status=SUCCEEDED&token=<your token>`.

### Price

$6 per 1,000 jobs on Apify's Free and Starter plans, $3 on Scale and Business. Free plans get 100 jobs a run.

A closed job ids list is $0.75 a run on every plan, however many ids it holds.

### Using the data

The jobs are yours to use: on your own site or app, in your product, or passed on to others. No credit to Relomote is needed. Job descriptions are the employers' own text.

Questions or a wrong label? Open an issue on this Actor.

# Actor input Schema

## `searches` (type: `array`):

Up to 5 searches, one per line, e.g. "customer support" or "react developer". A job matches if its title or company name has every word of any one line. Empty lists the newest jobs.

## `locations` (type: `array`):

The country the job relocates the person to, by name ("Germany") or code ("DE"), or a region (Africa, Asia, Europe, Latin America, Middle East, North America, Oceania), which covers its countries.

## `categories` (type: `array`):

Leave empty for every category.

## `support` (type: `string`):

Jobs that offer relocation support, visa sponsorship, or either.

## `minSalary` (type: `string`):

The top of the posted salary range, converted to US dollars a year. Jobs without a posted salary are left out when this is set.

## `addedWithinHours` (type: `integer`):

Only jobs that reached Relomote in this many hours. To keep a copy up to date, schedule the Actor and set this an hour longer than the time between runs, then skip ids you already have.

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

Newest first. 10 to 5,000 a run; free Apify plans get 100.

## `output` (type: `string`):

Jobs, or one list of the ids of the jobs on the whole board that closed in the hours set below, saved as the OUTPUT record in the run's key-value store and charged once per run. Delete those jobs from your copy. The filters above don't apply to it.

## `closedWithinHours` (type: `integer`):

With Return set to closed job ids: the jobs that closed in this many hours, up to a week. Run it daily with 25; the extra hour covers the gap between runs.

## Actor input object example

```json
{
  "support": "any",
  "minSalary": "any",
  "maxItems": 100,
  "output": "jobs",
  "closedWithinHours": 25
}
```

# Actor output Schema

## `jobs` (type: `string`):

One item per job, when Return is Jobs.

## `closedIds` (type: `string`):

The ids of the jobs that closed in the chosen hours, when Return is Closed job ids.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("relomote/visa-sponsorship-relocation-jobs-api").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("relomote/visa-sponsorship-relocation-jobs-api").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call relomote/visa-sponsorship-relocation-jobs-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,relomote/visa-sponsorship-relocation-jobs-api"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Te4pk01D9iCpPJVGR/builds/XvON5eTTbJh5NPRaP/openapi.json
