RemoteOK Jobs Scraper & Remote Jobs API

Export public RemoteOK jobs by feed, tag, keyword, company, location, salary, and date. Get clean text and HTML descriptions, category, seniority, worldwide status, salary metadata, company logos, and apply links.

Data fields

FieldTypeDescription
idstringValue exported as id.
slugstring | nullValue exported as slug.
epochnumber | nullValue exported as epoch.
datestring | nullValue exported as date.
postedAtstring | nullValue exported as postedAt.
companystring | nullValue exported as company.
positionstring | nullValue exported as position.
categorystring | nullValue exported as category.

Input preview

startUrlsRemoteOK feeds or category URLs
tagsTags or skills
keywordsKeywords
excludeKeywordsExclude keywords
companyCompany contains
locationLocation contains

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

Ready-to-run examples

Open a saved Apify example, adjust the input, and run the actor in your own Apify account.

View all examples

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

Search and export current public RemoteOK jobs by API feed or category URL, tag, keyword, company, location, salary, and posting date.

Use this Actor to build remote-job feeds, monitor hiring signals, track salaries, enrich recruiting workflows, and collect remote-work market data. Results can be downloaded as CSV, JSON, Excel, XML, RSS, or used through the Apify Dataset API.

At a glance

  • Remote job search: Filter RemoteOK listings by category feed, skills, keywords, company, exclusions, location, freshness, and salary.
  • Spreadsheet-ready rows: Export company, role, category, tags, salary, seniority, worldwide status, links, logo, and timestamps.
  • Clean and original descriptions: Export normalized text for NLP and optional source HTML without removing the backward-compatible description field.
  • Monitoring workflows: Schedule focused searches for new roles, salary changes, niche job feeds, or market reports.
  • API export: Send RemoteOK job rows to newsletters, job boards, CRMs, dashboards, databases, or AI agents.

What can it do?

RemoteOK Jobs Scraper extracts structured remote job data from public RemoteOK listings and saves one dataset row per job.

  • Find roles by stack or category: Use tags such as python, react, sales, marketing, or customer support.
  • Add free-text matching: Use keywords for title, company, tag, location, or description matches.
  • Filter by market: Keep listings by location text, salary range, or posting date.
  • Collect links: Export apply URLs and source URLs for follow-up.
  • Build recurring feeds: Schedule daily or weekly runs with sinceDate and focused filters.
  • Use category feeds: Add RemoteOK pages such as https://remoteok.com/remote-python-jobs; the Actor validates and uses their public JSON feeds.
  • Diagnose every run: Read RUN_SUMMARY for source failures, retries, duplicates, filtered rows, deadline stops, and honest empty results.

Common workflows

  • Remote recruiting: Track remote engineering, support, sales, or marketing roles by skill and region.
  • Job-board feeds: Build a curated remote-work feed or newsletter from current listings.
  • Salary research: Monitor visible salary ranges for remote roles and skill categories.
  • Lead generation: Find companies actively hiring remote workers in a target function.
  • Market analysis: Compare demand across tags, locations, and posting dates.
  • Automation: Feed job rows into alerts, dashboards, enrichment systems, or AI matching tools.

What data can you extract?

The Actor returns one dataset row per public RemoteOK job listing.

Field Description
id RemoteOK job identifier
slug RemoteOK job slug
epoch, postedAt Numeric and normalized ISO posting timestamps
date Posting date when available
company Hiring company name
position Job title or role
tags Skills and categories attached to the listing
category First RemoteOK category/tag
description Backward-compatible optional job description HTML
descriptionText, descriptionHtml Optional clean text and explicit source HTML
location Location text from the listing
isWorldwide Whether the location says worldwide, anywhere, or global
salaryMin Lower salary bound when available
salaryMax Upper salary bound when available
salaryCurrency, salaryDisclosed USD normalization and disclosure flag
seniority Conservative seniority hint inferred from public title/tags
applyUrl Direct apply or listing URL
sourceUrl Source job page URL
sourceFeedUrl RemoteOK API/category feed that supplied the row
logo Company logo URL when available
scrapedAt Timestamp when the Actor saved the row
runTag Optional workflow label copied from input

Example input

{
  "startUrls": [{"url": "https://remoteok.com/remote-python-jobs"}],
  "tags": ["python", "react"],
  "keywords": [],
  "location": "",
  "sinceDate": "",
  "minSalary": 0,
  "maxSalary": 0,
  "postedWithinDays": 30,
  "salaryOnly": false,
  "maxItems": 20,
  "includeDescription": false,
  "includeDescriptionHtml": false,
  "runTag": "monthly-python-feed"
}

Example output

{
  "id": "1133690",
  "slug": "remote-example-role-1133690",
  "epoch": 1784073600,
  "date": "2026-06-19T00:03:05+00:00",
  "postedAt": "2026-06-19T00:03:05.000Z",
  "company": "Example Company",
  "position": "Remote Software Engineer",
  "tags": ["python", "react"],
  "category": "python",
  "location": "Worldwide",
  "isWorldwide": true,
  "salaryMin": 100000,
  "salaryMax": 160000,
  "salaryCurrency": "USD",
  "salaryDisclosed": true,
  "seniority": null,
  "applyUrl": "https://remoteok.com/remote-jobs/example",
  "sourceUrl": "https://remoteok.com/remote-jobs/example",
  "sourceFeedUrl": "https://remoteok.com/remote-python-jobs.json",
  "logo": "https://remoteok.com/assets/example.png",
  "scrapedAt": "2026-06-20T00:00:00.000Z",
  "runTag": "monthly-python-feed"
}

How to run it

  1. Open the Actor on Apify.
  2. Add skills, tags, keywords, or leave filters broad.
  3. Optionally add location, salary, or date filters.
  4. Set maxItems to the number of matching jobs you want.
  5. Choose whether to include descriptions.
  6. Start the run and export the dataset.

Search tips

  • Use broad tags for market research: Tags like python, react, or marketing show category-level demand.
  • Use narrow filters for alerts: Combine tag, location, and sinceDate for daily or weekly monitoring.
  • Leave location empty for global remote jobs: Add location only when you need a regional subset.
  • Watch salary filters: Many listings do not publish salaries, so salary filters can reduce results sharply.
  • Choose salary behavior deliberately: salaryOnly excludes undisclosed salaries; minimum and maximum salary filters do the same.
  • Control row size: Enable includeDescriptionHtml only when you need source HTML; descriptionText is cleaner for AI and analysis.

Limits and caveats

  • The Actor extracts publicly visible RemoteOK job data.
  • It does not access private employer dashboards, applicant data, or login-gated content.
  • Some listings do not publish salary ranges, logos, descriptions, or exact locations.
  • Salary values are based on public listing data and should be reviewed before analysis.
  • RemoteOK's current public feeds are best for monitoring, not guaranteed historical backfills.
  • A successful zero-row filtered run is recorded as EMPTY_FILTERED; invalid inputs and unknown source changes fail clearly before paid result storage.

Categories

This Actor uses the Store categories JOBS, LEAD_GENERATION, and DEVELOPER_TOOLS for recruiting, hiring-signal, API, MCP, and automation discovery.

Integrations

You can connect RemoteOK job data to downstream tools:

  • Export CSV or Excel to spreadsheets for remote-work reports.
  • Send results to Slack, email, or webhooks after scheduled runs.
  • Build newsletters, job-board feeds, or niche alert workflows.
  • Load JSON rows into a database, warehouse, or BI dashboard.
  • Combine results with company enrichment or contact-finding Actors.

API usage

Node.js

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/remoteok-jobs-scraper').call({
  tags: ['python'],
  maxItems: 20
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

from apify_client import ApifyClient
import os

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/remoteok-jobs-scraper').call(run_input={
    'tags': ['python'],
    'maxItems': 20,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

cURL

curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~remoteok-jobs-scraper/runs?token=YOUR_APIFY_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"tags":["python"],"maxItems":20}'

MCP and AI agents

This Actor can be used through the official Apify MCP server at https://mcp.apify.com.

For a focused single-Actor tool setup, use:

claude mcp add apify-remoteok-jobs --transport http "https://mcp.apify.com/?tools=fetch_cat/remoteok-jobs-scraper"

Claude Desktop or another JSON-configured client can use:

{
  "mcpServers": {
    "apify-remoteok-jobs": {
      "url": "https://mcp.apify.com/?tools=fetch_cat/remoteok-jobs-scraper"
    }
  }
}

Use the same JSON keys shown in the input configuration table, such as tags, keywords, location, sinceDate, minSalary, maxSalary, maxItems, and includeDescription.

Example prompts:

  • "Find 20 RemoteOK Python jobs posted in the last seven days."
  • "Export RemoteOK jobs with disclosed salaries and clean descriptions."
  • "Monitor RemoteOK marketing jobs and label every row weekly-marketing."

Support

If a run fails, returns no data, or a field looks wrong, open an issue from the Actor page.

Please include the Apify run ID or run URL, input JSON, one example public URL, query, or input item, what you expected, and what the dataset returned. Small reproducible inputs make parsing or site-layout issues much faster to fix.

Privacy and data handling

This Actor runs with Apify limited permissions and only processes data needed for the documented run. It uses job-search inputs and public job-posting results to produce the output dataset and sends requests to public Remoteok Jobs pages/endpoints; results are stored in Apify run storage for your account. FetchCat does not use your inputs or outputs for advertising, does not use them for model training, and does not retain them outside the Apify run except for transient support debugging when you explicitly share run details. You are responsible for using the Actor lawfully, respecting the target site's terms, and avoiding unnecessary personal or sensitive data in inputs.

Common questions

Questions and answers reused from the canonical actor README.

Can I use this as a RemoteOK API?

Yes. You can run the Actor through the Apify API and read results from the Dataset API.

Can I export RemoteOK jobs to CSV or Excel?

Yes. Apify datasets can be downloaded as CSV, JSON, Excel, XML, RSS, HTML, or accessed through the API.

Why are salary fields empty?

Some RemoteOK listings do not publish salary ranges. Salary filters also exclude jobs without visible salary data.

Can I run recurring remote job alerts?

Yes. Use Apify schedules with focused tags, sinceDate, and a moderate maxItems value.