RemoteOK Jobs Scraper
Pricing
from $1.00 / 1,000 results
RemoteOK Jobs Scraper
[๐ฐ $1.0 / 1K] Extract remote jobs from RemoteOK by category, keyword, salary, tags, location, and posted-within window. Returns structured data with normalized salaries, ISO dates, and clean descriptions.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
SolidCode
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Pull remote job listings from RemoteOK at scale โ normalized USD salaries, structured tags, ISO-dated posts, geographic restrictions, apply links, and clean text descriptions on every row. Built for technical recruiters, remote-work analysts, and job-aggregator teams who need fresh remote-job intelligence from one of the largest English-speaking remote boards without checking the homepage every morning or maintaining a custom scraper.
Why This Scraper?
- 17 official RemoteOK categories โ Engineering, Software Development, Senior, Lead, Management, Design, Marketing, Growth, Sales, Customer Support, Product, Operations, Finance, Data, Writing & Content, Technical, and Non-tech. Pick one or combine several in a single run.
- 5 posted-window filters โ
24h,7d,30d,90d, orany. Surface only this week's listings for an alert, or pull a 90-day backlog for trend analysis. - Required-tags AND filter โ combine skills like
python+aws+seniorand only get jobs that match every one. Case-insensitive, applied across job tags. - USD salary parsed into three fields โ
salaryMinUSD,salaryMaxUSD, and a pre-formattedsalaryTextlike$80k โ $120k. Not a free-text "salary" blob you have to regex yourself. - Minimum-salary filter that keeps unlisted salaries โ set a floor of, say, $100,000 and the actor returns jobs at or above it plus jobs with no salary disclosed. Most boards drop the latter silently.
- ISO 8601
postedDateplus rawpostedEpochโ one field for humans and dashboards, one for time-series joins and recency math. - HTML and clean-text descriptions side by side โ keep
descriptionHtmlfor fidelity, usedescriptionTextfor downstream NLP, embedding, or LLM ingestion. Toggle off the cleanup pass to shrink output when you don't need it. - Apply links normalized to lowercase host โ RemoteOK serves mixed-case URLs (
https://remoteOK.com/...). We lowercase the host so the same job never appears twice in your CRM or pipeline. - Browse deeper history than the homepage โ RemoteOK's public feed only exposes the newest ~99 jobs. This actor reaches into the deep XHR pagination layer to pull thousands of historical postings per category.
Use Cases
Recruiting & Talent Sourcing
- Build a live feed of senior Engineering or Design roles for outbound targeting
- Match passive candidates to fresh openings by required skill stack
- Track which companies are hiring most aggressively for remote teams
Compensation Benchmarking
- Pull min/max USD salary ranges by category and seniority
- Compare disclosed pay across Engineering, Product, Design, and Marketing
- Build internal pay-band reports backed by current-market data
Job Aggregators & Board Operators
- Mirror RemoteOK listings into your own job board with full attribution
- Refresh categories on a daily schedule and dedupe by
id - Enrich your existing inventory with logos, tags, and geographic restrictions
Market Intelligence & Research
- Quantify demand for specific tech stacks (
react,rust,kubernetes) over time - Detect emerging remote-friendly industries by tag-frequency analysis
- Track location-restriction language (
europe-only,americas,worldwide)
Lead Generation for HR & Dev Tools
- Identify companies hiring at scale โ your buyer signal for ATS, payroll, and DevOps platforms
- Pull company logos and apply URLs for outreach personalization
- Filter by category to focus on segments that match your ICP
Job Seekers & Career Coaches
- Get a clean daily list of Python, Sales, or Customer Support remote roles
- Filter by minimum salary and geographic eligibility in one pass
- Export to CSV or Google Sheets for tracking applications
Getting Started
Newest Jobs from the Global Feed
The simplest possible run โ latest remote jobs across every category:
{"maxResults": 100}
Engineering Jobs Posted This Week
Narrow to one category and the last seven days:
{"categories": ["engineer"],"postedWithin": "7d","maxResults": 200}
Senior Python Roles Paying $120k+
Combine a category, required-tags AND filter, and a salary floor:
{"categories": ["engineer", "senior"],"requiredTags": ["python", "senior"],"minSalaryUSD": 120000,"postedWithin": "30d","maxResults": 500}
Europe-Restricted Design Jobs from a Specific URL
Paste any RemoteOK URL and add a geographic substring filter:
{"searchUrls": ["https://remoteok.com/remote-design-jobs"],"locationContains": "europe","keyword": "product","maxResults": 100,"includeGlobalFeed": false}
Input Reference
What to Scrape
| Parameter | Type | Default | Description |
|---|---|---|---|
categories | string[] | [] | Pick one or more of 17 RemoteOK categories (Engineering, Design, Sales, Customer Support, etc.). Leave empty to use the global feed only. |
searchUrls | string[] | [] | Paste any RemoteOK URL โ the homepage, a category page like https://remoteok.com/remote-python-jobs, or https://remoteok.com/api. Each URL is scraped separately. |
includeGlobalFeed | boolean | true | Also pull the latest jobs across all categories and merge with category results. Turn off if you only want a specific category or URL. |
Filters
| Parameter | Type | Default | Description |
|---|---|---|---|
keyword | string | "" | Only keep jobs whose title, company, tags, or description contain this text. Case-insensitive. |
requiredTags | string[] | [] | Only return jobs that include ALL of these tags (e.g. python, react, senior). Case-insensitive. |
minSalaryUSD | integer | null | Only return jobs whose maximum advertised salary is at least this amount (USD/year). Jobs without disclosed salary pass through. |
postedWithin | select | "any" | Time window: any, 24h, 7d, 30d, or 90d. |
locationContains | string | "" | Substring match on the job's geographic restriction (e.g. europe, americas, worldwide). Case-insensitive. |
Limits & Options
| Parameter | Type | Default | Description |
|---|---|---|---|
maxResults | integer | 100 | Maximum unique jobs to return across all sources. Set to 0 for unlimited. |
stripHtml | boolean | true | Emit a clean plain-text descriptionText alongside the HTML description. Turn off to shrink output when you only need the raw HTML. |
Output
Every row is a single job posting with normalized salary, dates, tags, and descriptions:
{"id": "1078421","slug": "senior-python-engineer-acme-corp-1078421","url": "https://remoteok.com/remote-jobs/1078421","applyUrl": "https://remoteok.com/l/1078421","position": "Senior Python Engineer","company": "Acme Corp","companyLogoUrl": "https://remoteok.com/assets/logos/acme.png","location": "Worldwide","tags": ["python", "senior", "django", "aws", "remote"],"salaryMinUSD": 120000,"salaryMaxUSD": 160000,"salaryText": "$120k โ $160k","descriptionHtml": "<p>We're looking for a senior Python engineer to join our distributed team...</p>","descriptionText": "We're looking for a senior Python engineer to join our distributed team...","postedDate": "2026-05-12T08:30:00+00:00","postedEpoch": 1747038600,"categories": ["engineer"],"sourceUrl": "https://remoteok.com/api?tags=engineer","scrapedAt": "2026-05-16T14:22:31+00:00"}
Fields
| Field | Type | Description |
|---|---|---|
id | string | Unique RemoteOK job identifier. Stable across runs โ use it for deduplication. |
slug | string | URL-friendly job slug (e.g. senior-python-engineer-acme-corp-1078421). |
url | string | Canonical RemoteOK listing URL, lowercase host. |
applyUrl | string | RemoteOK's apply redirect link, lowercase host. May be null on global-feed rows. |
position | string | Job title as posted by the company. |
company | string | Hiring company name. |
companyLogoUrl | string | Company logo image URL when available. |
location | string | Geographic restriction text (e.g. Worldwide, Europe, Americas only). |
tags | string[] | Lower-cased skill, role, and seniority tags. |
salaryMinUSD | number | Minimum advertised annual salary in USD. Null when not disclosed. |
salaryMaxUSD | number | Maximum advertised annual salary in USD. Null when not disclosed. |
salaryText | string | Pre-formatted range like $120k โ $160k or up to $100k. Null when not disclosed. |
descriptionHtml | string | Full job description with original HTML markup preserved. |
descriptionText | string | Clean plain-text version of the description. Null when stripHtml is off. |
postedDate | string | ISO 8601 timestamp of when the job was posted. |
postedEpoch | number | Unix epoch seconds of the posting date โ useful for time-series joins. |
categories | string[] | RemoteOK category slug(s) the job was pulled from. |
sourceUrl | string | The exact feed URL that produced this row. |
scrapedAt | string | ISO 8601 timestamp of extraction. |
Tips for Best Results
- Start small. Run with
maxResults: 50on your first try to confirm the categories and filters return what you expect, then scale up. - Combine
categoriesandrequiredTags. Categories narrow the source feed; tags narrow within it. Pairingcategories: ["engineer"]withrequiredTags: ["rust"]is far faster than pulling Engineering and filtering on the consumer side. - Leave
minSalaryUSDempty when you want full coverage. RemoteOK paywalls salary on many listings โ setting a floor drops only the jobs whose disclosed maximum is below it, but unlisted-salary jobs always pass through. Set it deliberately when you only want paid-disclosure roles. - Use
postedWithin: "24h"for daily-alert workflows. Schedule the actor on Apify, dedupe byidagainst yesterday's run, and you have a clean new-jobs feed. - Use
keywordfor cross-field matching. It searches title, company, tags, and description in one pass โ handy for niche terms like"hugging face"or"vector database"that don't have dedicated tags. - Pick the description format that matches your downstream tool. Keep
descriptionHtmlif you need formatting (lists, links, headings) preserved for rendering or a search index that handles HTML; the bundleddescriptionTextis friendlier for downstream NLP, embeddings, and plain-text storage. - Keep
includeGlobalFeed: truefor category runs. RemoteOK's category pages can omit jobs that were filed under a sibling tag โ merging the global feed back in catches them, and the deduper drops repeats byid.
Pricing
$1.00 per 1,000 results. No compute charges โ you only pay per result returned.
| Results | Estimated Cost |
|---|---|
| 100 | $0.10 |
| 1,000 | $1.00 |
| 10,000 | $10.00 |
| 100,000 | $100.00 |
A "result" is any unique job row in the output dataset. Platform fees beyond per-result charges do not apply to this actor.
Integrations
Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:
- Zapier / Make / n8n โ Workflow automation
- Google Sheets โ Direct spreadsheet export
- Slack / Email โ Notifications on new results
- Webhooks โ Trigger custom APIs on run completion
- Apify API โ Full programmatic access
Legal & Ethical Use
This actor is designed for legitimate recruiting, market research, compensation benchmarking, and job-board operations. Users are responsible for complying with applicable laws and RemoteOK's terms of service. Do not use extracted data for spam, harassment, or any illegal purpose, and respect the privacy of any personal contact information surfaced in job descriptions.