# RemoteOK Jobs Scraper (`parsebird/remoteok-jobs-scraper`) Actor

Scrape remote job listings from RemoteOK.com — titles, companies, salaries, tags, locations, and apply links. Filter by skill tags, keyword, and minimum salary. No proxy or authentication needed. Export as JSON, CSV, Excel.

- **URL**: https://apify.com/parsebird/remoteok-jobs-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Categories:** Jobs, Automation, AI
- **Stats:** 11 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.99 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

### RemoteOK Jobs Scraper

Scrape remote job listings from [RemoteOK.com](https://remoteok.com) — titles, companies, salaries, tags, locations, and apply links. Filter by skill tags, keyword, and minimum salary. No proxy or authentication needed.

<table><tr>
<td style="border-left:4px solid #1C1917;padding:12px 16px;font-weight:600">
Extract structured remote job data from RemoteOK's public API — filter by 50+ skill tags (Python, JavaScript, React, DevOps, Design, etc.), set minimum salary thresholds, and get clean normalized output with 20 data fields per listing ready for analysis or integration.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
RemoteOK Jobs Scraper (parsebird/remoteok-jobs-scraper) — scrapes remote job listings from RemoteOK.com via their public JSON API. Inputs: tags (string[], filter by skill tags like "python", "react", "devops"), keywordFilter (string, match title/company/tags), minSalary (int, USD minimum), filterNonTech (bool, remove non-tech roles), maxResults (int, default 100). Output: NormalizedJob objects with 20 fields including title, company_name, salary_min, salary_max, currency, tags, location, apply_url, posted_at, description. Pricing: from $0.99/1,000 jobs (Gold) to $1.50/1,000 (Free). API: https://apify.com/parsebird/remoteok-jobs-scraper/api — Token: https://console.apify.com/account/integrations
```

### What is RemoteOK Jobs Scraper?

**RemoteOK Jobs Scraper** is an Apify Actor that extracts remote job listings from [RemoteOK.com](https://remoteok.com) — one of the largest remote-only job boards on the web. It uses RemoteOK's official public JSON API, so it requires **no proxy, no browser, and no authentication**. Each run returns up to ~100 of the most recent jobs per skill tag, normalized into a consistent 20-field schema and pushed to an [Apify Dataset](https://docs.apify.com/platform/storage/dataset).

Use it as a fast, affordable **RemoteOK API alternative** for job boards, recruitment pipelines, salary research, and AI-powered job search agents.

### What data can you extract from RemoteOK?

The RemoteOK Jobs Scraper returns structured data for each job listing with the following fields:

| Field | Description |
|-------|-------------|
| `title` | Job title (e.g., "Senior Python Engineer") |
| `company_name` | Hiring company name |
| `location` | Job location (usually "Worldwide" or "Remote") |
| `salary_min` | Minimum annual salary in USD (0 if not listed) |
| `salary_max` | Maximum annual salary in USD (0 if not listed) |
| `currency` | Salary currency ("USD" when salary is available, empty otherwise) |
| `tags` | Skill and category tags (e.g., python, react, devops) |
| `description` | Full job description with HTML stripped to plain text |
| `apply_url` | Direct link to the job application |
| `source_url` | Original listing URL on RemoteOK |
| `posted_at` | ISO 8601 timestamp when the job was posted |
| `company_slug` | URL-friendly company identifier |
| `work_mode` | Always "remote" (RemoteOK is remote-only) |
| `type` | Employment type (always "full-time") |
| `scraped_at` | Timestamp of when the data was collected |

### How to scrape RemoteOK

Follow these steps to extract remote job listings from RemoteOK using this Actor:

1. Go to the [RemoteOK Jobs Scraper](https://apify.com/parsebird/remoteok-jobs-scraper) page on Apify Store.
2. Click **Try for free** to open the Actor in Apify Console.
3. In the **Skill Tags** field, enter the tags you want to filter by (e.g., `python`, `javascript`, `react`). Leave empty for all recent jobs.
4. Optionally set a **Keyword Filter** to match against job titles, company names, and tags (e.g., "senior", "startup").
5. Set **Minimum Salary** if you want to exclude low-salary listings (jobs without salary data always pass through).
6. Toggle **Filter out non-tech roles** if you only want technical positions.
7. Set **Max Results** to control how many jobs to return (default: 100, prefill: 50).
8. Click **Start** and wait a few seconds — the actor is extremely fast since it uses a direct API.
9. When the run finishes, click the **Dataset** tab to preview results. Download as JSON, CSV, or Excel.

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `tags` | string\[] | No | `[]` | Skill/category tags to filter by. Each tag runs a separate API request. Results are deduplicated. Examples: `python`, `javascript`, `react`, `devops`, `design`. Leave empty for all recent jobs. |
| `keywordFilter` | string | No | `""` | Client-side keyword match against title, company, and tags. Case-insensitive. |
| `minSalary` | integer | No | `0` | Exclude jobs where `salary_max` is below this value (USD). Jobs without salary data always pass through. |
| `filterNonTech` | boolean | No | `false` | Remove clearly non-technical roles (receptionist, accountant, driver, nurse, etc.) from results. |
| `maxResults` | integer | No | `100` | Maximum total jobs to return across all tag requests. RemoteOK returns ~100 jobs per tag. |

### Output example

Each item in the Apify Dataset conforms to the NormalizedJob schema:

```json
{
  "id": "remote-founding-engineer-techcorp-1133500",
  "source": "remoteok",
  "source_url": "https://remoteok.com/remote-jobs/remote-founding-engineer-techcorp-1133500",
  "apply_url": "https://remoteok.com/remote-jobs/remote-founding-engineer-techcorp-1133500",
  "title": "Founding Engineer",
  "description": "We are looking for a Founding Engineer to build our core platform from the ground up...",
  "type": "full-time",
  "work_mode": "remote",
  "location": "Remote, USA",
  "salary_min": 180000,
  "salary_max": 220000,
  "currency": "USD",
  "company_name": "TechCorp",
  "company_slug": "techcorp",
  "company_url": "https://remoteok.com/",
  "tags": ["python", "react", "aws", "backend"],
  "markets": ["python", "react", "aws", "backend"],
  "posted_at": "2026-06-16T00:00:24+00:00",
  "scraped_at": "2026-06-17T13:30:00.000Z",
  "data_source": "RemoteOK",
  "data_source_url": "https://remoteok.com/"
}
```

Download results in **JSON, CSV, HTML, or Excel** format from the [Dataset tab](https://docs.apify.com/platform/storage/dataset) in Apify Console.

### Use cases

🔍 **Job board aggregation** — Combine RemoteOK data with other job sources to build comprehensive remote job boards.

📊 **Salary research** — Analyze salary ranges across different tech stacks and roles in the remote job market.

🤖 **AI job search agents** — Feed structured job data into LLM-powered assistants via the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp).

📈 **Remote work trend monitoring** — Schedule daily runs to track hiring trends, popular skills, and market shifts.

🔄 **Recruitment pipeline automation** — Use [Apify integrations](https://docs.apify.com/platform/integrations) to push new listings directly into your ATS or CRM.

💼 **Competitive intelligence** — Monitor which companies are hiring remotely, what skills they need, and what they pay.

### How much does it cost to scrape RemoteOK?

The RemoteOK Jobs Scraper uses [pay-per-event pricing](https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event). You are charged per 1,000 job listings scraped.

| Plan | Price per 1,000 jobs | Example: 5,000 jobs |
|------|---------------------|---------------------|
| Free | **$1.50** | $7.50 |
| Bronze | **$1.20** | $6.00 |
| Silver | **$1.10** | $5.50 |
| Gold | **$0.99** | $4.95 |

Platform compute usage is minimal — a typical run takes under 5 seconds and uses less than 0.005 compute units. No proxy costs since RemoteOK's API is public.

Apify offers a [free trial](https://apify.com/pricing) that includes $5 of platform credits — enough to scrape thousands of RemoteOK jobs at no cost.

### API usage examples

You can run the RemoteOK Jobs Scraper programmatically using the [Apify API](https://docs.apify.com/api/v2). Below are examples in Python and JavaScript.

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")

run_input = {
    "tags": ["python", "javascript"],
    "keywordFilter": "senior",
    "minSalary": 80000,
    "maxResults": 100,
}

run = client.actor("parsebird/remoteok-jobs-scraper").call(run_input=run_input)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['title']} at {item['company_name']} — {item['apply_url']}")
```

#### JavaScript

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });

const input = {
    tags: ['python', 'javascript'],
    keywordFilter: 'senior',
    minSalary: 80000,
    maxResults: 100,
};

const run = await client.actor('parsebird/remoteok-jobs-scraper').call(input);

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.log(`${item.title} at ${item.company_name} — ${item.apply_url}`);
});
```

You can also integrate this Actor with [Google Sheets](https://docs.apify.com/platform/integrations/google-sheets), [Slack](https://docs.apify.com/platform/integrations/slack), [Zapier](https://docs.apify.com/platform/integrations/zapier), [Make](https://docs.apify.com/platform/integrations/make), and other tools via Apify's [integrations](https://docs.apify.com/platform/integrations).

### Is it legal to scrape RemoteOK?

RemoteOK provides a [public JSON API](https://remoteok.com/api) that is openly accessible without authentication. This Actor uses that official API endpoint to retrieve job listings data.

RemoteOK's API Terms of Service require attribution — linking back to RemoteOK and mentioning them as the source. This Actor includes `source_url` and `data_source` fields in every result to support proper attribution.

For more information about the legality of web scraping, read Apify's blog post on [is web scraping legal](https://blog.apify.com/is-web-scraping-legal/).

### Related scrapers

ParseBird offers a full suite of job scrapers on Apify Store. Combine multiple scrapers for maximum coverage:

- **[Hiring.cafe Jobs Scraper](https://apify.com/parsebird/hiring-cafe-scraper)** — Search 2.8M+ aggregated job postings across 46 ATS platforms with 30+ filter options.
- **[BuiltIn Jobs Scraper](https://apify.com/parsebird/builtin-jobs-scraper)** — Scrape tech job listings from BuiltIn.com by keyword, location, and seniority.
- **[Dice Jobs Scraper](https://apify.com/parsebird/dice-jobs-scraper)** — Extract tech jobs from Dice.com with salary, skills, and company data.
- **[WeWorkRemotely Jobs Scraper](https://apify.com/parsebird/wwr-jobs-scraper)** — Scrape remote jobs from WeWorkRemotely.com across 11 category feeds.
- **[Wellfound Jobs Scraper](https://apify.com/parsebird/wellfound-jobs-scraper)** — Scrape startup jobs from Wellfound (AngelList) with salary and equity data.
- **[YC Jobs Scraper](https://apify.com/parsebird/yc-jobs-scraper)** — Extract job postings from Y Combinator's Work at a Startup platform.
- **[Dribbble Jobs Scraper](https://apify.com/parsebird/dribbble-jobs-scraper)** — Scrape design and creative job listings from Dribbble.
- **[StartupJobs Scraper](https://apify.com/parsebird/startup-jobs-scraper)** — Extract startup job listings from StartupJobs.com.
- **[Xing Jobs Scraper](https://apify.com/parsebird/xing-jobs-scraper)** — Scrape job listings from Xing, Europe's leading professional network.

### FAQ

**How many jobs can I get per run?**
RemoteOK's API returns approximately 100 of the most recent listings per tag. If you specify multiple tags (e.g., `python`, `javascript`, `react`), each tag fetches up to ~100 jobs, and the Actor deduplicates them automatically. A typical 3-tag run yields 150–250 unique jobs.

**How fresh is the data?**
RemoteOK's API returns the most recently posted listings. The data is as fresh as RemoteOK's own feed — typically listings from the past 1–2 weeks. Schedule [recurring runs](https://docs.apify.com/platform/schedules) daily or weekly to maintain an up-to-date job database.

**Why do most jobs show $0 salary?**
Only about 2–7% of RemoteOK listings include salary data. When salary is not disclosed, `salary_min` and `salary_max` are set to `0` and the `currency` field is empty. The `minSalary` filter only excludes jobs that have salary data below your threshold — jobs without salary data always pass through.

**Can I schedule recurring runs?**
Yes. Use Apify's [scheduling feature](https://docs.apify.com/platform/schedules) to run the Actor daily, weekly, or at any custom interval. Combine with [integrations](https://docs.apify.com/platform/integrations) to automatically push new jobs to Google Sheets, Slack, or your database.

**What skill tags can I use?**
RemoteOK supports 50+ skill tags including: `javascript`, `typescript`, `python`, `react`, `vue`, `node`, `php`, `ruby`, `golang`, `rust`, `java`, `kotlin`, `swift`, `flutter`, `devops`, `aws`, `docker`, `kubernetes`, `design`, `ux`, `marketing`, `sales`, `finance`, `legal`, `hr`, `writing`, `customer-support`, and many more.

**Does this Actor need a proxy?**
No. RemoteOK's API is publicly accessible and does not block automated requests. This makes the Actor extremely cheap to run since it incurs zero proxy costs.

**Can I use this with AI assistants?**
Yes. Use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) to connect this Actor to ChatGPT, Claude, Cursor, or any LLM that supports the Model Context Protocol. Copy the AI assistant block at the top of this README for a quick start.

**How do I report issues or request features?**
Visit the [Issues tab](https://apify.com/parsebird/remoteok-jobs-scraper/issues) on the Actor page. We respond to all feedback.

# Actor input Schema

## `tags` (type: `array`):

Filter jobs by skill or category tags. Each tag runs a separate API request. Results are deduplicated. Examples: python, javascript, react, devops, design. Leave empty to fetch all recent jobs.

## `keywordFilter` (type: `string`):

Client-side keyword filter applied after fetching. Matches against job title, company name, and tags. Case-insensitive. Example: senior, startup, engineer.

## `minSalary` (type: `integer`):

Exclude jobs where salary\_max is below this value (USD). Jobs without salary data always pass through. Set to 0 to disable.

## `filterNonTech` (type: `boolean`):

Remove clearly non-technical roles (receptionist, accountant, driver, nurse, etc.) from results.

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

Maximum total jobs to return across all tag requests. RemoteOK returns ~100 jobs per tag. Start with 50 for a quick test.

## Actor input object example

```json
{
  "tags": [
    "python"
  ],
  "keywordFilter": "",
  "minSalary": 0,
  "filterNonTech": false,
  "maxResults": 50
}
```

# Actor output Schema

## `dataset` (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 = {
    "tags": [
        "python"
    ],
    "keywordFilter": "",
    "minSalary": 0,
    "filterNonTech": false,
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/remoteok-jobs-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 = {
    "tags": ["python"],
    "keywordFilter": "",
    "minSalary": 0,
    "filterNonTech": False,
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/remoteok-jobs-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 '{
  "tags": [
    "python"
  ],
  "keywordFilter": "",
  "minSalary": 0,
  "filterNonTech": false,
  "maxResults": 50
}' |
apify call parsebird/remoteok-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parsebird/remoteok-jobs-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/eQ6fst7KA260LYht6/builds/DzlOW5laNGUWbGdlZ/openapi.json
