# Remote Jobs Scraper: RemoteOK, Arbeitnow & Jobicy API (`hiresignal-data/remote-jobs-feed`) Actor

Remote jobs from RemoteOK, Arbeitnow and Jobicy in one schema with salary, tags, location, apply link and source link. Duplicates across boards are removed. Only-new mode returns just the jobs added since your last run. $1.50 per 1,000 jobs.

- **URL**: https://apify.com/hiresignal-data/remote-jobs-feed.md
- **Developed by:** [HireSignal Data](https://apify.com/hiresignal-data) (community)
- **Categories:** Jobs, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 job postings

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

## Remote Jobs Scraper: RemoteOK, Arbeitnow & Jobicy remote jobs in one schema

Get **remote jobs from RemoteOK, Arbeitnow and Jobicy** in **one clean, deduplicated format**, with **salary ranges** when the feed publishes them, **tags**, **employment type**, **posted date**, an **apply link** and a **link back to the job on its source site** in every row. Turn on **Only new jobs** and schedule it daily to get a feed of fresh postings.

No login, no proxies, no browser: it reads the public JSON job feeds these sites publish, so runs take seconds and rarely break.

### Who uses it

- **Job boards and newsletter builders**: fill a niche board or a weekly digest with structured, attributed postings.
- **Candidates and career coaches**: filter remote roles by keyword and watch for new ones.
- **Remote-work and salary research**: compare pay, tags and hiring volume across feeds.
- **Recruiters**: spot which companies are hiring remotely, from three sources in one run.

### How to scrape remote jobs

1. Pick the **job feeds** (all three by default).
2. Optional: **Keywords** to keep only jobs whose title or tags match, **Maximum jobs** to cap the run, **Only new jobs** for monitoring.
3. Run it, or create a **Schedule** (e.g. daily) with **Only new jobs** on. Export as JSON, CSV, Excel, or connect it to Make, Zapier, Google Sheets or a webhook.

#### Input example

```json
{
  "sources": ["remoteok", "arbeitnow", "jobicy"],
  "keywords": ["python", "designer"],
  "onlyNew": true,
  "maxItems": 100
}
```

### Remote job data output

One row per job, the same fields for every feed:

```json
{
  "id": "remoteok:1137554",
  "source": "remoteok",
  "sourceUrl": "https://remoteOK.com/remote-jobs/remote-accounting-operations-plaid-1137554",
  "title": "Accounting Operations",
  "company": "Plaid",
  "location": null,
  "remote": true,
  "tags": ["accounting", "finance", "ops"],
  "employmentType": null,
  "salaryMin": 110000,
  "salaryMax": 170000,
  "salaryCurrency": "USD",
  "salaryPeriod": "yearly",
  "postedAt": "2026-10-22T00:00:15.000Z",
  "applyUrl": "https://remoteOK.com/remote-jobs/remote-accounting-operations-plaid-1137554",
  "description": "We believe that the way people ...",
  "scrapedAt": "2026-10-23T09:00:24.178Z"
}
```

A run summary (jobs read and returned per feed, duplicates removed, feeds that failed) is saved as `OUTPUT` in the run's key-value store. If one feed is down, the Actor logs a warning and still returns the others.

### How much does it cost to scrape remote jobs?

$1.50 per 1,000 jobs. Pay per result: you pay only for jobs returned. Set a **maximum cost per run** and the Actor stops cleanly when it is reached. With **Only new jobs** on, a daily run usually costs a few cents.

### Notes and limits

- **Dedupe:** rows with the same company and title (ignoring case and punctuation) are returned once; the feed listed first in **Job feeds** keeps the row. The same role posted in several cities by one company is also collapsed to one row.
- **Coverage per run:** all RemoteOK jobs (about 100), the newest 1,500 Arbeitnow jobs, and up to 1,000 Jobicy jobs from the last 7 days (Jobicy shows jobs with a 3-hour delay).
- **Arbeitnow** lists on-site and remote jobs, mostly in Germany and the EU; check the `remote` field. Descriptions are often in German.
- **Salary** is filled only when the feed publishes pay: RemoteOK (USD per year), Jobicy (currency and period as given). Arbeitnow publishes none. Values are not converted between currencies.
- `employmentType` is the feed's own wording (Arbeitnow's can be German). RemoteOK does not publish it.
- **Only new jobs** remembers the job ids of your previous run in a named key-value store in your account (`remote-jobs-feed-seen`). Delete that store to start fresh. Jobs left out by **Maximum jobs** stay "new" for the next run.
- Jobicy asks API users not to poll more than once per hour; a daily schedule is plenty.
- Data comes from public job postings. It contains company and job information, not personal data. You are responsible for using it lawfully.

### Data sources and attribution

Every row carries `source` and `sourceUrl`; please keep them visible and linked when you display or republish jobs.

- **[Remote OK](https://remoteok.com)**: jobs from the Remote OK API (https://remoteok.com/api). Remote OK asks users to link back to the job URL on Remote OK and to mention Remote OK as the source. Not affiliated with this Actor.
- **[Arbeitnow](https://www.arbeitnow.com)**: jobs from the free Arbeitnow job board API (https://www.arbeitnow.com/api/job-board-api). Arbeitnow asks for a link back to its site.
- **[Jobicy](https://jobicy.com)**: jobs from the Jobicy public jobs API (https://jobicy.com/api/jobs, docs at https://jobi.cy/apidocs). Please credit Jobicy and link to the source; apply links point to the original listing on Jobicy.

This Actor is published by HireSignal Data and is not affiliated with or endorsed by Remote OK, Arbeitnow or Jobicy. If a source asks for its feed to be removed, it will be dropped.

### Ready-made examples

Open one, press Start, get the data. Change the input to fit your needs.

- [Remote Python developer jobs from RemoteOK, Arbeitnow, Jobicy](https://apify.com/hiresignal-data/remote-jobs-feed/examples/remote-python-jobs)
- [Remote marketing, SEO and content jobs feed](https://apify.com/hiresignal-data/remote-jobs-feed/examples/remote-marketing-jobs)
- [Daily remote jobs feed for your job board or newsletter](https://apify.com/hiresignal-data/remote-jobs-feed/examples/remote-jobs-board-feed)

### Related job scrapers by HireSignal Data

- [Greenhouse Jobs Scraper (ATS Jobs Monitor)](https://apify.com/hiresignal-data/ats-jobs-monitor): Greenhouse, Lever, Ashby, Workable, Recruitee and Personio jobs in one schema, $1.50 per 1,000 jobs.
- [Workday Jobs Scraper](https://apify.com/hiresignal-data/workday-jobs): every job from any myworkdayjobs.com career site, past the 2,000 limit, $2.00 per 1,000 jobs.

### FAQ

**Does it need my login or an API key?** No.
**How fresh is the data?** Live: each run reads the feeds at that moment (Arbeitnow updates hourly).
**Why fewer rows than the feeds show?** Duplicates across feeds are removed, and Arbeitnow and Jobicy are capped as described above.

# Actor input Schema

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

Which feeds to read. Duplicates across feeds (same company and title) are removed; the feed listed first keeps the row.

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

Keep only jobs whose title or tags contain at least one of these words (case-insensitive), for example python or designer. Empty = all jobs.

## `onlyNew` (type: `boolean`):

Return only jobs that were not in the feeds the last time you ran this Actor (remembered in your account). The first run returns everything. Use with a daily Schedule to get a feed of new postings.

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

Stop after this many jobs. 0 = no limit.

## Actor input object example

```json
{
  "sources": [
    "remoteok",
    "arbeitnow",
    "jobicy"
  ],
  "onlyNew": false,
  "maxItems": 100
}
```

# Actor output Schema

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

One item per remote job in the default dataset.

# 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 = {
    "sources": [
        "remoteok",
        "arbeitnow",
        "jobicy"
    ],
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("hiresignal-data/remote-jobs-feed").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 = {
    "sources": [
        "remoteok",
        "arbeitnow",
        "jobicy",
    ],
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("hiresignal-data/remote-jobs-feed").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 '{
  "sources": [
    "remoteok",
    "arbeitnow",
    "jobicy"
  ],
  "maxItems": 100
}' |
apify call hiresignal-data/remote-jobs-feed --silent --output-dataset

```

## MCP server setup

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

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/QCieNE82VK01E976v/builds/N8HgG81Prqe8Nzt6k/openapi.json
