# Relocate.me Jobs Scraper - Visa Tech Jobs (`bovi/relocate-scraper`) Actor

Scrape public Relocate.me international job cards by keyword or search URL. Returns title, company, location, description, and listing URL with an optional Apify Proxy.

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

## Pricing

from $2.25 / 1,000 relocate.me jobs scraper - visa tech 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/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

## Relocate.me Jobs Scraper

Collect public international job cards from Relocate.me. Each result can include the job title, company, city, country, displayed location, short description, listing URL, and source. Values are taken from the page card; the actor does not invent salary, visa, or benefit details that are not shown there.

The actor reads Relocate.me's server-rendered search pages and follows the site's Next link when more pages are needed. It accepts current /international-jobs search URLs. Older /search?query=... URLs are converted to the current search route. Set one global maxResults limit to cap the total number of distinct jobs across all supplied URLs.

### Input

Paste a search URL:

```
{
  "searchUrls": [
    "https://relocate.me/international-jobs?query=python"
  ],
  "maxResults": 25,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

If searchUrls is empty, the actor builds a search page from keyword. The default keyword is python. maxResults defaults to 50 and accepts values from 1 to 1000. proxyConfiguration is optional; when omitted or disabled, requests go directly to Relocate.me. No account or login is required.

### Output

Each dataset item represents one visible job card. For example, the search-page card for HENNGE is represented as:

```
{
  "title": "Senior Frontend Engineer",
  "company": "HENNGE",
  "city": "Tokyo",
  "country": "Japan",
  "location": "Tokyo, Japan",
  "description": "We are looking for a Senior Frontend Engineer to lead the frontend development of Tadrill, a specialized platform designed to ...",
  "url": "https://relocate.me/japan/tokyo/hennge/senior-frontend-engineer-10264",
  "source": "Relocate.me"
}
```

Some cards are remote or do not show a city or country. Those fields are omitted when the source page does not provide them. The location value uses the visible remote label or the city and country shown by the card URL and location label.

### Pricing

Apify's Free plan price recorded for the champion actor is $0.003 per dataset item. Apify may apply tier discounts on other plans, and a separate Actor start event is billed per run. This actor does not define custom charge events.

### Use cases

Use the dataset to monitor international hiring, track employers that advertise relocation-friendly roles, or build a focused job feed for a role or destination. Keep maxResults low while validating an input URL, then raise it for a larger export.

# Actor input Schema

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

Relocate.me international-jobs search URLs. The actor follows the site's Next link and applies one global maxResults limit.

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

Keyword used to build a search URL when Search URLs is empty.

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

Maximum number of distinct job cards to return across all search URLs.

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

Optional Apify Proxy settings. Leave unset or disable useApifyProxy to connect directly.

## Actor input object example

```json
{
  "searchUrls": [
    "https://relocate.me/international-jobs?query=python"
  ],
  "keyword": "python",
  "maxResults": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset with the scraped job cards.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchUrls": [
        "https://relocate.me/international-jobs?query=python"
    ],
    "keyword": "python",
    "maxResults": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("bovi/relocate-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchUrls": ["https://relocate.me/international-jobs?query=python"],
    "keyword": "python",
    "maxResults": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("bovi/relocate-scraper").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 '{
  "searchUrls": [
    "https://relocate.me/international-jobs?query=python"
  ],
  "keyword": "python",
  "maxResults": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call bovi/relocate-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,bovi/relocate-scraper"
        }
    }
}
```

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/SMEsOAWz0K4lvH2Kr/builds/kxVDfdlualsuezJV3/openapi.json
