We Work Remotely Jobs Scraper
Pricing
Pay per event
We Work Remotely Jobs Scraper
π Extract current We Work Remotely vacancies with full descriptions, requirements, restrictions, skills, company details, and public apply links.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Collect current remote vacancies from We Work Remotely as clean JSON, CSV, Excel, XML, or RSS-ready data.
Search by keyword, combine category feeds, filter by region or recency, and enrich every vacancy with its full public job description and application link.
The Actor runs a real browser to handle the site's public Cloudflare delivery while keeping runs efficient by blocking images, media, fonts, ads, and analytics.
What does We Work Remotely Jobs Scraper do?
We Work Remotely Jobs Scraper turns public WWR job pages into structured vacancy records.
It can:
- π Search titles, technologies, companies, and role keywords.
- ποΈ Collect one or more public job categories.
- π― Process exact WWR search, category, all-jobs, or job-detail URLs.
- π Filter cards by remote region or company location.
- π Keep only listings with a parseable recent posted age.
- π Enrich jobs with descriptions, requirements, responsibilities, and benefits.
- π§ Capture timezone and geographic restrictions when they appear in the description.
- π Export canonical job, company, logo, and public application URLs.
- β»οΈ Deduplicate jobs by canonical URL across combined sources.
The output is one dataset row per vacancy, ready for export or automation.
Who is it for?
Recruiters and sourcers
Build a focused queue of remote candidates' opportunities by technology, seniority, category, or hiring region.
Use the public apply URL to route selected vacancies into a sourcing workflow.
Job aggregators
Refresh a WWR feed without copying pages by hand.
Canonical URLs and scrape timestamps make incremental ingestion and deduplication straightforward.
Talent intelligence teams
Compare demand for skills, locations, job types, and remote regions over time.
Store recurring datasets and load them into a warehouse or BI tool.
Developers and automation teams
Trigger scheduled searches through the Apify API, webhooks, integrations, or MCP.
Receive structured records instead of maintaining browser challenge logic.
Why use this remote jobs scraper?
- β Full details: get more than card titles and company names.
- β Flexible discovery: combine keyword searches and exact category URLs.
- β Useful filters: narrow by remote geography and listing age before export.
- β Public actions: preserve source and application links for verification.
- β Browser-grade access: use a route proven against current WWR delivery.
- β Cost control: choose listing-only mode when full descriptions are unnecessary.
- β Typed output: stable field names work with spreadsheets, APIs, and databases.
What data can I extract from We Work Remotely?
| Field | Description |
|---|---|
title | Public job title |
company | Hiring company |
companyLocation | Company headquarters shown on the listing |
category | WWR category from the detail page |
employmentType | Full-Time, Contract, or another displayed type |
remoteRegion | Geographic remote-work region |
salaryText | Salary badge when displayed |
postedText | Source age such as 3d |
postedDate | Estimated ISO date derived from the displayed age |
applyBefore | Public application deadline when displayed |
badges | Featured, Boosted, Top 100, or similar labels |
skills | Skills listed in the job sidebar |
description | Full public role description |
requirements | Extracted requirements section when identifiable |
responsibilities | Extracted role or responsibilities section |
benefits | Extracted benefits or offer section |
timezoneRestrictions | Timezone sentence found in the description |
geographicRestrictions | Geographic eligibility sentence when found |
applyUrl | Public external Apply now action |
companyUrl | WWR company profile URL |
companyLogoUrl | Public logo or company image URL |
sourceUrl | Canonical WWR job URL |
scrapedAt | UTC extraction timestamp |
Fields absent from a source page are omitted rather than filled with misleading placeholders.
How much does it cost to scrape We Work Remotely jobs?
The Actor uses pay-per-event pricing: a $0.005 one-time run-start event plus one event for each job saved.
| Apify tier | Price per job | Five jobs plus start |
|---|---|---|
| Free | $0.0073394 | about $0.0417 |
| Bronze | $0.0063821 | about $0.0369 |
| Silver | $0.004978 | about $0.0299 |
| Gold | $0.0038292 | about $0.0241 |
| Platinum | $0.0025528 | about $0.0178 |
| Diamond | $0.001787 | about $0.0139 |
A five-job prefilled run is intentionally small and suitable for evaluation.
Listing-only mode usually finishes faster than full-detail enrichment because it avoids one browser navigation per job.
Always use maxItems to cap a new workflow before scaling it.
How to scrape We Work Remotely in 5 steps
- Open the Actor input page.
- Enter a keyword such as
python, or add one or more WWR URLs. - Choose the maximum number of jobs and whether to include full details.
- Optionally add a region or recency filter.
- Click Start and export the default dataset when the run succeeds.
For recurring monitoring, save the input as an Apify task and attach a schedule.
Input parameters
keyword
Creates a WWR public search URL.
Examples include python, product designer, customer success, and a company name.
startUrls
Accepts exact public URLs on weworkremotely.com.
Supported routes include search pages, category pages, the all-jobs page, and individual job pages.
Other hosts and unrelated WWR paths fail closed.
categoryUrls
Combines multiple WWR category feeds in one run.
Duplicate job links across sources are saved once.
maxItems
Limits unique dataset records from 1 to 1,000.
The prefill is five jobs to keep the first run quick.
includeDetails
When true, the Actor opens each job page and extracts all enrichment fields.
When false, it returns fast listing-card fields only.
region
Performs a case-insensitive text match against the remote region and company location shown on a card.
Examples: Europe, United States, or Anywhere.
recencyDays
Keeps cards whose displayed posted age can be converted to a date within the selected window.
Unparseable ages are excluded when this filter is active.
proxyConfiguration
Direct browser access is the default.
Configure Apify Proxy or custom proxies only when your workload repeatedly encounters a Cloudflare challenge.
Example input
{"keyword": "python","maxItems": 10,"includeDetails": true,"region": "Anywhere","recencyDays": 30}
Category-monitor example:
{"categoryUrls": [{ "url": "https://weworkremotely.com/categories/remote-back-end-programming-jobs" }],"maxItems": 25,"includeDetails": true}
Example output
{"title": "Senior Backend Developer (Python)","company": "Proxify AB","companyLocation": "Sweden","category": "Back-End Programming","employmentType": "Full-Time","remoteRegion": "Anywhere in the World","postedText": "3d","postedDate": "2026-07-13","skills": ["Django", "Python"],"timezoneRestrictions": "Time zone: CET (+/- 3 hours).","applyUrl": "https://career.example/apply","sourceUrl": "https://weworkremotely.com/remote-jobs/example-role","scrapedAt": "2026-07-16T02:21:19.841Z"}
Real values change as WWR listings are updated.
Listing-only versus full-detail mode
Use listing-only mode for frequent lightweight discovery, URL monitoring, or title/company feeds.
Use full-detail mode for recruiting research, requirements analysis, application workflows, and rich search indexing.
| Mode | Listing fields | Description and apply data | Relative runtime |
|---|---|---|---|
| Listing only | Yes | No | Lower |
| Full details | Yes | Yes, when public | Higher |
A detail-page failure is logged.
If every requested detail fails, the run exits non-zero instead of claiming successful enrichment.
Filtering and deduplication tips
- Start with a broad keyword and a low
maxItems. - Add
regiononly after checking the exact labels WWR currently uses. - Use
recencyDaysfor daily or weekly monitor tasks. - Combine category URLs when one sourcing feed needs several disciplines.
- Use
sourceUrlas the durable deduplication key downstream. - Compare
scrapedAtwith prior runs to identify refreshed records. - Keep the original
postedTextbecausepostedDateis an estimate from age text.
Scheduling a remote-jobs monitor
Save a tested input as an Apify task.
Add an hourly, daily, or weekly schedule based on how quickly your workflow needs new vacancies.
Send the dataset to a webhook after each successful run.
In your destination, upsert by sourceUrl and retain the first-seen and last-seen timestamps.
Use a short recency window to reduce repeated records when appropriate.
Integrations
Google Sheets
Use the Google Sheets integration to append new WWR records to a recruiting tracker.
Deduplicate on sourceUrl before notifying a recruiter.
Slack or Microsoft Teams
Attach a webhook that posts jobs matching selected skills or remote regions.
Include title, company, remoteRegion, and applyUrl in the message.
Zapier and Make
Trigger a workflow after the Actor finishes.
Route high-priority vacancies to an ATS, CRM, email alert, or review queue.
Airbyte, BigQuery, and warehouses
Export recurring datasets for skill-demand, location, company, and category trend analysis.
Keep historical snapshots rather than overwriting the latest feed.
API usage with JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/we-work-remotely-jobs-scraper').call({keyword: 'python',maxItems: 10,includeDetails: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Use the Apify API with Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_APIFY_TOKEN')run = client.actor('automation-lab/we-work-remotely-jobs-scraper').call(run_input={'keyword': 'python','maxItems': 10,'includeDetails': True,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
Use the Apify API with cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~we-work-remotely-jobs-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"keyword":"python","maxItems":10,"includeDetails":true}'
Fetch dataset items after the run finishes:
$curl "https://api.apify.com/v2/datasets/DATASET_ID/items?clean=true&format=json"
Use We Work Remotely Jobs Scraper with MCP
Add the Actor to Claude Code:
$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/we-work-remotely-jobs-scraper"
For Claude Desktop, Cursor, or VS Code, add this server configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/we-work-remotely-jobs-scraper"}}}
Example prompts:
- βFind five new remote Python jobs on We Work Remotely and summarize their timezone restrictions.β
- βExtract the latest back-end category jobs and group them by remote region.β
- βReturn WWR vacancies posted this week that mention Django.β
Reliability and Cloudflare handling
WWR currently challenges plain HTTP clients.
This Actor uses Chromium, a browser-grade user agent, bounded challenge waits, and isolated detail sessions.
Heavy resources and common analytics requests are blocked to control bandwidth and compute.
Direct access is attempted first.
Optional proxy configuration is available for environments or periods where challenges recur.
Individual enrichment failures fall back to card fields, but total enrichment failure makes the run fail visibly.
Troubleshooting
Why did my run return fewer jobs than maxItems?
The keyword or category may contain fewer matching cards, duplicate URLs may have been removed, or the region/recency filter may exclude records.
Try removing filters and compare the visible WWR source page.
Why did the Actor report a Cloudflare challenge?
WWR may vary its challenge by traffic pattern or location.
Retry later with a low item limit or configure an Apify Proxy session.
Avoid high concurrency against the same source.
Why are some enrichment fields absent?
WWR job authors do not use a universal description template.
The Actor only emits requirements, benefits, restrictions, salary, deadlines, or skills when those values are identifiable on the public page.
Can I pass any website URL?
No.
Explicit URLs are restricted to relevant public We Work Remotely routes so unrelated targets cannot bypass the product scope.
Legality and responsible use
This Actor extracts publicly visible job information without logging in.
Public availability does not remove your responsibilities.
Review WWR's terms, robots policy, database rights, privacy requirements, and the laws that apply to your use case and location.
Do not collect personal data unnecessarily, overload the source, misrepresent vacancies, or use application data for prohibited discrimination or spam.
You are responsible for your input, retention, redistribution, and downstream use.
Data quality notes
postedDate is estimated from age labels such as 3d; retain postedText when exact timing matters.
Description sections are extracted from employer-authored text and may not be present or consistently named.
Apply URLs can point to an employer ATS and may expire when the vacancy closes.
Source pages remain the authority; use sourceUrl for verification.
Related remote job scrapers
- Remote OK Jobs Scraper for a separate public remote-jobs feed.
- Himalayas Remote Jobs Scraper for Himalayas vacancies.
- Built In Jobs Scraper for Built In job listings.
- LinkedIn Job Scraper for broader professional-network job discovery.
Different boards are separate sources; combine them downstream when you need wider coverage.
FAQ
Does the Actor require a We Work Remotely account?
No. It uses public search, category, and detail pages.
Does it expose private applicant information?
No. It collects public vacancy information and public application actions.
Can I scrape one job URL?
Yes. Add the exact WWR job URL to startUrls and enable full details.
Can I export to CSV or Excel?
Yes. Use the dataset export controls or API format parameters.
Are closed jobs included?
Only records reachable from the supplied public routes at run time are processed.
Can I run it every day?
Yes. Test a small input, save it as a task, schedule it, and deduplicate records by sourceUrl.
Does maxItems guarantee that many records?
No. It is an upper limit. Source availability and filters determine the actual count.
Is a proxy required?
Not normally. Direct browser access is the default; proxy configuration is an optional recovery tool.