# Remote Jobs Aggregator (`lost.fany/remote-jobs-aggregator`) Actor

Remote job listings from Remotive, Remote OK, Himalayas, Jobicy and Arbeitnow in one normalized dataset: title, company, salary, tags, location, canonical links. Official public APIs only, no scraping.

- **URL**: https://apify.com/lost.fany/remote-jobs-aggregator.md
- **Developed by:** [Natalia Ivanova](https://apify.com/lost.fany) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 job scrapeds

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Remote Jobs Aggregator

Get **remote job listings from five job boards in one clean dataset**: Remotive, Remote OK, Himalayas, Jobicy and Arbeitnow. One run, one schema — title, company, location, employment type, salary, tags, publication date, description and the canonical link to the original posting. Duplicates posted on several boards are merged, with links to every copy.

The Actor reads only the **official public JSON APIs the boards publish for developers**. No HTML scraping, no browser, no proxies, no logins — so it does not break when a site changes its layout, and it respects each board's attribution rules by design.

### What you can do with it

- **Job alerts** — run it every morning with `postedAfter: "24 hours"` and your keywords, then send new matches to Slack, email or a Google Sheet with Apify integrations.
- **Job-board or newsletter feed** — fill a niche job site ("remote Python jobs in Europe") with fresh, deduplicated listings that link back to the source.
- **Market research** — track how many remote roles per stack, seniority or region appear each week; salary ranges where boards publish them.
- **Recruiting and lead generation** — see which companies are hiring remotely right now for a given skill.
- **AI agents** — let an agent query the job market through the Apify MCP server (see below).

### Sources

| Board | Coverage | Notes |
|---|---|---|
| [Remotive](https://remotive.com) | Tech, marketing, design, support | Listings delayed 24 h by the board itself |
| [Remote OK](https://remoteok.com) | Latest ~100 remote jobs, tags, USD salaries | |
| [Himalayas](https://himalayas.app) | Largest feed (100 000+ listings), salaries, seniority, location and timezone restrictions | Paginated by date until `postedAfter` |
| [Jobicy](https://jobicy.com) | Worldwide, industries, levels, salaries | Up to 200 newest per run |
| [Arbeitnow](https://www.arbeitnow.com) | Europe-focused, hourly updates | Only jobs marked remote are kept |

All boards allow this kind of re-use provided the original job URL and the source are kept. Every item therefore contains `url`, `source`, `sourceName` and an `attribution` line. Please keep them when you display the data.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `keywords` | array | `[]` | Keep jobs whose title, company, category, tags (and description, see below) contain **any** of these words. Empty = everything. |
| `excludeKeywords` | array | `[]` | Drop jobs whose title, company, category or tags contain any of these. |
| `searchDescription` | boolean | `true` | Also match keywords in the full description. Turn off for strict title/tag matching. |
| `sources` | array | all five | Any of `remotive`, `remoteok`, `himalayas`, `jobicy`, `arbeitnow`. |
| `postedAfter` | string | `7 days` | A date (`2026-09-01`), `today`, `yesterday` or a period (`24 hours`, `2 weeks`). |
| `location` | string | — | Keep only jobs whose location text contains this (`USA`, `Europe`, `Worldwide`, `Germany`). |
| `jobTypes` | array | `[]` | `full_time`, `part_time`, `contract`, `freelance`, `internship`, `temporary`, `other`. |
| `maxItems` | integer | `500` | Stop after this many jobs (after filtering and merging). |
| `includeDescription` | boolean | `true` | Full description as text and HTML; off = 300-character excerpt. |
| `dedupe` | boolean | `true` | Merge the same job found on several boards. |

Example — remote React or Vue jobs for Europe from the last day, without senior roles:

```json
{
  "keywords": ["react", "vue"],
  "excludeKeywords": ["senior", "lead"],
  "location": "Europe",
  "postedAfter": "24 hours",
  "maxItems": 200
}
```

### Output

One dataset item per job:

```json
{
  "id": "himalayas:senior-full-stack-python-fastapi-react-engineer",
  "title": "Senior Full Stack Python/FastAPI/React Engineer",
  "company": "Anovium",
  "url": "https://himalayas.app/companies/anovium/jobs/senior-full-stack-python-fastapi-react-engineer",
  "applyUrl": "https://himalayas.app/companies/anovium/jobs/senior-full-stack-python-fastapi-react-engineer/apply",
  "source": "himalayas",
  "sourceName": "Himalayas",
  "sourceSite": "https://himalayas.app",
  "attribution": "Originally posted on Himalayas: https://himalayas.app/companies/anovium/jobs/…",
  "location": "Colombia",
  "remote": true,
  "jobType": "full_time",
  "seniority": "Senior",
  "category": "Engineering",
  "tags": ["Full Stack Engineer"],
  "salaryMin": 60000,
  "salaryMax": 90000,
  "salaryCurrency": "USD",
  "salaryPeriod": "year",
  "salaryText": null,
  "companyLogo": "https://…/logo.png",
  "publishedAt": "2026-09-10T12:28:04Z",
  "expiresAt": "2026-10-10T12:28:04Z",
  "description": "About Anovium …",
  "descriptionHtml": "<p>About Anovium …</p>",
  "alsoOn": [{ "source": "remoteok", "url": "https://remoteok.com/remote-jobs/…" }],
  "scrapedAt": "2026-09-10T14:02:11Z"
}
```

`jobType` is normalized across boards; `salaryText` keeps free-text ranges (e.g. `$90k–$120k`) when a board publishes salary as text. The `OUTPUT` record of the key-value store holds a run summary: jobs per board, boards that failed (the run still succeeds if at least one board answers), and the filters used.

### Pricing

Pay per event: a small fee per Actor start plus a fee per job returned. You pay only for jobs that pass your filters after deduplication — the filtering and merging themselves are free. A daily alert run with 20–50 new matches typically costs a few cents; the current prices are shown in the **Pricing** tab.

### Limits and good practice

- The boards ask developers not to poll them constantly. The Actor makes one request per board per run (Himalayas and Arbeitnow paginate as far as `postedAfter` requires). Schedules every few hours are fine; every minute is not.
- Boards describe locations in their own words (`Worldwide`, `USA only`, `EMEA`, `Remote job`). The `location` filter is a substring match; use short terms.
- Remotive delays its public feed by 24 hours on purpose; other boards publish in near real time.
- Keywords are matched as substrings, case-insensitive: `go` also matches `Django`. Use `golang` or `go` with spaces if you need precision.

### Use with AI agents (MCP)

Add this Actor to the [Apify MCP server](https://apify.com/apify/actors-mcp-server) and an agent (Claude, Cursor, any MCP client) can ask for "remote data-engineer jobs posted this week that mention dbt" and receive structured rows with links. Typical tool input:

```json
{ "keywords": ["data engineer", "dbt"], "postedAfter": "7 days", "maxItems": 50, "includeDescription": false }
```

### FAQ

**Why do results differ from the boards' websites?** Boards show more jobs on their sites than in their public APIs (e.g. Remote OK exposes the latest ~100, Jobicy up to 200 per query). Combine several boards and run regularly to build a complete picture.

**Can I get non-remote jobs too?** No — this Actor is remote-only by design (Arbeitnow's on-site listings are filtered out).

**Is this affiliated with the boards?** No. Data is provided by the boards through their public APIs and remains theirs; keep the links and source names when you republish it.

**Something is missing or a board changed its API?** Open an issue on the Actor's **Issues** tab — fixes usually ship within a day.

# Actor input Schema

## `keywords` (type: `array`):

Keep jobs whose title, company, category or tags contain ANY of these words (case-insensitive), e.g. python, react, marketing. Leave empty to get everything.

## `excludeKeywords` (type: `array`):

Drop jobs whose title, company, category or tags contain any of these words, e.g. senior, sales.

## `searchDescription` (type: `boolean`):

Match keywords in the full job description as well as in the title, company, category and tags. Turn off for stricter, title-only matching. Exclude keywords always apply to title/company/tags only.

## `sources` (type: `array`):

Which boards to query. All five by default.

## `postedAfter` (type: `string`):

Only jobs published after this moment: a date (2026-09-01), 'today', 'yesterday' or a relative period like '7 days', '24 hours', '2 weeks'. Default: 7 days.

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

Keep only jobs whose location text contains this, e.g. USA, Europe, Worldwide, Germany. Boards describe locations differently, so keep it short.

## `jobTypes` (type: `array`):

Keep only these employment types. Empty = all.

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

Stop after this many jobs (after filtering and deduplication).

## `includeDescription` (type: `boolean`):

Include the full job description as plain text and HTML. Turn off for a compact dataset (300-character excerpt only).

## `dedupe` (type: `boolean`):

The same job posted on several boards is returned once, with links to the other boards in `alsoOn`.

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

Not needed normally: the boards publish these APIs for public use. Enable only if a board starts blocking Apify's IPs.

## Actor input object example

```json
{
  "keywords": [
    "python"
  ],
  "excludeKeywords": [],
  "searchDescription": true,
  "sources": [
    "remotive",
    "remoteok",
    "himalayas",
    "jobicy",
    "arbeitnow"
  ],
  "postedAfter": "7 days",
  "jobTypes": [],
  "maxItems": 500,
  "includeDescription": true,
  "dedupe": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One item per job: title, company, url, source, location, salary, tags, description.

## `summary` (type: `string`):

Counts and errors of the run.

# 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 = {
    "keywords": [
        "python"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("lost.fany/remote-jobs-aggregator").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 = { "keywords": ["python"] }

# Run the Actor and wait for it to finish
run = client.actor("lost.fany/remote-jobs-aggregator").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 '{
  "keywords": [
    "python"
  ]
}' |
apify call lost.fany/remote-jobs-aggregator --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lost.fany/remote-jobs-aggregator"
        }
    }
}

```

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/apL0oPdZZPhFLaqS0/builds/wbiVxsVgndlvvnXXa/openapi.json
