RemoteOK Jobs Scraper & Remote Jobs API
Pricing
from $0.30 / 1,000 job extracteds
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.
Pricing
from $0.30 / 1,000 job extracteds
Rating
0.0
(0)
Developer
Hanna Nosova
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
3
Monthly active users
an hour ago
Last modified
Categories
Share
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.
Ready-to-run examples
Use these saved Store examples as starting points. Open any example to prefill the Actor input, then adjust URLs, keywords, limits, or filters for your own run.
- Web3 Remote Jobs
- Saas Remote Jobs
- Weekly New Jobs Feed
- Entry Level Remote Jobs
- Contract Remote Jobs
- High Salary Remote Jobs
- View all ready-to-run examples (25 examples)
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 |
Pricing
This Actor uses Apify pay-per-event pricing. The prices below come from the current Actor pricing configuration. Apify public plans map to Store discount tiers, so the table shows both the user-facing plan context and the pricing tier name. The final price shown in Apify depends on the user account plan and any custom agreement.
| Event | What is charged | Price |
|---|---|---|
start | One-time fee charged when a run starts. Covers fixed startup cost. | $0.005 |
| Event | What is charged | Free / no discount | Starter / Bronze | Scale / Silver | Business / Gold | Custom / Platinum | Custom / Diamond |
|---|---|---|---|---|---|---|---|
item | Charged per RemoteOK job extracted. | $0.575 / 1,000 | $0.5 / 1,000 | $0.39 / 1,000 | $0.3 / 1,000 | $0.2 / 1,000 | $0.14 / 1,000 |
Apify may also charge platform usage for compute, storage, proxies, or data transfer outside this Actor pricing. Check the Actor run and the Apify Pricing tab for the exact cost shown to your account.
Input configuration
| Setting | JSON key | Use it for | Example |
|---|---|---|---|
| RemoteOK feeds | startUrls | Main API or RemoteOK category pages; leave empty for the main feed. | [{"url":"https://remoteok.com/remote-python-jobs"}] |
| Tags or skills | tags | Skill tags or terms to match. Leave empty for all jobs. | ["python", "react"] |
| Keywords | keywords | Extra free-text filters for title, company, tags, location, or description. | ["backend"] |
| Exclude keywords | excludeKeywords | Skip jobs matching any unwanted term. | ["senior"] |
| Company | company | Keep companies containing this text. | Acme |
| Location contains | location | Keep jobs whose location text contains the value. | USA |
| Posted since date | sinceDate | Keep jobs posted on or after a YYYY-MM-DD date. | 2026-07-01 |
| Posted within days | postedWithinDays | Relative freshness window for scheduled monitors; use instead of sinceDate. | 7 |
| Minimum salary | minSalary | Keep jobs whose salary range reaches at least this annual USD amount. | 100000 |
| Maximum salary | maxSalary | Keep jobs whose salary range starts at or below this annual USD amount. Use 0 to disable. | 180000 |
| Salary only | salaryOnly | Keep only jobs with a disclosed salary bound. | true |
| Maximum jobs | maxItems | Cap saved job rows and spend. | 25 |
| Include descriptions | includeDescription | Include RemoteOK HTML job descriptions. | false |
| Include explicit HTML | includeDescriptionHtml | Return both descriptionHtml and clean descriptionText. | false |
| Safe run deadline | maxRunSeconds | Preserve stored rows before the platform timeout. | 270 |
| Run tag | runTag | Copy a stable workflow label to every row. | weekly-python-feed |
| Proxy configuration | proxyConfiguration | Optional Apify Proxy routing; direct HTTP is the default. | {"useApifyProxy":false} |
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 ApifyClientimport osclient = 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().itemsprint(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."
FAQ
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.
Related scrapers
- LinkedIn Jobs Scraper
- Remotive Jobs Scraper
- Reed.co.uk Jobs Scraper
- Greenhouse Job Board Scraper
- Lever Jobs Scraper
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.