# RemoteOK Jobs Scraper - Remote Hiring Data (`benthepythondev/remoteok-jobs-scraper`) Actor

Scrape RemoteOK remote job listings with title, company, location, tags, salary range, posted date, description and apply URL.

- **URL**: https://apify.com/benthepythondev/remoteok-jobs-scraper.md
- **Developed by:** [ben](https://apify.com/benthepythondev) (community)
- **Categories:** Jobs, Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 - Remote Hiring Data

Scrape remote job listings from RemoteOK and export clean hiring data in JSON, CSV, Excel or through the Apify API. The actor returns job title, company, location, remote tags, salary range when available, posted date, company logo, short description and the direct RemoteOK job URL.

RemoteOK is one of the best-known job boards for remote-first hiring. Recruiters, job aggregators, compensation analysts and recruiting agencies use it to monitor new remote roles, benchmark hiring demand, source companies that are actively expanding and build fresh remote-work datasets.

### What does this actor do?

The actor reads RemoteOK's public job feed directly and normalizes the jobs into a flat dataset that is easy to use in spreadsheets, automations and databases. You can run it with a broad keyword such as `python`, `sales` or `marketing`, filter by a RemoteOK tag, filter by location text, or leave the filters broad and collect the newest remote jobs.

Because the source is a public JSON feed, the actor is fast and reliable. It does not need a browser, a proxy, login cookies or a paid API key. That makes it suitable for scheduled monitoring and daily Apify Store auto-tests.

### Input

The input is intentionally simple:

```json
{
  "keyword": "python",
  "tag": "",
  "location": "",
  "maxResults": 25
}
````

Use `keyword` for broad matching across job title, company, location, tags and description. Use `tag` when you want a narrower RemoteOK-style skill/category match. Use `location` only when you need location text from the posting; most jobs are remote and may use broad location labels.

### Output

Each dataset item contains:

```json
{
  "job_id": "123456",
  "title": "Senior Python Engineer",
  "company": "Example Inc",
  "location": "Worldwide",
  "remote": true,
  "tags": ["python", "backend", "api"],
  "salary_min": 120000,
  "salary_max": 180000,
  "currency": "USD",
  "posted_at": "2026-07-03",
  "description": "Short normalized job description...",
  "url": "https://remoteok.com/remote-jobs/...",
  "company_logo": "https://...",
  "source": "RemoteOK",
  "search": {
    "keyword": "python",
    "tag": "",
    "location": ""
  }
}
```

### Use cases

Recruiting teams can track which remote-first companies are actively hiring in specific roles or technologies. Job boards can enrich their own listings with RemoteOK roles. Market researchers can measure demand for skills such as Python, React, AI, DevOps, design, sales or customer support. Lead-generation teams can identify companies that have current hiring budgets and outreach to them with staffing, software, training or recruiting services.

The actor is also useful for salary and compensation research. RemoteOK jobs often include salary ranges, so you can monitor remote compensation trends by keyword and tag over time.

### Scheduling

For monitoring, create a saved task with your keyword and run it daily or weekly. Apify can send the output to a webhook, Make, Zapier, n8n, Google Sheets, Airtable or your own API endpoint.

### Reliability

The actor uses a direct HTTP request to RemoteOK's JSON feed. It is intentionally lightweight: no browser launch, no residential proxy and no login session. It retries transient request failures and deduplicates jobs by job ID before pushing data.

### Pricing

This actor uses pay-per-result pricing. You only pay for jobs pushed to the dataset, plus a small actor start event.

### FAQ

#### Does this scrape private data?

No. It collects publicly available job listings from RemoteOK's public job feed.

#### Can I filter by skill?

Yes. Use the keyword field for broad matching and the tag field for skill/category matching.

#### Does it support salary data?

Yes, when RemoteOK includes salary minimum, salary maximum and currency in the source feed.

#### Does it require proxies?

No. The actor is designed to run directly from Apify without a proxy.

#### Can I run it on a schedule?

Yes. It is well suited for daily or weekly scheduled monitoring.

### You might also like

- [StepStone Scraper](https://apify.com/benthepythondev/stepstone-scraper)
- [HiringCafe Scraper](https://apify.com/benthepythondev/hiring-cafe-scraper)
- [BuiltIn Jobs Scraper](https://apify.com/benthepythondev/builtin-jobs-scraper)
- [YC Jobs Scraper](https://apify.com/benthepythondev/yc-jobs-scraper)

### Keywords

RemoteOK scraper, RemoteOK jobs API, remote jobs scraper, remote hiring data, remote work dataset, tech jobs scraper, Python jobs, React jobs, remote salary data, recruiting leads, job board data, Apify jobs scraper.

# Actor input Schema

## `keyword` (type: `string`):

Optional keyword to filter jobs, for example python, react, data, product, sales, marketing or devops.

## `tag` (type: `string`):

Optional RemoteOK tag filter such as python, javascript, react, design, marketing or sales.

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

Optional location text filter. Leave empty to include worldwide remote jobs.

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

Maximum number of matching jobs to return.

## Actor input object example

```json
{
  "keyword": "python",
  "maxResults": 10
}
```

# 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 = {
    "keyword": "python",
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("benthepythondev/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 = {
    "keyword": "python",
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("benthepythondev/remoteok-jobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keyword": "python",
  "maxResults": 10
}' |
apify call benthepythondev/remoteok-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=benthepythondev/remoteok-jobs-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "RemoteOK Jobs Scraper - Remote Hiring Data",
        "description": "Scrape RemoteOK remote job listings with title, company, location, tags, salary range, posted date, description and apply URL.",
        "version": "1.0",
        "x-build-id": "XH6AXhgOL4tmSSYS8"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/benthepythondev~remoteok-jobs-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-benthepythondev-remoteok-jobs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/benthepythondev~remoteok-jobs-scraper/runs": {
            "post": {
                "operationId": "runs-sync-benthepythondev-remoteok-jobs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/benthepythondev~remoteok-jobs-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-benthepythondev-remoteok-jobs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "keyword": {
                        "title": "Keyword",
                        "type": "string",
                        "description": "Optional keyword to filter jobs, for example python, react, data, product, sales, marketing or devops.",
                        "default": "python"
                    },
                    "tag": {
                        "title": "Tag",
                        "type": "string",
                        "description": "Optional RemoteOK tag filter such as python, javascript, react, design, marketing or sales."
                    },
                    "location": {
                        "title": "Location text",
                        "type": "string",
                        "description": "Optional location text filter. Leave empty to include worldwide remote jobs."
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of matching jobs to return.",
                        "default": 50
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
