We Work Remotely Jobs & Salary Scraper avatar

We Work Remotely Jobs & Salary Scraper

Pricing

from $6.15 / 1,000 results

Go to Apify Store
We Work Remotely Jobs & Salary Scraper

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

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

20 hours ago

Last modified

Share

We Work Remotely Jobs & Salary Scraper

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

Apify Coverage Output Billing

Table of contents

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

FieldTypeRequiredDefaultDescription
maxJobsintegerno10Maximum number of job listings to collect.
withDetailsbooleannotrueWhen 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.
categoryenumno(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.
feedUrlsstring[]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.
searchQuerystringno(empty)Optional keyword to keep only jobs whose title, company, category, region or description contain it (case-insensitive).
employmentTypestringno(empty)Optional. Keep only jobs whose employment type contains this text, for example Full-Time, Contract, Part-Time.
regionstringno(empty)Optional. Keep only jobs whose region contains this text, for example USA Only, Europe, Anywhere in the World.
minSalaryintegerno(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.
enrichContactsbooleannofalseOptional 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.
enrichContactsMaxintegerno50Cap 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.

FieldTypeDescription
imageUrlstringCompany logo URL.
titlestringFull listing title (company plus role).
companystringCompany name.
rolestringJob role/position title.
urlstringWe Work Remotely job page URL.
jobIdstringJob slug/ID from the URL.
categorystringWe Work Remotely category label.
employmentTypestringJob type, for example Full-Time, Contract.
remotebooleanWhether the job is remote.
regionstringEligible region, for example Anywhere in the World, USA Only.
statestringState or locality when the source names one, else null.
salaryMinintegerParsed lower bound of the salary range, or null.
salaryMaxintegerParsed upper bound of the salary range, or null.
salaryCurrencystringParsed salary currency, or null.
salaryPeriodstringParsed salary period (year, month, hour), or null.
salaryTextstringRaw salary text from the listing, for example $10,000 - $25,000 USD.
companyHeadquartersstringCompany headquarters from the job page.
companyWebsitestringCompany website URL from the job page.
companyAddressstringCompany address from the job page.
applyUrlstringExternal apply URL when present, else null.
jobLocationTypestringLocation type, for example TELECOMMUTE.
skillsstring[]Skills parsed from the listing, or null.
publishedAtstringISO 8601 publish timestamp.
expiresAtstringISO 8601 expiry timestamp.
descriptionTextstringPlain-text job description.
descriptionHtmlstringHTML job description.
observedAtstringISO 8601 timestamp of when the record was collected.
errorstringnull on success. On a failed feed, a single item with a populated error field is written instead.
enrichedEmailstringContact-enrichment add-on: public business email when found, else null. Present only when enrichContacts is on.
enrichedContactNamestringContact-enrichment add-on: contact person name when found.
enrichedJobTitlestringContact-enrichment add-on: contact person job title when found.
enrichedEmailStatusstringContact-enrichment add-on: verification status of the found email.
enrichedSourcestringContact-enrichment add-on: source the email/name was derived from.
enrichedConfidencenumberContact-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:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "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 (result event). 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 error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on 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.

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.