WeWorkRemotely Jobs + Expiry History avatar

WeWorkRemotely Jobs + Expiry History

Pricing

$3.00 / 1,000 results

Go to Apify Store
WeWorkRemotely Jobs + Expiry History

WeWorkRemotely Jobs + Expiry History

The complete WeWorkRemotely board — every posting, not the 100-item RSS most scrapers stop at — kept after it closes, with when and why each role ended (filled early vs ran to expiry). Employer name, logo, category and full description, typed and served at database speed.

Pricing

$3.00 / 1,000 results

Rating

0.0

(0)

Developer

Hyperbach

Hyperbach

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

2 days ago

Last modified

Categories

Share

Not just another WeWorkRemotely scraper. The complete WeWorkRemotely board — every posting, not the 100-item RSS most scrapers stop at — kept after it closes, with the one thing a live scrape can never give you: when each job ended and why (filled early vs ran to expiry). Served at database speed.

Why this archive, not a live scrape

  • Postings that are gone, with the reason. status=gone returns removed listings and gone_reason splits filled-early from ran-to-expiry — WeWorkRemotely publishes each posting's expiry date, so the two are actually distinguishable. A live scrape can't produce this: it only sees what's open right now.
  • The whole board, not a capped feed. Most WeWorkRemotely scrapers read the public RSS (100 items) or a single category page. This is the complete live board — every category, deduplicated — enumerated in full and archived daily.
  • Change history, not a snapshot. Deadline and posting changes are recorded as dated transitions rather than overwritten, so you can see when a role was extended or reposted.
  • Clean and typed. Employer name and logo, category tags, employment type, location and the full description as structured fields — not raw HTML you have to post-process.
  • Database speed, and unblockable. You read our maintained archive, not weworkremotely.com, so a run answers as a query and can never be rate-limited or Cloudflare-challenged.

Who it's for

  • Recruiters & talent researchers — time-to-fill by role, repost patterns, which employers churn the same position — read straight off the filled/expired history.
  • Labor-market & trend researchers — a clean panel of the entire remote board with open-and-close dates — measure hiring velocity and role churn, not just what's live today.
  • Job-board & SaaS builders — a normalized, complete remote-jobs feed with logos and categories and an archive envelope (status + gone_reason) to build on.
  • Market & competitive analysts — track which companies and categories are hiring over time, and how long postings stay open before they fill.

Quick start

Basic — newest postings

{
"maxItems": 10
}

Filtered

{
"keyword": "engineer",
"remoteOnly": true,
"maxItems": 50
}

Notification mode — only what appeared since the last run

{
"postedSince": ""
}

Output

One record per posting:

fieldmeaning
job_idStable unique key for the posting, <source>:<id>. Deduplicate across runs and join to your own data on this.
urlCanonical posting URL.
titleJob title.
companyEmployer name as the board lists it.
company_slugThe board's identifier for the employer.
company_logo_urlEmployer logo, when the board provides one.
location_restrictionWhere the posting says the role may be based.
employment_typeFull time, contract, and so on, as declared by the employer.
categoriesCategory tags the board assigned to the posting.
descriptionFull posting description.
salary_currencyISO currency of the advertised band.
salary_unitPeriod the band refers to (e.g. YEAR, HOUR).
posted_atWhen the posting first appeared.
first_seen_atWhen our archive first captured it.
expires_atThe board's own expiry date, when it exposes one.
statuslive while listed, gone once removed.
gone_reasonfilled if removed before its expiry date, expired if it ran to term.
gone_atThe date the posting was first observed gone. Null while it is live. Naukri overwrites its expired list nightly, so this is only knowable to whoever was watching that day.
apply_urlWhere to apply for the role.
enrichedWhether employment type, category and logo have been resolved yet — a posting is returned as soon as it is found, enriched or not.

Example record:

{
"job_id": "wwr_jobs:remote-jobs/common-room-commercial-account-executive",
"url": "https://weworkremotely.com/remote-jobs/common-room-commercial-account-executive",
"title": "Commercial Account Executive",
"company": "Common Room",
"company_slug": "common-room",
"company_logo_url": "https://wwr-pro.s3.amazonaws.com/logos/0171/5957/logo.gif",
"location_restriction": "Anywhere in the World",
"employment_type": "Full-Time",
"categories": [
"Customer Support"
],
"description": "&lt;img src=\"https://we-work-remotely.imgix.net/logos/0171/5957/logo.gif?ixlib=rails-4.0.0&amp;w=50&amp;h=50&amp;dpr=2&amp;fit=fill&amp;auto=compress\" /&gt;\n\n&lt;p&gt;\n &lt;strong …(truncated for display)",
"salary_currency": "USD",
"salary_unit": "YEAR",
"posted_at": "2026-07-23 13:29:13+00",
"first_seen_at": "2026-07-26 19:21:54.171467+00",
"expires_at": "2026-08-22 13:29:13+00",
"status": "live",
"gone_reason": null,
"gone_at": null,
"apply_url": null,
"enriched": true
}

Pricing

$0.003 per result — pay only for the postings a run returns, with no start fee. Above the $0.001 commodity scrapers because you get the whole board (not a 100-item RSS feed) plus the archive: postings kept after they close, each tagged filled-early vs ran-to-expiry. A rung below the Himalayas archive ($0.004), which also carries salary and the employer's real domain.

Usage patterns

  • What closed, and why — Set status=gone to study removals; gone_reason splits filled-early from ran-to-expiry — a hiring signal you can't get from a live board.
  • The complete board — Leave filters open and you get every current posting on WeWorkRemotely, not the latest 100 an RSS scrape returns.
  • Incremental sync — Leave postedSince empty; each run continues from the previous one's cursor — no duplicates, nothing skipped.

Input configuration

fieldtypedefaultwhat it does
keywordstringMatches job title or category.
companystringEmployer name as the board lists it. Partial matches work.
postedSincestringISO timestamp. Leave empty and the Actor remembers where it stopped, returning only new postings each run.
goneSincestringOnly postings observed dead at or after this ISO timestamp. The query this archive exists to answer.
statuslive / gone / any"live"'Gone' returns postings that have been removed, with why — the part no live scraper can give you.
locationstringSubstring match on the posting's location.
remoteOnlybooleanfalseOnly postings the employer marks as remote.
descriptionSearchstringSubstring match inside the job description.
excludeTitlestringDrop postings whose title contains this.
maxItemsinteger500Upper bound on results returned in a single run.
fullRefreshbooleanfalseBy default each run returns only what appeared since your last one, so a schedule never re-delivers the same page. Tick this to ignore that bookmark and re-pull the full result set for your filters — and it clears the stored cursor, so your next ordinary run starts clean.
enrichedOnlybooleanfalseReturn only postings whose salary, employment type and description have been parsed. Off by default: an unenriched record still carries title, company, location and dates, and withholding it trades a real answer for a slower better one.

FAQ

How is this different from other WeWorkRemotely scrapers?

Two ways. It returns the complete board rather than the 100-item RSS most scrapers read, and it's a maintained archive: postings are kept after they close (status=gone) with gone_reason splitting filled-early from ran-to-expiry — history a live scrape structurally cannot produce.

Does it include salary or the employer's website?

No. WeWorkRemotely doesn't publish a salary on most postings, and its pages link back to weworkremotely.com rather than the employer's own domain — so this Actor doesn't invent either. You get employer name, logo, category, employment type, location, the full description, and the archive envelope. If you need salary and the employer's real domain, that's the Himalayas archive Actor.

I get no results.

Filters combine with AND. Loosen keyword, or set status=any to include gone postings.

Will I see the same job twice?

Not in notification mode — leave postedSince empty and each run continues where the last one stopped.

Is this live?

It is a continuously maintained archive: the full board is re-enumerated daily, new postings appear within a day of going up, and closed ones stay with their disappearance recorded.

Integration

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('hyperbach/weworkremotely-jobs-history').call({"maxItems": 10});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')
run = client.actor('hyperbach/weworkremotely-jobs-history').call(run_input={'maxItems': 10})
items = client.dataset(run['defaultDatasetId']).list_items().items

CLI

$apify call hyperbach/weworkremotely-jobs-history --input '{"maxItems": 10}'

REST

curl -X POST "https://api.apify.com/v2/acts/hyperbach~weworkremotely-jobs-history/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H 'Content-Type: application/json' -d '{"maxItems": 10}'

Support

support@hyperbach.com

This page is generated from the Actor's schemas and a live sample — it cannot describe a field the Actor does not have.