# Remote Jobs Scraper: Remote OK & Jobicy Feed — Yonderlist (`cybermax/remote-jobs`) Actor

Remote jobs scraper and aggregator: fresh remote job listings from Remote OK and Jobicy in one clean feed, with salary, location, job type, seniority, tags and apply links. Filter by keyword, country, salary and date; de-duplicated; monitor mode for new jobs only. $0.80 per 1,000 jobs.

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

## Pricing

$0.80 / 1,000 job delivereds

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

## Yonderlist: Remote Jobs Scraper — Remote OK & Jobicy in One Feed

#### Fresh remote jobs with salaries, filtered your way, and an alert when new ones appear

Yonderlist pulls the newest remote job listings from **Remote OK** and **Jobicy** through their official public APIs and returns them in one clean shape: title, company, where the job is open to, salary range with currency and period, job type, seniority, category, tags, posting date and the apply link. Filter by keyword, location, job type, minimum yearly salary and posting date; duplicates across boards are removed; monitor mode returns only jobs you have not seen yet. **$0.80 per 1,000 jobs, no start fee.**

**[▶ Try it now with a prefilled input](https://apify.com/cybermax/remote-jobs)** · $0.0008 per job (100 jobs = $0.08) · no start fee · Apify's free plan includes $5 of credit a month

**Built for:** remote job boards and newsletters that need a fresh feed · job seekers who want an alert for their exact role · recruiters and HR researchers tracking remote hiring and pay · career coaches · AI agents answering "find me remote Python jobs over $120k"

**Real output** (real run on Apify, 10 Nov 2026: keyword "engineer", 25 jobs in 3.5 s, platform cost $0.0001; four rows shown, plus one Remote OK row from a test run the same day):

| Job | Company | Open to | Salary | Type | Level | Source |
|---|---|---|---|---|---|---|
| Software Engineer - Console | XBOW | Argentina, Europe, USA | 100,000–350,000 USD / year | Full-Time | Senior | Jobicy |
| Senior Software Engineer | Cloudbeds | LATAM, Canada, USA | 140,000–180,000 USD / year | Full-Time | Senior | Jobicy |
| Senior Platform Engineer, Quality Platform | MaintainX | Canada | 107,000–165,000 CAD / year | Full-Time | Director | Jobicy |
| Senior Sales Engineer, DACH Channel | Horizon3.ai | Germany | 160,000–190,000 EUR / year | Full-Time | Senior | Jobicy |
| Senior Vue Developer | Lemon.io | Remote | 50,000–180,000 USD / year | | | Remote OK |

```json
{"keywords": ["engineer"], "maxItems": 25}
```

### Ready-made inputs (one click)

| Job | Input | Result |
|---|---|---|
| **Today's remote jobs** | `{"postedWithinDays": 1, "maxItems": 500}` | Everything posted in the last 24 hours. |
| **Well-paid dev roles** | `{"keywords": ["engineer", "developer"], "minSalaryYearly": 120000, "onlyWithSalary": true}` | Only listings that publish a salary of $120k+ a year. |
| **Remote jobs open to Europe** | `{"locations": ["Europe", "EMEA", "Anywhere"], "maxItems": 200}` | Jobs you can take from Europe. |
| **Contract work** | `{"jobTypes": ["Contract"], "keywords": ["design"]}` | Freelance and contract design roles. |
| **Daily job alert** | `{"keywords": ["product manager"], "monitor": true, "monitorKey": "pm-alert"}` | On a schedule: only jobs not sent before. |

### Use cases

- **Job alerts:** a daily scheduled run for your role and region, sent to email, Slack or Telegram; quiet days cost nothing.
- **Remote job boards and newsletters:** a clean, de-duplicated feed with salaries and apply links, ready to publish with the source credit included in every row.
- **Salary research:** compare published remote pay by role, level, region and currency.
- **Hiring-market research:** which companies hire remotely, for which roles, how fast.
- **AI agents:** one tool call for "remote X jobs in Y paying over Z".

### Output fields

| Field | What it is |
|---|---|
| `id`, `source`, `url`, `applyUrl` | Unique id, the board it came from, the original listing and the apply link. |
| `title`, `company`, `companyLogo` | The job and employer. |
| `location` | Where the job is open to (countries or regions, or `Remote` for worldwide). |
| `jobType`, `seniority`, `category`, `tags` | Full-Time / Contract / Part-Time, level, industry and tags (as published). |
| `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod` | Salary range when published (`hourly`, `monthly` or `yearly`). |
| `postedAt`, `ageDays`, `scrapedAt` | When it was posted and how old it is. |
| `description` | Plain-text description, when `includeDescription` is on. |
| `attribution` | The source credit line (both boards ask you to credit and link back when you republish). |
| `change` | `new` in monitor mode. |

### Run it on a schedule (job alerts)

1. Set your filters with `"monitor": true, "monitorKey": "my-alert"` and save as a **task**.
2. **Schedules → Create**: every morning (cron `0 8 * * *`) or every 6 hours.
3. Add an integration: email, Slack, or a webhook into Make/Zapier/n8n. Each run returns only new matching jobs.

### Integrations

- **Google Sheets / Airtable / Notion via Make, Zapier or n8n:** Apify app or node, map `title`, `company`, `location`, `salaryMin`, `salaryMax`, `applyUrl`.
- **API (curl):**
  ```bash
  curl -X POST "https://api.apify.com/v2/acts/cybermax~remote-jobs/run-sync-get-dataset-items?token=YOUR_TOKEN" \
    -H "Content-Type: application/json" -d '{"keywords": ["python"], "maxItems": 50}'
  ```
- **Python:** `ApifyClient(token).actor("cybermax/remote-jobs").call(run_input={"keywords": ["python"]})`
- **AI agents (MCP):** add `cybermax/remote-jobs` to the Apify MCP server (`https://mcp.apify.com?actors=cybermax/remote-jobs`).

### Why Yonderlist

| | Yonderlist | Typical remote jobs scraper on the Store |
|---|---|---|
| Data source | Official public APIs of Remote OK and Jobicy, no HTML scraping | Often scraped pages that break when a site changes |
| Salary | Normalised range, currency and period; min-yearly-salary filter | Often raw text |
| Duplicates | Removed across boards | Often not |
| Alerts | Monitor mode, unchanged = free | Rare |
| Price | $0.80 per 1,000 jobs, no start fee | $1 to $6 per 1,000 jobs (Store prices on 10 Nov 2026) |

### FAQ

**How many jobs are there?** Remote OK's feed carries its latest ~100 jobs and Jobicy's several hundred to over a thousand at any time, refreshed through the day. Run it daily (or more often) with monitor mode to build up a complete history.

**Can I publish these jobs on my site?** Both boards allow reuse with credit: keep the `attribution` line, link to the original `url`, and send applicants to `applyUrl`. Check each board's own terms for your use case.

**Is it legal?** Yonderlist uses the public job APIs that Remote OK and Jobicy publish for developers. It collects job listings only, no personal data about candidates.

**Why is a salary missing?** The employer did not publish one. Turn on `onlyWithSalary` to keep only jobs with pay listed.

### Also from CyberMax

- [HireHeat: Greenhouse & Lever Jobs Scraper](https://apify.com/cybermax/career-site-jobs) · jobs straight from company career sites.
- [Frontpeek: Hacker News Scraper](https://apify.com/cybermax/hacker-news) · including the HN jobs list.
- [Auditmoss: SEO Audit Crawler](https://apify.com/cybermax/seo-audit) · broken links and SEO issues for any website.

Found this useful? A quick rating helps others find it.

© 2026 CyberMax. All rights reserved.

# Actor input Schema

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

Jobs whose title, company, category or tags contain any of these, e.g. python, designer, customer success. Empty = all jobs.

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

Optional, e.g. senior, intern, sales.

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

Optional. Keep jobs open to any of these, e.g. USA, Europe, UK, LATAM, Anywhere. 'Anywhere' also matches worldwide-remote jobs.

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

Optional, e.g. Full-Time, Contract, Part-Time, Internship (types are given by Jobicy listings).

## `minSalaryYearly` (type: `integer`):

Optional. Hourly and monthly salaries are converted to yearly for this check. Jobs without a salary stay in unless 'Only jobs with salary' is on.

## `onlyWithSalary` (type: `boolean`):

Skip listings that publish no salary.

## `postedWithinDays` (type: `integer`):

Optional, e.g. 1 for the last 24 hours, 7 for the last week.

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

Newest first.

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

Adds the job description as plain text.

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

Both by default.

## `monitor` (type: `boolean`):

For scheduled runs. Returns only jobs not returned in earlier monitor runs with the same filters. Nothing new = nothing charged.

## `monitorKey` (type: `string`):

Optional name for this alert's saved state.

## Actor input object example

```json
{
  "keywords": [
    "engineer"
  ],
  "onlyWithSalary": false,
  "maxItems": 25,
  "includeDescription": false,
  "monitor": false
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "keywords": [
        "engineer"
    ],
    "maxItems": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("cybermax/remote-jobs").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": ["engineer"],
    "maxItems": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("cybermax/remote-jobs").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": [
    "engineer"
  ],
  "maxItems": 25
}' |
apify call cybermax/remote-jobs --silent --output-dataset

```

## MCP server setup

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

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/rWC1qGKA37ruwrfXp/builds/bZ4VhX5fc24OKiBLi/openapi.json
