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
descriptionfield. - 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, orcustomer support. - Add free-text matching: Use
keywordsfor 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
sinceDateand 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_SUMMARYfor 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
- Open the Actor on Apify.
- Add skills, tags, keywords, or leave filters broad.
- Optionally add location, salary, or date filters.
- Set
maxItemsto the number of matching jobs you want. - Choose whether to include descriptions.
- Start the run and export the dataset.
Search tips
- Use broad tags for market research: Tags like
python,react, ormarketingshow category-level demand. - Use narrow filters for alerts: Combine tag, location, and
sinceDatefor 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:
salaryOnlyexcludes undisclosed salaries; minimum and maximum salary filters do the same. - Control row size: Enable
includeDescriptionHtmlonly when you need source HTML;descriptionTextis 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.