We Work Remotely Scraper
Pricing
Pay per usage
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 hours ago
Last modified
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
| Field | Type | Default | Description |
|---|---|---|---|
categories | array | ["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. |
searchQueries | array | [] | 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. |
maxItemsPerCategory | integer | 100 | Cap on jobs returned per category before keyword filtering. |
concurrency | integer | 5 | How many categories to fetch in parallel. |
proxyConfig | object | { "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-jobsremote-back-end-programming-jobsremote-front-end-programming-jobsremote-full-stack-programming-jobsremote-devops-sysadmin-jobsremote-design-jobsremote-product-jobsremote-customer-support-jobsremote-sales-and-marketing-jobsremote-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
roleandcompanyare split out of the listing title for easy filtering and dedup.urlis the canonical listing page, which is where candidates apply.skillsis an array of tags parsed from the listing (present on most, but not all, jobs).regionis the human-readable location (for example "Anywhere in the World", "USA Only", or a specific state).descriptionTextis the full posting as clean plain text;descriptionHtmlkeeps the original formatting.publishedAt/expiresAtare 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.