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

πŸ”Ž 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

Stas Persiianenko

Maintained by Community

Actor 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?

FieldDescription
titlePublic job title
companyHiring company
companyLocationCompany headquarters shown on the listing
categoryWWR category from the detail page
employmentTypeFull-Time, Contract, or another displayed type
remoteRegionGeographic remote-work region
salaryTextSalary badge when displayed
postedTextSource age such as 3d
postedDateEstimated ISO date derived from the displayed age
applyBeforePublic application deadline when displayed
badgesFeatured, Boosted, Top 100, or similar labels
skillsSkills listed in the job sidebar
descriptionFull public role description
requirementsExtracted requirements section when identifiable
responsibilitiesExtracted role or responsibilities section
benefitsExtracted benefits or offer section
timezoneRestrictionsTimezone sentence found in the description
geographicRestrictionsGeographic eligibility sentence when found
applyUrlPublic external Apply now action
companyUrlWWR company profile URL
companyLogoUrlPublic logo or company image URL
sourceUrlCanonical WWR job URL
scrapedAtUTC 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 tierPrice per jobFive jobs plus start
Free$0.0073394about $0.0417
Bronze$0.0063821about $0.0369
Silver$0.004978about $0.0299
Gold$0.0038292about $0.0241
Platinum$0.0025528about $0.0178
Diamond$0.001787about $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

  1. Open the Actor input page.
  2. Enter a keyword such as python, or add one or more WWR URLs.
  3. Choose the maximum number of jobs and whether to include full details.
  4. Optionally add a region or recency filter.
  5. 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.

ModeListing fieldsDescription and apply dataRelative runtime
Listing onlyYesNoLower
Full detailsYesYes, when publicHigher

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 region only after checking the exact labels WWR currently uses.
  • Use recencyDays for daily or weekly monitor tasks.
  • Combine category URLs when one sourcing feed needs several disciplines.
  • Use sourceUrl as the durable deduplication key downstream.
  • Compare scrapedAt with prior runs to identify refreshed records.
  • Keep the original postedText because postedDate is 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 ApifyClient
client = 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().items
print(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.

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.