# Remote Jobs API – Remote OK, We Work Remotely & More (`rowfeed/remote-jobs-api`) Actor

Remote jobs from Remote OK, We Work Remotely, Jobicy and Arbeitnow in one list without duplicates: title, company, where you can live, job type, salary, date, apply link. Filter by skill, country and date. $0.80 per 1,000 jobs.

- **URL**: https://apify.com/rowfeed/remote-jobs-api.md
- **Developed by:** [Rowfeed](https://apify.com/rowfeed) (community)
- **Categories:** Jobs, Developer tools, AI
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 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.

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 API – Remote OK, We Work Remotely & More

All remote jobs from **Remote OK, We Work Remotely, Jobicy and Arbeitnow** in one clean list, with duplicates removed: title, company, where a hire may live, job type, category, skills, salary, date, the job's page and the apply link. Filter by job title or skill, by country or region, and by date. About 1,700 live remote jobs in one run.

Built for job seekers and their tools, recruiters and talent teams, people building a remote job board, newsletter or Slack/Telegram job alert, labour-market researchers, and AI agents that need fresh remote jobs.

### What you get

- **One row per job**, newest first, from four boards read in one run. A job posted on two boards appears once.
- **Where you can work from:** the place each board names (e.g. `USA Only`, `Europe`, `Czechia, Slovakia`, `Worldwide`), plus `worldwide`: true (open anywhere), false (only the places named) or null (no place named, or just "Remote"). Filter by your country or region, or keep only jobs open worldwide.
- **Salary** for about 4 in 10 jobs: from the board's own field, or read from the job text (`Salary Range: $70,000 – $115,000 per year` becomes 70000, 115000, USD, yearly). The salary line itself is kept in `salary_text`; numbers are filled in only when the period is clear.
- **Skills and tags**, category, full-time/contract/part-time, company logo and the job text (email addresses removed).
- **Daily alerts:** set "Only jobs from the last 1 day" and schedule the run each morning.
- **Source and link on every row**, so you can credit the board and send applicants to the original job, as the boards ask.

### Example output rows

Real rows (job text shortened here):

```json
{
  "source": "Jobicy",
  "title": "Senior Data Scientist - Personalization & Predictions",
  "company": "Bloomreach",
  "location": "Czechia, Slovakia",
  "worldwide": false,
  "employment_type": "Full-Time",
  "category": "Data Science & Analytics",
  "tags": ["Senior"],
  "salary_min": 50290,
  "salary_max": 62900,
  "salary_currency": "EUR",
  "salary_period": "yearly",
  "salary_text": null,
  "posted_at": "2026-11-11T02:50:14Z",
  "url": "https://jobicy.com/jobs/155015-senior-data-scientist-personalization-predictions",
  "apply_url": "https://jobicy.com/jobs/155015-senior-data-scientist-personalization-predictions",
  "company_logo": "https://jobicy.com/data/server-nyc0409/galaxy/mercury/2025/08/60790cd5-221.png",
  "description": "Bloomreach is building the world’s premier agentic platform for personalization. …",
  "id": "jobicy:155015"
}
```

```json
{
  "source": "We Work Remotely",
  "title": "Global Hotel Partnerships Manager (East Coast based)",
  "company": "OpenTable",
  "location": "USA Only",
  "worldwide": false,
  "employment_type": "Full-Time",
  "category": "Management and Finance",
  "tags": ["Data Analysis", "Salesforce", "Contract Negotiation", "Relationship Building", "Data Mapping"],
  "salary_min": 110000,
  "salary_max": 130000,
  "salary_currency": "USD",
  "salary_period": "yearly",
  "salary_text": "… The range for this United States located role is $110,000 - $130,000 USD.",
  "posted_at": "2026-11-10T17:00:38Z",
  "url": "https://weworkremotely.com/remote-jobs/opentable-global-hotel-partnerships-manager-east-coast-based",
  "description": "Headquarters: United States\n\nURL: https://opentable.com\n\nWith millions of diners, 70,000+ restaurant partners …",
  "id": "weworkremotely:opentable-global-hotel-partnerships-manager-east-coast-based"
}
```

### How to use

1. Click **Try for free** (or **Start**) at the top of this page to open the input form.
2. Fill in **Include jobs open worldwide**. With places above: also keep jobs that are open anywhere or do not name a place. The form comes with a working example, so you can also run it as it is.
3. Optional: adjust **Job titles or skills**, **Where you live**, **Only jobs open worldwide**, **Only jobs that show a salary**. Every field has a sensible default.
4. Click **Start** and wait for the run to finish.
5. Download the results as Excel, CSV or JSON from the **Output** tab, or get them through the Apify API, a schedule or an integration (Make, Zapier, Google Sheets ...).

### Pricing

Pay per event, no subscription:

- **$0.80 per 1,000 jobs** ($0.0008 per job).
- $0.001 per run start.

Examples: the pre-filled run (100 newest jobs) costs $0.081. Every remote job on all four boards (about 1,700) costs about $1.40. A daily alert for "python" in Europe usually finds a handful of jobs and costs about a cent. Error rows and runs that find nothing are never charged beyond the start.

### Input

| Field | What it does |
|---|---|
| `searches` | Job titles or skills, one per line, e.g. `python`, `customer support`. Every word of a line must be in the job's title, company, category or tags. Short words count only as whole words (`ai` does not match "maintenance", `java` does not match "javascript"); longer words also find longer forms (`design` finds "designer"). Empty = all jobs. |
| `locations` | Countries or regions, e.g. `USA`, `United States`, `Europe`, `Germany`. Empty = any place. |
| `includeWorldwide` | With locations: also keep jobs open anywhere, or that name no place. Default on. |
| `maxResults` | Up to 5,000, newest first. Default 100. |
| `onlyWorldwide` | Only jobs open anywhere in the world. |
| `onlyWithSalary` | Only jobs that show a salary. |
| `postedWithinDays` | Only jobs from the last N days, e.g. `1` for a daily alert. |
| `sources` | Which boards: `remoteok`, `weworkremotely`, `jobicy`, `arbeitnow`. Default all four. |

### Good to know

- **Locations are as the boards write them.** Search for both `USA` and `United States` to be sure; a line matches as a whole word in the job's location (`us` does not match "Australia").
- **Remote OK** often names no place; such jobs count as "no place named" and are kept when `includeWorldwide` is on. The job text usually says where hires may live.
- **Arbeitnow** also lists on-site jobs in Germany; only its remote jobs are included. Its locations are often a city (e.g. `Berlin`), so add the city to `locations` when you filter by place.
- If one board is not answering, the others are still delivered and a free row says which board was missing.
- Not included: Himalayas and Remotive. Their terms do not allow passing their jobs on to other services.

### More tools from Rowfeed

- [Google Jobs API](https://apify.com/rowfeed/google-jobs-api): jobs from Google's job search, any country and city.
- [Jobs API – Career Sites](https://apify.com/rowfeed/career-site-jobs-scraper): open jobs straight from company career pages on Greenhouse, Lever, Ashby and Workday.
- [Hacker News API](https://apify.com/rowfeed/hacker-news-api): the monthly "Who is hiring?" thread as job rows with company, role, remote and salary.
- [hh.ru Jobs Scraper](https://apify.com/rowfeed/hh-ru-jobs-scraper): vacancies with salary from Russia's largest job site.
- [Website Email Extractor & Contact Finder](https://apify.com/rowfeed/website-contact-finder): role emails and social links from a company's website.

# Actor input Schema

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

One search per line. A job matches when every word of a line is in its title, company, category or tags (short words like "ai" only as whole words). Empty = all remote jobs.

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

Countries or regions, one per line, as the boards write them (e.g. USA, United States, Europe, Germany). Empty = any place.

## `includeWorldwide` (type: `boolean`):

With places above: also keep jobs that are open anywhere or do not name a place.

## `onlyWorldwide` (type: `boolean`):

Keep only jobs the board marks as open anywhere in the world (good if you live outside the US and Europe).

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

Keep only jobs with a salary, from the board or from the job text.

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

Newest first. Up to 5,000. Each job is one row.

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

e.g. 1 for a daily job alert. 0 = any date.

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

Which boards to read. Default: all four.

## Actor input object example

```json
{
  "searches": [
    "python",
    "customer support",
    "product designer"
  ],
  "locations": [
    "USA",
    "Europe",
    "Germany"
  ],
  "includeWorldwide": true,
  "onlyWorldwide": false,
  "onlyWithSalary": false,
  "maxResults": 100,
  "postedWithinDays": 0,
  "sources": [
    "remoteok",
    "weworkremotely",
    "jobicy",
    "arbeitnow"
  ]
}
```

# Actor output Schema

## `results` (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 = {
    "includeWorldwide": true,
    "maxResults": 100,
    "sources": [
        "remoteok",
        "weworkremotely",
        "jobicy",
        "arbeitnow"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("rowfeed/remote-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 = {
    "includeWorldwide": True,
    "maxResults": 100,
    "sources": [
        "remoteok",
        "weworkremotely",
        "jobicy",
        "arbeitnow",
    ],
}

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rowfeed/remote-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/DLa1s82TvwAg3XkbM/builds/7oZAdVWIk68ZnkGpm/openapi.json
