We Work Remotely Jobs & Salary Scraper
Pricing
from $6.15 / 1,000 results
We Work Remotely Jobs & Salary Scraper
Scrape remote jobs from We Work Remotely by category. Extract job title, company, region, category, job type, salary range, apply URL, company website and full description. Export JSON, CSV or Excel. No login or API key.
Pricing
from $6.15 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
20 hours ago
Last modified
Categories
Share
We Work Remotely Jobs & Salary Scraper
Here is one real result, with every field the actor returns:
{"imageUrl": "https://we-work-remotely.imgix.net/logos/0171/6169/logo.gif?ixlib=rails-4.0.0&w=50&h=50&dpr=2&fit=fill&auto=compress","title": "THE PSYCHICS CONNECTION: Work at Home Psychics & Tarot Readers US & CANADA","company": "THE PSYCHICS CONNECTION","role": "Work at Home Psychics & Tarot Readers US & CANADA","url": "https://weworkremotely.com/remote-jobs/the-psychics-connection-work-at-home-psychics-tarot-readers-us-canada","jobId": "the-psychics-connection-work-at-home-psychics-tarot-readers-us-canada","category": "All Other Remote","employmentType": "Full-Time","remote": true,"region": "Anywhere in the World","state": "Missouri","salaryMin": null,"salaryMax": null,"salaryCurrency": null,"salaryPeriod": null,"salaryText": "$10,000 - $25,000 USD","companyHeadquarters": "CAPE GIRARDEAU MO","companyWebsite": "https://www.thepsychicsconnection.com/","companyAddress": "CAPE GIRARDEAU MO","applyUrl": null,"jobLocationType": "TELECOMMUTE","skills": null,"publishedAt": "2026-08-09T14:39:49.000Z","expiresAt": "2026-09-08T14:39:49.000Z","descriptionText": "Headquarters: CAPE GIRARDEAU MO \nURL: https://www.thepsychicsconnection.com/\n\nSpiritual Advisors (US/CANADA) *This is a remote position* [trimmed for brevity, full text returned by the actor]","descriptionHtml": "<img src=\"https://we-work-remotely.imgix.net/logos/0171/6169/logo.gif...\" /> [trimmed for brevity, full HTML returned by the actor]","observedAt": "2026-08-10T14:20:23.412Z","error": null}
The most complete We Work Remotely scraper available. It returns every field the job listing and job page expose, parses the salary range into structured numbers, adds company website and headquarters, and gives you seven filters plus an optional contact-enrichment add-on to target exactly the remote jobs you need.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor reads We Work Remotely category feeds, applies the filters you pass as input, optionally opens each job page to pull salary and apply details, and writes one normalized record per job to the run's dataset. Salary text is parsed into salaryMin, salaryMax, salaryCurrency and salaryPeriod, dates are normalized to ISO 8601, and missing source values are returned as null. An optional contact-enrichment add-on can attach a public business email and contact name to each job.
Data covers remote jobs listed on We Work Remotely across every category (programming, design, DevOps, customer support, sales and marketing, product, management and finance, and all other remote).
Quickstart
Open the actor, paste this into the input, and press Run. It returns the 10 most recent jobs across all categories with salary and apply details.
{"maxJobs": 10,"withDetails": true,"enrichContacts": false,"enrichContactsMax": 50,"category": ""}
Every input field is optional. With an empty input the actor returns the most recent jobs across all categories (default maxJobs is 10, details on).
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
maxJobs | integer | no | 10 | Maximum number of job listings to collect. |
withDetails | boolean | no | true | When on, each job also includes the salary range, employment type, company website, company address and apply URL taken from the job page. When off, only listing-level fields are collected and the run is faster. |
category | enum | no | (all) | Which We Work Remotely category to scrape. Leave empty for every category. One of the category slugs such as remote-design-jobs, remote-back-end-programming-jobs, all-other-remote-jobs. |
feedUrls | string[] | no | [] | Optional. One or more full We Work Remotely category page URLs (for example https://weworkremotely.com/categories/remote-design-jobs). When set, these override category. |
searchQuery | string | no | (empty) | Optional keyword to keep only jobs whose title, company, category, region or description contain it (case-insensitive). |
employmentType | string | no | (empty) | Optional. Keep only jobs whose employment type contains this text, for example Full-Time, Contract, Part-Time. |
region | string | no | (empty) | Optional. Keep only jobs whose region contains this text, for example USA Only, Europe, Anywhere in the World. |
minSalary | integer | no | (none) | Optional. Keep only jobs whose posted salary (max, else min) is at least this amount. Applies only to jobs that publish a salary and requires withDetails on. |
enrichContacts | boolean | no | false | Optional paid add-on. For each result without an email, attempt to find a public business contact email and a contact person's name. Billed per attempt, plus an extra charge only when an email is found. |
enrichContactsMax | integer | no | 50 | Cap how many results the add-on tries to enrich, to control add-on cost. Free Apify accounts are capped at 3. |
Output reference
One dataset item per job. Types: string, integer, boolean, string[], or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
imageUrl | string | Company logo URL. |
title | string | Full listing title (company plus role). |
company | string | Company name. |
role | string | Job role/position title. |
url | string | We Work Remotely job page URL. |
jobId | string | Job slug/ID from the URL. |
category | string | We Work Remotely category label. |
employmentType | string | Job type, for example Full-Time, Contract. |
remote | boolean | Whether the job is remote. |
region | string | Eligible region, for example Anywhere in the World, USA Only. |
state | string | State or locality when the source names one, else null. |
salaryMin | integer | Parsed lower bound of the salary range, or null. |
salaryMax | integer | Parsed upper bound of the salary range, or null. |
salaryCurrency | string | Parsed salary currency, or null. |
salaryPeriod | string | Parsed salary period (year, month, hour), or null. |
salaryText | string | Raw salary text from the listing, for example $10,000 - $25,000 USD. |
companyHeadquarters | string | Company headquarters from the job page. |
companyWebsite | string | Company website URL from the job page. |
companyAddress | string | Company address from the job page. |
applyUrl | string | External apply URL when present, else null. |
jobLocationType | string | Location type, for example TELECOMMUTE. |
skills | string[] | Skills parsed from the listing, or null. |
publishedAt | string | ISO 8601 publish timestamp. |
expiresAt | string | ISO 8601 expiry timestamp. |
descriptionText | string | Plain-text job description. |
descriptionHtml | string | HTML job description. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null on success. On a failed feed, a single item with a populated error field is written instead. |
enrichedEmail | string | Contact-enrichment add-on: public business email when found, else null. Present only when enrichContacts is on. |
enrichedContactName | string | Contact-enrichment add-on: contact person name when found. |
enrichedJobTitle | string | Contact-enrichment add-on: contact person job title when found. |
enrichedEmailStatus | string | Contact-enrichment add-on: verification status of the found email. |
enrichedSource | string | Contact-enrichment add-on: source the email/name was derived from. |
enrichedConfidence | number | Contact-enrichment add-on: confidence score for the found contact. |
Example output record
Real record from a live run (input {"maxJobs": 10, "withDetails": true, "category": ""}). Long description fields trimmed here for readability; the actor returns them in full:
{"imageUrl": "https://we-work-remotely.imgix.net/logos/0171/6169/logo.gif?ixlib=rails-4.0.0&w=50&h=50&dpr=2&fit=fill&auto=compress","title": "THE PSYCHICS CONNECTION: Work at Home Psychics & Tarot Readers US & CANADA","company": "THE PSYCHICS CONNECTION","role": "Work at Home Psychics & Tarot Readers US & CANADA","url": "https://weworkremotely.com/remote-jobs/the-psychics-connection-work-at-home-psychics-tarot-readers-us-canada","jobId": "the-psychics-connection-work-at-home-psychics-tarot-readers-us-canada","category": "All Other Remote","employmentType": "Full-Time","remote": true,"region": "Anywhere in the World","state": "Missouri","salaryMin": null,"salaryMax": null,"salaryCurrency": null,"salaryPeriod": null,"salaryText": "$10,000 - $25,000 USD","companyHeadquarters": "CAPE GIRARDEAU MO","companyWebsite": "https://www.thepsychicsconnection.com/","companyAddress": "CAPE GIRARDEAU MO","applyUrl": null,"jobLocationType": "TELECOMMUTE","skills": null,"publishedAt": "2026-08-09T14:39:49.000Z","expiresAt": "2026-09-08T14:39:49.000Z","descriptionText": "Headquarters: CAPE GIRARDEAU MO \nURL: https://www.thepsychicsconnection.com/\n\nSpiritual Advisors (US/CANADA) *This is a remote position* [trimmed]","descriptionHtml": "<img src=\"https://we-work-remotely.imgix.net/logos/0171/6169/logo.gif...\" /> [trimmed]","observedAt": "2026-08-10T14:20:23.412Z","error": null}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~weworkremotely-jobs-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"category":"remote-design-jobs","maxJobs":25,"withDetails":true}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~weworkremotely-jobs-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"searchQuery":"react","minSalary":80000,"maxJobs":100}'
Apify CLI:
apify call scrapers_lat/weworkremotely-jobs-scraper \--input '{"category":"remote-back-end-programming-jobs","maxJobs":10}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per job returned (
resultevent). See the pricing tab for the current per-result price. Fetching job-page details and contact enrichment are separate add-on charges. - No charge on failure. If a feed errors, the actor writes a single item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 jobs per run, and the contact-enrichment add-on is capped at 3 attempts. Upgrade for higher
maxJobs.
FAQ and troubleshooting
A run returned 0 records. Why?
Your filter combination matched nothing. Loosen filters (remove region, employmentType, searchQuery, or minSalary) or leave category empty. Zero-result runs are not charged.
Why are the salary fields null?
That job did not publish a numeric salary, or withDetails was off. salaryText holds the raw salary string when the listing shows one; salaryMin/salaryMax are parsed from it. Missing values are returned as null, never invented.
Why is applyUrl null?
The listing routes applications through the We Work Remotely job page rather than an external URL. Use url to reach the posting.
How do I only get high-paying jobs?
Set minSalary (with withDetails on). Only jobs that publish a salary are eligible for that filter.
How does contact enrichment work?
Turn on enrichContacts. For each job without an email, the add-on looks up a public business contact email and name, billed per attempt plus an extra charge only when an email is found. The enriched fields appear on each record.
Is this an official We Work Remotely tool? No. This actor is independent and has no affiliation with We Work Remotely. It reads only data that is publicly available on the site.
Related scrapers
- Working Nomads Jobs Scraper: Remote jobs aggregated from Working Nomads.
- Himalayas Remote Jobs Scraper: Remote jobs from Himalayas.
- Greenhouse Jobs Scraper: Jobs from Greenhouse-hosted career pages.
- Ashby Jobs Scraper: Jobs from Ashby-hosted career pages.
- Workday Jobs Scraper: Jobs from Workday career sites.
- Dice Tech Jobs Scraper: US technology jobs from Dice.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with We Work Remotely. Accesses only publicly available data.
