We Work Remotely Scraper avatar

We Work Remotely Scraper

Pricing

Pay per usage

Go to Apify Store
We Work Remotely Scraper

We Work Remotely Scraper

Scrape remote job listings from We Work Remotely without a login. Pull the all-jobs feed or specific categories, with company, role, region, job type, skills, apply link, logo, and full description. Optional keyword filter across every field.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Goutam Soni

Goutam Soni

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 hours ago

Last modified

Categories

Share

Scrape remote job listings from We Work Remotely (role, company, category, region, skills, salary-relevant tags, listing URL, company logo, and the full job description) with no login and no API key required. Pull the all-jobs feed or any set of categories, cap the volume, and filter by keyword across every field.

What it does

  • Extracts every open remote job from the all-jobs feed (the most recent listings across all categories) or from any specific categories you choose.
  • Returns a clean, structured row per job: role, company, listing URL, category, job type, region, skills, full description (plain text and HTML), company logo, published date, and expiry date.
  • Optional keyword filter keeps only jobs whose title, company, skills, region, category, or description matches your terms.
  • Fetches multiple categories in parallel and applies your per-category cap.
  • No account, no cookies, no API key. Runs straight out of the box.

Use cases

  • Job-board aggregation: feed fresh remote roles into your own job site, newsletter, or Slack/Discord channel.
  • Recruiting and sourcing: monitor which companies are hiring for specific skills (Python, React, design, customer support) and how often.
  • Market and hiring research: track remote-hiring trends by category, region, and job type over time.
  • Lead generation: build a list of companies actively hiring remotely as outbound prospects.
  • Talent-pool alerts: watch a category for new postings matching a keyword and notify candidates the moment a match appears.

Input

FieldTypeDefaultDescription
categoriesarray["remote-jobs"]Category slugs to fetch. remote-jobs is the all-jobs feed (most recent across every category). Pass specific slugs to target a niche.
searchQueriesarray[]Optional keywords. When set, only jobs matching at least one term (across title, company, skills, region, category, or description) are kept. Empty keeps every job.
maxItemsPerCategoryinteger100Cap on jobs returned per category before keyword filtering.
concurrencyinteger5How many categories to fetch in parallel.
proxyConfigobject{ "useApifyProxy": false }Optional proxy. Not required for this source.

Example input

{
"categories": [
"remote-full-stack-programming-jobs",
"remote-design-jobs"
],
"searchQueries": ["python", "react"],
"maxItemsPerCategory": 100
}

To pull everything recent, run with the default ["remote-jobs"].

Common category slugs

  • remote-jobs (all jobs)
  • remote-programming-jobs
  • remote-back-end-programming-jobs
  • remote-front-end-programming-jobs
  • remote-full-stack-programming-jobs
  • remote-devops-sysadmin-jobs
  • remote-design-jobs
  • remote-product-jobs
  • remote-customer-support-jobs
  • remote-sales-and-marketing-jobs
  • remote-management-and-finance-jobs

Output

Each job is one dataset row, with keys ordered by importance (identity, then attributes, then content, then media, then dates):

{
"type": "job",
"role": "Senior Backend Engineer",
"company": "Acme Co",
"url": "https://weworkremotely.com/remote-jobs/acme-co-senior-backend-engineer",
"category": "Back-End Programming",
"jobType": "Full-Time",
"region": "Anywhere in the World",
"skills": ["Python", "PostgreSQL", "Django"],
"title": "Acme Co: Senior Backend Engineer",
"descriptionText": "About Acme Co. We are hiring a Senior Backend Engineer...",
"descriptionHtml": "<p>About Acme Co...</p>",
"companyLogo": "https://example.com/logo.png",
"publishedAt": "2026-06-17T17:33:39.000Z",
"expiresAt": "2026-07-17T17:33:39.000Z",
"scrapedAt": "2026-06-18T09:00:00.000Z"
}

Key fields

  • role and company are split out of the listing title for easy filtering and dedup.
  • url is the canonical listing page, which is where candidates apply.
  • skills is an array of tags parsed from the listing (present on most, but not all, jobs).
  • region is the human-readable location (for example "Anywhere in the World", "USA Only", or a specific state).
  • descriptionText is the full posting as clean plain text; descriptionHtml keeps the original formatting.
  • publishedAt / expiresAt are ISO 8601 timestamps for filtering by freshness.

FAQ

Is it free? How is it priced? The actor runs on Apify's standard pay-per-use model. There is no per-run start fee. You pay per job returned, so a small run costs very little and you only pay for what you extract.

Do I need a login, account, or API key for the source? No. The listings are public, so there is nothing to log in to and no key to provide. Just set your input and run.

How many jobs can I get? The all-jobs feed carries up to the 100 most recent listings across all categories. Each category feed carries its own current openings (typically a few dozen). To widen coverage, request several categories at once. maxItemsPerCategory caps each category before keyword filtering.

How fast is it? Each category is a single request, and categories run in parallel, so a typical multi-category run finishes in seconds.

Can I filter to only the jobs I care about? Yes. Use searchQueries to keep only jobs that match your keywords (skills, role, company, region, or any text in the description). Or target specific categories to narrow by job type up front.

Why is skills or companyLogo sometimes empty? Those values are optional on the source listing. When a posting does not include skill tags or a logo, the field is returned empty rather than guessed. Core fields (role, company, url, category, region, dates) are always present.