We Work Remotely Jobs Scraper avatar

We Work Remotely Jobs Scraper

Pricing

Pay per event

Go to Apify Store
We Work Remotely Jobs Scraper

We Work Remotely Jobs Scraper

Pull We Work Remotely's public RSS feeds — the main feed or any of 10 category feeds — into typed job rows: company, position, category, job type, region, skills, plain-text description, and posting/expiry dates. No login, no pagination.

Pricing

Pay per event

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share


🎯 What this scrapes

We Work Remotely (weworkremotely.com) publishes its entire live job list as public RSS 2.0, plus one dedicated feed per category. This Actor fetches the main feed or one-or-more category feeds you choose, merges and de-duplicates results by GUID when multiple categories are selected, splits each packed "Company: Position" title into structured fields, normalizes sparse location/skill/type fields, cleans each HTML job description down to plain text, and lands one typed dataset row per job — no pagination, no login, no per-job page visits required.

🔥 Features

  • 🛡️ We rotate browser fingerprintscurl-cffi impersonation replays real Chrome / Firefox TLS handshakes on every request, so the target sees a browser, not a script.
  • 🔁 We retry with exponential backoff on 408 / 429 / 5xx — up to 5 attempts, honouring Retry-After whenever the target sends it.
  • 🧱 We fail loud, not silent — a broken upstream feed surfaces as a failed run with a clear status message, never a quiet empty dataset.
  • 🧊 We keep the dataset clean — Pydantic-validated typed rows, packed titles split into company/position, sparse fields null-normalized instead of passed through as empty strings.
  • 💰 You pay only for results that land — Pay-Per-Event pricing. No data, no charge.

💡 Use cases

  • Recruiter tooling — pull today's remote openings for a given category, filtered by keyword or company.
  • Job-board aggregators — mirror We Work Remotely's coverage into your own listings alongside the rest of the Devil Scrapes job-board fleet.
  • Labor-market research — track category and skill demand across We Work Remotely's postings over time.
  • Lead generation — find companies actively hiring remote roles as a growth/budget signal.

⚙️ How to use it

  1. Click Try for free at the top of the page.
  2. Optionally pick one or more categories to narrow the feed — leave empty to pull the whole main feed (capped by maxItems).
  3. Optionally set keywords or company to filter further.
  4. Click Start. Output streams into the run's dataset.
  5. Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.

Call it from Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("DevilScrapes/weworkremotely-jobs-scraper").call(
run_input={
"categories": ["design", "product"],
"keywords": [],
"company": "",
"maxItems": 100,
"proxyConfiguration": {"useApifyProxy": False},
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["position"], item["company"])

📥 Input

FieldTypeRequiredDefaultNotes
categoriesarrayno[]Fetch these category feeds instead of the main feed; merged and de-duplicated by GUID.
keywordsarrayno[]Keep jobs whose position/description/company contains ANY keyword (case-insensitive substring).
companystringno""Case-insensitive substring match on company name.
maxItemsintegerno100Cap on rows emitted, applied after merge/dedupe/filter (1-1000).
proxyConfigurationobjectno{"useApifyProxy": false}Standard Apify Proxy config — not required for this public feed target.

Example input

{
"categories": ["design", "product"],
"keywords": [],
"company": "",
"maxItems": 100,
"proxyConfiguration": { "useApifyProxy": false }
}

📤 Output

Every row is one dataset item.

FieldTypeNotes
guidstringStable unique identifier (equals url in every sampled item).
urlstringWe Work Remotely job page URL.
companystringHiring company, split from the packed title.
positionstringJob title, split from the packed title.
categorystring | nullWWR category label, null if untagged.
job_typestring | nullEmployment type (e.g. "Full-Time"), null if empty.
regionstring | nullFree-text region, null if empty.
countrystring | nullFree-text country, null if empty.
statestring | nullFree-text state/province, null if empty.
skillsarrayComma-separated skills split into stripped tokens. May be empty.
descriptionstringHTML stripped to clean plain text.
logo_urlstring | nullCompany logo URL, null if absent.
pub_datestring | nullISO-8601 publish timestamp, null if unparseable.
expires_atstring | nullISO-8601 expiry timestamp, null if absent/unparseable.

Example output

{
"guid": "https://weworkremotely.com/remote-jobs/uttr-project-manager",
"url": "https://weworkremotely.com/remote-jobs/uttr-project-manager",
"company": "UTTR",
"position": "Project Manager",
"category": "Sales and Marketing",
"job_type": "Full-Time",
"region": "Anywhere in the World",
"country": null,
"state": "New York",
"skills": [],
"description": "Headquarters: New York URL: https://www.uttr.com/ UTTR stands for...",
"logo_url": "https://wwr-pro.s3.amazonaws.com/logos/0171/6351/logo.gif",
"pub_date": "2026-09-09T15:41:42+00:00",
"expires_at": "2026-10-09T15:41:42+00:00"
}

💰 Pricing

Pay-Per-Event — you pay only when these events fire:

EventUSDWhat it is
actor-start$0.20One-off warm-up charge per run
result$0.0015Per dataset item (→ $1.50 / 1 000 results)

Example: 1,000 results at the rates above ≈ $1.70 total ($0.20 start + $1.50 for the results). No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.

🚧 Limitations

We Work Remotely's RSS feeds only expose the current live listings — there's no historical archive and no pagination cursor, so this Actor returns a single snapshot per run. Only 10 category feeds are publicly offered (the "All Other Remote" category has no dedicated feed and isn't a selectable filter).

❓ FAQ

Is this legal?

We only fetch content the source makes publicly available via its own documented RSS feeds. Respect We Work Remotely's terms of service before using output commercially.

How do I export to Sheets?

After the run, click Storage → Dataset → Export and pick CSV. Google Sheets imports it directly.

Why is country empty on most rows?

We Work Remotely's own feed leaves country/state empty on most postings — we pass through exactly what the source reports, as null when it's missing, rather than guessing.

Can I fetch more than one category at once?

Yes — select multiple values in categories; results are merged and de-duplicated by guid before maxItems is applied.

💬 Your feedback

Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.