Remote Jobs from 4 Public Job Feeds in One Table
Pricing
$2.00 / 1,000 result rows
Remote Jobs from 4 Public Job Feeds in One Table
For remote job hunters and job boards: pull live listings from Remote OK, Jobicy, Arbeitnow and We Work Remotely's public feeds into one table, one row per job, with the source credit and apply link on every row.
Pricing
$2.00 / 1,000 result rows
Rating
0.0
(0)
Developer
US Tech Automations
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
A remote jobs scraper and remote jobs API in one Actor: pulls Remote OK jobs and We Work Remotely jobs, plus Jobicy and Arbeitnow, from each site's own public feed, and returns one row per listing — deduplicated across sources — instead of you writing four separate integrations.
Introduction
Four public job feeds, read live on every run, each with its own shape:
Remote OK's JSON API, Jobicy's JSON API, Arbeitnow's paged JSON API (kept to
its remote: true rows only — most of that board is on-site), and We Work
Remotely's public RSS feed. This Actor normalizes all four into one row
shape, drops exact company+title duplicates across sources (keeping the
earliest-posted copy), and pushes nothing invented: a source that fails or
is blocked contributes one honest error row instead of guessed data.
A fifth source, Remotive, is listed in the input because it is a named
source for this tool, but it is never actually fetched: Remotive's own
robots.txt disallows /api/*, which covers the job feed endpoint. This
Actor does not call a robots-disallowed path, so selecting Remotive always
returns one row explaining that instead of live data. See SOURCE_TERMS.md.
Input
| Field | What it does |
|---|---|
sources | Which feeds to read. Default: Remote OK, Jobicy, Arbeitnow, We Work Remotely. |
keywords | Optional. Keep only jobs whose title or tags contain at least one of these words (case-insensitive). |
postedWithinDays | Optional. Drop jobs posted more than this many days ago. |
maxItems | Hard ceiling on rows returned (1–5000, default 200). This is also your spend cap. |
previousIds | Optional. dedupe_key values from an earlier run; matching jobs come back with is_new: false. |
proxyConfiguration | When set, every request goes through that proxy. Off by default. |
Pricing
$0.002 per row returned. No start fee. A run capped at 200 rows costs at
most $0.40; a quiet run that returns fewer rows costs less.
maxItems is the spend cap: the run cannot cost more than that number times
$0.002, whatever the feeds hold.
Every row the run returns bills at that price, and that includes an error row
(at most one per source that failed or, for Remotive, is robots-blocked).
Error rows are counted against maxItems along with job rows, so the cap is a
cap on the whole run, not just on the job listings. If the cap is small enough
that both do not fit, room is kept for the error rows first, because they are
what tells you a source was down.
Output — one row per job
| Field | What it holds |
|---|---|
source_name | "Remote OK", "Jobicy", "Arbeitnow", "We Work Remotely", or "Remotive" |
source_url | The exact job page on the source's own site, unmodified |
apply_url | The source's own URL for this job — never rewritten by this Actor. (Jobicy's free feed itself returns its own listing page here, not the employer's ATS link; see SOURCE_TERMS.md.) |
job_id | The source's own ID or slug for this job |
title | Job title |
company | Employer name |
company_logo | Always null — this Actor never ships a source's logo image (Remote OK's terms specifically reserve its logo) |
location_limits | Where the source says this role is open to, as published (may be a country, region, or "Anywhere") |
job_type | e.g. "Full-Time", "Contract", when the source publishes one |
seniority | e.g. "Senior", "Director" — only Jobicy publishes this; null from the other three |
salary_min / salary_max / salary_currency | When the source publishes a number; a 0/missing value is treated as unpublished, not a real $0 salary |
tags | The source's own category/skill tags, as a list |
posted_at | ISO 8601 UTC timestamp |
description_text | Plain text (HTML tags stripped), capped at 5000 characters |
dedupe_key | Normalized company|title, used to drop exact duplicates across sources and to match previousIds |
is_new | true unless dedupe_key was in previousIds |
fetched_at | When this run read the source, in UTC |
error | null on a real job row; on a source-failure row, every other field is null and this holds the reason |
Example (real row, live run 2026-09-21, Jobicy)
{"source_name": "Jobicy","source_url": "https://jobicy.com/jobs/153812-creative-motion-design","apply_url": "https://jobicy.com/jobs/153812-creative-motion-design","job_id": "153812","title": "Creative (Motion Design)","company": "Superside","company_logo": null,"location_limits": "Anywhere","job_type": "Contract","seniority": "Senior","salary_min": null,"salary_max": null,"salary_currency": null,"tags": ["Creative & Design"],"posted_at": "2026-09-21T13:59:59Z","description_text": "Superside is looking for a motion designer with the creativity, technical expertise, and innovation mindset to push the boundaries of motion design. [...truncated for this README; full run returned 3005 characters here]","dedupe_key": "superside|creative motion design","is_new": true,"fetched_at": "2026-09-21T17:23:58Z","error": null}
Required credit (please keep this)
Remote OK's and Jobicy's own terms require a kept, followed link back to
the source on any page that shows this data, and Arbeitnow's and We Work
Remotely's terms ask for the same. Every row already carries source_name
and an unmodified source_url/apply_url for exactly this reason — if you
build a page or app from this data, keep that link visible and pointing at
the source's own URL, and do not swap in a different logo for Remote OK's.
See SOURCE_TERMS.md for the exact quoted terms.
Recommendations
Run with keywords set to your role/skill so a small maxItems still
returns a relevant table. If you only want Arbeitnow's genuinely-remote
listings, expect a slower per-row yield from that source specifically — see
"Limitations."
Limitations — what this does not do
- Remotive is never fetched. Its
robots.txtblocks the feed path; see above andSOURCE_TERMS.md. - Arbeitnow's remote rows are rare and can trip rate limiting. A live
page of 250 Arbeitnow listings held only 12 marked
remote: trueon 2026-09-21, so this Actor must scan many pages per remote row. A live test run on 2026-09-21 was answered with an HTTP 429 Cloudflare challenge after 17 Arbeitnow page requests in one run;fetch.pynow stops itself at 12 Arbeitnow page requests per run to stay clear of that. A run that asks for many rows and selects Arbeitnow may still get fewer Arbeitnow rows than other sources, or an Arbeitnow error row, rather than a guess. - Jobicy's
apply_urlis Jobicy's own listing page, not the employer's application form, because reaching the employer's own link requires a paid Jobicy API key this Actor does not use. SeeSOURCE_TERMS.md. - Jobicy can contribute at most 50 rows to any run. This Actor reads
Jobicy's free feed in one call at its own page size (
count=50); it does not page Jobicy for more, so raisingmaxItemsnever gets you more than 50 Jobicy rows in a single run. - No claim about uptime or how fresh a feed is beyond what was measured
in
LOCAL_RUN.mdat the time this Actor was built. Feeds update on each source's own schedule, not this Actor's. - No de-duplication against your own database —
previousIdsonly flagsis_new; it does not filter rows out. - When the proxy setting is set, every request goes through that proxy.
- No salary normalization.
salary_min/salary_max/salary_currencyare passed through as each source published them (period — hourly vs. yearly — is not separately captured); most Arbeitnow and We Work Remotely rows carry no salary at all.
FAQ
Where does the data come from? Four sources' own public feeds, read live on every run: Remote OK's JSON API, Jobicy's JSON API, Arbeitnow's paged JSON API, and We Work Remotely's public RSS feed. Never from a stored copy.
Does it need an API key or a login? No. All four feeds used here are public and unauthenticated.
Why did I get a row with error set and every other field blank?
That source failed to answer, or (for Remotive) is permanently
robots-blocked. No job was invented to replace it.
Why did I get fewer rows than maxItems?
Either the selected sources and filters held that many jobs and no more, the
run hit maxItems first, (for Arbeitnow specifically) the 12-page
politeness ceiling was reached before enough remote: true rows turned up,
(for Jobicy specifically) its own feed caps at 50 rows per run, or a small
number of listings were dropped because the source gave no usable
source/apply link for them (see "Required credit" above).
Is there support? Yes. Raise it through the Apify Store issues tab for this Actor, or email operations@ustechautomations.com. Replies within 2 business days.
Refunds and support
Refunds: if a run returns zero job rows for a valid input, email operations@ustechautomations.com within 7 days and we refund that run. Support: same address, replies within 2 business days.