Dataspryva

We Work Remotely Job Listings & Salary Extractor

Reads We Work Remotely category pages or keyword search results and follows each listing for salary range, employment type, skills, applicant region requirements, and company details.

Input schema

Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.

FieldTypeRequiredDescription
modestringrequiredWhat to scrape. browse reads category feeds, search filters the full current inventory, byUrls accepts We Work Remotely links.
categoriesarrayoptionalOne or more categories. Leave empty to collect every category (recommended for the full inventory).
searchTermstringoptionalWords to match in the title, company, category or description. All words must match. Required in search mode.
Show all input fields
FieldTypeRequiredDescription
modestringrequiredWhat to scrape. browse reads category feeds, search filters the full current inventory, byUrls accepts We Work Remotely links.
categoriesarrayoptionalOne or more categories. Leave empty to collect every category (recommended for the full inventory).
searchTermstringoptionalWords to match in the title, company, category or description. All words must match. Required in search mode.
startUrlsarrayoptionalJob, category, search, company or listing URLs. Mix freely. (mode=byUrls)
employmentTypesarrayoptionalEmployment types to keep. Leave empty for all. We Work Remotely publishes Full-Time and Contract roles.
regionsarrayoptionalKeep jobs open to one or more regions. Jobs open worldwide always match. Leave empty for all.
countriesarrayoptionalKeep jobs open to one or more countries (ISO-2 codes). Jobs open worldwide always match. Leave empty for all.
postedWithinstringoptionalKeep jobs listed within this window. The listing date is the current (renewed) date, not the original post date.
minSalaryintegeroptionalMinimum annualized salary in USD. Jobs without a disclosed salary are kept unless requireSalary is on. Published currencies are not converted.
maxSalaryintegeroptionalMaximum annualized salary in USD. Jobs without a disclosed salary are kept unless requireSalary is on. Published currencies are not converted.
requireSalarybooleanoptionalOnly keep jobs with a confidently parsed salary range. Off by default so jobs that do not disclose pay are not lost.
includeDescriptionbooleanoptionalInclude the full description HTML and text. Salary is parsed even when this is off.
cleanHtmlbooleanoptionalRemove scripts, tracking pixels and unsafe attributes from descriptionHtml.
includeDetailsbooleanoptionalAlso fetch each job's HTML page for extra structured fields. The public job XML (apply URL/email, company bio, exact dates) is always read. Off by default; adds one HTML request per job.
includeCompanyProfilebooleanoptionalFetch the company profile for each emitted job (website, logo, about, open-job count). On by default; adds one request per company.
incrementalbooleanoptionalOnly return jobs that are new or renewed since the previous run of the same search. State is stored automatically.
stateKeystringoptionalOptional name for an incremental campaign. Leave empty to derive it from the search filters.
maxItemsintegeroptionalMaximum jobs to return (1-5000).

Download the published input schema

View complete JSON
{
  "description": "Collect We Work Remotely jobs from the board's 12 official category RSS feeds, with salary parsing, region/country eligibility, full descriptions and company profiles.",
  "properties": {
    "categories": {
      "default": [],
      "description": "One or more categories. Leave empty to collect every category (recommended for the full inventory).",
      "editor": "select",
      "items": {
        "enum": [
          "remote-full-stack-programming-jobs",
          "remote-front-end-programming-jobs",
          "remote-back-end-programming-jobs",
          "remote-customer-support-jobs",
          "remote-design-jobs",
          "remote-product-design-jobs",
          "remote-ux-ui-design-jobs",
          "remote-devops-sysadmin-jobs",
          "remote-management-and-finance-jobs",
          "remote-product-jobs",
          "remote-sales-and-marketing-jobs",
          "all-other-remote-jobs"
        ],
        "enumTitles": [
          "Full-Stack Programming",
          "Front-End Programming",
          "Back-End Programming",
          "Customer Support",
          "Design",
          "Product Design",
          "UX/UI Design",
          "DevOps and Sysadmin",
          "Management and Finance",
          "Product",
          "Sales and Marketing",
          "All Other Remote"
        ],
        "type": "string"
      },
      "prefill": [
        "remote-full-stack-programming-jobs"
      ],
      "title": "Job categories",
      "type": "array",
      "uniqueItems": true
    },
    "cleanHtml": {
      "default": true,
      "description": "Remove scripts, tracking pixels and unsafe attributes from descriptionHtml.",
      "prefill": true,
      "title": "Clean description HTML",
      "type": "boolean"
    },
    "countries": {
      "default": [],
      "description": "Keep jobs open to one or more countries (ISO-2 codes). Jobs open worldwide always match. Leave empty for all.",
      "editor": "select",
      "items": {
        "enum": [
          "AD",
          "AE",
          "AF",
          "AG",
          "AI",
          "AL",
          "AM",
          "AO",
          "AQ",
          "AR",
          "AS",
          "AT",
          "AU",
          "AW",
          "AX",
          "AZ",
          "BA",
          "BB",
          "BD",
          "BE",
          "BF",
          "BG",
          "BH",
          "BI",
          "BJ",
          "BL",
          "BM",
          "BN",
          "BO",
          "BQ",
          "BR",
          "BS",
          "BT",
          "BV",
          "BW",
          "BY",
          "BZ",
          "CA",
          "CC",
          "CD",
          "CF",
          "CG",
          "CH",
          "CI",
          "CK",
          "CL",
          "CM",
          "CN",
          "CO",
          "CR",
          "CU",
          "CV",
          "CW",
          "CX",
          "CY",
          "CZ",
          "DE",
          "DJ",
          "DK",
          "DM",
          "DO",
          "DZ",
          "EC",
          "EE",
          "EG",
          "EH",
          "ER",
          "ES",
          "ET",
          "FI",
          "FJ",
          "FK",
          "FM",
          "FO",
          "FR",
          "GA",
          "GB",
          "GD",
          "GE",
          "GF",
          "GG",
          "GH",
          "GI",
          "GL",
          "GM",
          "GN",
          "GP",
          "GQ",
          "GR",
          "GS",
          "GT",
          "GU",
          "GW",
          "GY",
          "HK",
          "HM",
          "HN",
          "HR",
          "HT",
          "HU",
          "ID",
          "IE",
          "IL",
          "IM",
          "IN",
          "IO",
          "IQ",
          "IR",
          "IS",
          "IT",
          "JE",
          "JM",
          "JO",
          "JP",
          "KE",
          "KG",
          "KH",
          "KI",
          "KM",
          "KN",
          "KP",
          "KR",
          "KW",
          "KY",
          "KZ",
          "LA",
          "LB",
          "LC",
          "LI",
          "LK",
          "LR",
          "LS",
          "LT",
          "LU",
          "LV",
          "LY",
          "MA",
          "MC",
          "MD",
          "ME",
          "MF",
          "MG",
          "MH",
          "MK",
          "ML",
          "MM",
          "MN",
          "MO",
          "MP",
          "MQ",
          "MR",
          "MS",
          "MT",
          "MU",
          "MV",
          "MW",
          "MX",
          "MY",
          "MZ",
          "NA",
          "NC",
          "NE",
          "NF",
          "NG",
          "NI",
          "NL",
          "NO",
          "NP",
          "NR",
          "NU",
          "NZ",
          "OM",
          "PA",
          "PE",
          "PF",
          "PG",
          "PH",
          "PK",
          "PL",
          "PM",
          "PN",
          "PR",
          "PS",
          "PT",
          "PW",
          "PY",
          "QA",
          "RE",
          "RO",
          "RS",
          "RU",
          "RW",
          "SA",
          "SB",
          "SC",
          "SD",
          "SE",
          "SG",
          "SH",
          "SI",
          "SJ",
          "SK",
          "SL",
          "SM",
          "SN",
          "SO",
          "SR",
          "SS",
          "ST",
          "SV",
          "SX",
          "SY",
          "SZ",
          "TC",
          "TD",
          "TF",
          "TG",
          "TH",
          "TJ",
          "TK",
          "TL",
          "TM",
          "TN",
          "TO",
          "TR",
          "TT",
          "TV",
          "TW",
          "TZ",
          "UA",
          "UG",
          "UM",
          "US",
          "UY",
          "UZ",
          "VA",
          "VC",
          "VE",
          "VG",
          "VI",
          "VN",
          "VU",
          "WF",
          "WS",
          "YE",
          "YT",
          "ZA",
          "ZM",
          "ZW"
        ],
        "enumTitles": [
          "Andorra",
          "United Arab Emirates",
          "Afghanistan",
          "Antigua and Barbuda",
          "Anguilla",
          "Albania",
          "Armenia",
          "Angola",
          "Antarctica",
          "Argentina",
          "American Samoa",
          "Austria",
          "Australia",
          "Aruba",
          "Åland Islands",
          "Azerbaijan",
          "Bosnia and Herzegovina",
          "Barbados",
          "Bangladesh",
          "Belgium",
          "Burkina Faso",
          "Bulgaria",
          "Bahrain",
          "Burundi",
          "Benin",
          "Saint Barthélemy",
          "Bermuda",
          "Brunei Darussalam",
          "Bolivia (Plurinational State of)",
          "Bonaire, Sint Eustatius and Saba",
          "Brazil",
          "Bahamas",
          "Bhutan",
          "Bouvet Island",
          "Botswana",
          "Belarus",
          "Belize",
          "Canada",
          "Cocos (Keeling) Islands",
          "Congo (Democratic Republic of the)",
          "Central African Republic",
          "Congo",
          "Switzerland",
          "Côte d'Ivoire",
          "Cook Islands",
          "Chile",
          "Cameroon",
          "China",
          "Colombia",
          "Costa Rica",
          "Cuba",
          "Cabo Verde",
          "Curaçao",
          "Christmas Island",
          "Cyprus",
          "Czechia",
          "Germany",
          "Djibouti",
          "Denmark",
          "Dominica",
          "Dominican Republic",
          "Algeria",
          "Ecuador",
          "Estonia",
          "Egypt",
          "Western Sahara",
          "Eritrea",
          "Spain",
          "Ethiopia",
          "Finland",
          "Fiji",
          "Falkland Islands (Malvinas)",
          "Micronesia (Federated States of)",
          "Faroe Islands",
          "France",
          "Gabon",
          "United Kingdom of Great Britain and Northern Ireland",
          "Grenada",
          "Georgia",
          "French Guiana",
          "Guernsey",
          "Ghana",
          "Gibraltar",
          "Greenland",
          "Gambia",
          "Guinea",
          "Guadeloupe",
          "Equatorial Guinea",
          "Greece",
          "South Georgia and the South Sandwich Islands",
          "Guatemala",
          "Guam",
          "Guinea-Bissau",
          "Guyana",
          "Hong Kong",
          "Heard Island and McDonald Islands",
          "Honduras",
          "Croatia",
          "Haiti",
          "Hungary",
          "Indonesia",
          "Ireland",
          "Israel",
          "Isle of Man",
          "India",
          "British Indian Ocean Territory",
          "Iraq",
          "Iran (Islamic Republic of)",
          "Iceland",
          "Italy",
          "Jersey",
          "Jamaica",
          "Jordan",
          "Japan",
          "Kenya",
          "Kyrgyzstan",
          "Cambodia",
          "Kiribati",
          "Comoros",
          "Saint Kitts and Nevis",
          "Korea (Democratic People's Republic of)",
          "Korea (Republic of)",
          "Kuwait",
          "Cayman Islands",
          "Kazakhstan",
          "Lao People's Democratic Republic",
          "Lebanon",
          "Saint Lucia",
          "Liechtenstein",
          "Sri Lanka",
          "Liberia",
          "Lesotho",
          "Lithuania",
          "Luxembourg",
          "Latvia",
          "Libya",
          "Morocco",
          "Monaco",
          "Moldova (Republic of)",
          "Montenegro",
          "Saint Martin (French part)",
          "Madagascar",
          "Marshall Islands",
          "North Macedonia",
          "Mali",
          "Myanmar",
          "Mongolia",
          "Macao",
          "Northern Mariana Islands",
          "Martinique",
          "Mauritania",
          "Montserrat",
          "Malta",
          "Mauritius",
          "Maldives",
          "Malawi",
          "Mexico",
          "Malaysia",
          "Mozambique",
          "Namibia",
          "New Caledonia",
          "Niger",
          "Norfolk Island",
          "Nigeria",
          "Nicaragua",
          "Netherlands",
          "Norway",
          "Nepal",
          "Nauru",
          "Niue",
          "New Zealand",
          "Oman",
          "Panama",
          "Peru",
          "French Polynesia",
          "Papua New Guinea",
          "Philippines",
          "Pakistan",
          "Poland",
          "Saint Pierre and Miquelon",
          "Pitcairn",
          "Puerto Rico",
          "Palestine, State of",
          "Portugal",
          "Palau",
          "Paraguay",
          "Qatar",
          "Réunion",
          "Romania",
          "Serbia",
          "Russian Federation",
          "Rwanda",
          "Saudi Arabia",
          "Solomon Islands",
          "Seychelles",
          "Sudan",
          "Sweden",
          "Singapore",
          "Saint Helena, Ascension and Tristan da Cunha",
          "Slovenia",
          "Svalbard and Jan Mayen",
          "Slovakia",
          "Sierra Leone",
          "San Marino",
          "Senegal",
          "Somalia",
          "Suriname",
          "South Sudan",
          "Sao Tome and Principe",
          "El Salvador",
          "Sint Maarten (Dutch part)",
          "Syrian Arab Republic",
          "Eswatini",
          "Turks and Caicos Islands",
          "Chad",
          "French Southern Territories",
          "Togo",
          "Thailand",
          "Tajikistan",
          "Tokelau",
          "Timor-Leste",
          "Turkmenistan",
          "Tunisia",
          "Tonga",
          "Türkiye",
          "Trinidad and Tobago",
          "Tuvalu",
          "Taiwan, Province of China",
          "Tanzania, United Republic of",
          "Ukraine",
          "Uganda",
          "United States Minor Outlying Islands",
          "United States of America",
          "Uruguay",
          "Uzbekistan",
          "Holy See",
          "Saint Vincent and the Grenadines",
          "Venezuela (Bolivarian Republic of)",
          "Virgin Islands (British)",
          "Virgin Islands (U.S.)",
          "Viet Nam",
          "Vanuatu",
          "Wallis and Futuna",
          "Samoa",
          "Yemen",
          "Mayotte",
          "South Africa",
          "Zambia",
          "Zimbabwe"
        ],
        "type": "string"
      },
      "prefill": [],
      "title": "Applicant countries",
      "type": "array",
      "uniqueItems": true
    },
    "employmentTypes": {
      "default": [],
      "description": "Employment types to keep. Leave empty for all. We Work Remotely publishes Full-Time and Contract roles.",
      "editor": "select",
      "items": {
        "enum": [
          "Full-Time",
          "Contract"
        ],
        "enumTitles": [
          "Full-Time",
          "Contract"
        ],
        "type": "string"
      },
      "prefill": [],
      "title": "Employment types",
      "type": "array",
      "uniqueItems": true
    },
    "includeCompanyProfile": {
      "default": true,
      "description": "Fetch the company profile for each emitted job (website, logo, about, open-job count). On by default; adds one request per company.",
      "prefill": false,
      "title": "Fetch company profiles",
      "type": "boolean"
    },
    "includeDescription": {
      "default": true,
      "description": "Include the full description HTML and text. Salary is parsed even when this is off.",
      "prefill": true,
      "title": "Include full description",
      "type": "boolean"
    },
    "includeDetails": {
      "default": false,
      "description": "Also fetch each job's HTML page for extra structured fields. The public job XML (apply URL/email, company bio, exact dates) is always read. Off by default; adds one HTML request per job.",
      "prefill": false,
      "title": "Fetch detail pages",
      "type": "boolean"
    },
    "incremental": {
      "default": false,
      "description": "Only return jobs that are new or renewed since the previous run of the same search. State is stored automatically.",
      "prefill": false,
      "title": "New jobs only",
      "type": "boolean"
    },
    "maxItems": {
      "default": 200,
      "description": "Maximum jobs to return (1-5000).",
      "editor": "number",
      "maximum": 5000,
      "minimum": 1,
      "prefill": 3,
      "title": "Max jobs",
      "type": "integer"
    },
    "maxSalary": {
      "description": "Maximum annualized salary in USD. Jobs without a disclosed salary are kept unless requireSalary is on. Published currencies are not converted.",
      "editor": "number",
      "maximum": 2000000,
      "minimum": 0,
      "title": "Maximum salary (USD)",
      "type": "integer"
    },
    "minSalary": {
      "description": "Minimum annualized salary in USD. Jobs without a disclosed salary are kept unless requireSalary is on. Published currencies are not converted.",
      "editor": "number",
      "maximum": 2000000,
      "minimum": 0,
      "title": "Minimum salary (USD)",
      "type": "integer"
    },
    "mode": {
      "default": "browse",
      "description": "What to scrape. browse reads category feeds, search filters the full current inventory, byUrls accepts We Work Remotely links.",
      "editor": "select",
      "enum": [
        "browse",
        "search",
        "byUrls"
      ],
      "enumTitles": [
        "Browse categories",
        "Search by keyword",
        "Scrape specific URLs"
      ],
      "prefill": "browse",
      "title": "Mode",
      "type": "string"
    },
    "postedWithin": {
      "default": "any",
      "description": "Keep jobs listed within this window. The listing date is the current (renewed) date, not the original post date.",
      "editor": "select",
      "enum": [
        "any",
        "1",
        "3",
        "7",
        "14",
        "30"
      ],
      "enumTitles": [
        "Any time",
        "Last 24 hours",
        "Last 3 days",
        "Last 7 days",
        "Last 14 days",
        "Last 30 days"
      ],
      "prefill": "any",
      "title": "Listed within",
      "type": "string"
    },
    "regions": {
      "default": [],
      "description": "Keep jobs open to one or more regions. Jobs open worldwide always match. Leave empty for all.",
      "editor": "select",
      "items": {
        "enum": [
          "Anywhere in the World",
          "USA Only",
          "USA",
          "North America Only",
          "North America",
          "Latin America Only",
          "Latin America",
          "Americas Only",
          "Americas",
          "Europe",
          "Europe Only",
          "UK Only",
          "UK",
          "Canada Only",
          "Canada",
          "EMEA",
          "EMEA Only",
          "Asia Only",
          "Asia",
          "Africa Only",
          "Africa",
          "Oceania Only",
          "Oceania",
          "Other"
        ],
        "enumTitles": [
          "Anywhere in the World",
          "USA Only",
          "USA (same as USA Only)",
          "North America Only",
          "North America (same as North America Only)",
          "Latin America Only",
          "Latin America (same as Latin America Only)",
          "Americas Only",
          "Americas (same as Americas Only)",
          "Europe",
          "Europe (same as Europe)",
          "UK Only",
          "UK (same as UK Only)",
          "Canada Only",
          "Canada (same as Canada Only)",
          "EMEA",
          "EMEA (same as EMEA)",
          "Asia Only",
          "Asia (same as Asia Only)",
          "Africa Only",
          "Africa (same as Africa Only)",
          "Oceania Only",
          "Oceania (same as Oceania Only)",
          "Other / unspecified region"
        ],
        "type": "string"
      },
      "prefill": [],
      "title": "Regions",
      "type": "array",
      "uniqueItems": true
    },
    "requireSalary": {
      "default": false,
      "description": "Only keep jobs with a confidently parsed salary range. Off by default so jobs that do not disclose pay are not lost.",
      "prefill": false,
      "title": "Only jobs with salary",
      "type": "boolean"
    },
    "searchTerm": {
      "description": "Words to match in the title, company, category or description. All words must match. Required in search mode.",
      "editor": "textfield",
      "title": "Search words",
      "type": "string"
    },
    "startUrls": {
      "default": [],
      "description": "Job, category, search, company or listing URLs. Mix freely. (mode=byUrls)",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "prefill": [],
      "title": "Start URLs",
      "type": "array"
    },
    "stateKey": {
      "description": "Optional name for an incremental campaign. Leave empty to derive it from the search filters.",
      "editor": "textfield",
      "title": "Incremental state name",
      "type": "string"
    }
  },
  "required": [
    "mode"
  ],
  "schemaVersion": 1,
  "title": "We Work Remotely Job Listings & Salary Extractor Input",
  "type": "object"
}

Output schema

Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.

FieldTypeRequiredDescription
jobsstringoptionalDataset containing every scraped We Work Remotely job listing.

Download the published output schema

View complete JSON
{
  "actorOutputSchemaVersion": 1,
  "description": "Dataset of live We Work Remotely jobs with title, company, category, applicant regions and countries, parsed salary range, skills, full description, company profile, application URL or email, listing and expiry dates.",
  "properties": {
    "jobs": {
      "description": "Dataset containing every scraped We Work Remotely job listing.",
      "template": "{{links.apiDefaultDatasetUrl}}/items",
      "title": "Job listings",
      "type": "string"
    }
  },
  "title": "We Work Remotely Job Listings & Salary Extractor Output"
}

Dataset schema

Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.

Download the published dataset schema

View complete JSON
{
  "actorSpecification": 1,
  "views": {
    "overview": {
      "display": {
        "component": "table",
        "properties": {}
      },
      "title": "We Work Remotely jobs",
      "transformation": {
        "fields": [
          "title",
          "company",
          "category",
          "salary",
          "postedAt",
          "url"
        ]
      }
    }
  }
}

Key-value schema

Published key-value store definitions, when provided by this build.

This definition is not present in the default published build. See the published README for available documentation.

Published README

Read the full published documentation

We Work Remotely Job Listings & Salary Extractor

Collect every live posting on We Work Remotely from the board's 12 official category RSS feeds, enriched by the public job XML. Get titles, companies, categories, employment types, applicant regions and countries, full descriptions, skills, salary ranges parsed from the posting text, company profiles, real application links or emails, and current listing and expiry dates. No login, cookies, API key, or proxy is required.

What this actor does

  • Full live inventory: reads all 12 category feeds in one run (447 unique openings on 2026-10-20), deduplicated by job URL.
  • Three ways to work: browse categories, search the whole board by keyword, or paste job, category, search, company and listing URLs.
  • Useful filters: category, employment type, applicant region, applicant country, listing window, minimum/maximum salary, and salary-only.
  • Salary extraction: parses min/max, currency and pay period when a posting states a range; keeps the original salary text; never invents a number.
  • Location eligibility: separates jobs open worldwide from jobs restricted to specific countries, and exposes ISO country codes.
  • Complete job content: full description HTML and plain text, source-provided skills, company website, logo and profile.
  • Application details: the public job XML carries the employer's application URL or email for almost every posting, including roles whose on-page apply button is behind a We Work Remotely account.
  • Correct dates: current listing date, original first-post date and expiry date, with a renewal flag for reposted roles.
  • Monitoring: optional incremental mode returns only new or renewed jobs since the previous run.
  • Empty fields are omitted from each record.

Output per job

Identity

  • type — always job_wwr
  • url — canonical We Work Remotely job page
  • id, slug — job slug from the URL
  • title, role — job title
  • company, companySlug, companyProfileUrl — employer and its We Work Remotely company page
  • category, subcategory — We Work Remotely category and the Product Design / UX-UI subcategory when applicable
  • feedSlugs — category feeds where the job appeared

Employment and location

  • employmentType, employmentTypeNormalized — e.g. Full-Time and full-time
  • jobLocationType — TELECOMMUTE
  • region — the board's region label, e.g. Anywhere in the World, USA Only, Europe
  • country, countryCodes — applicant countries named in the posting, plus ISO-2 codes
  • isWorldwide — true when no country restriction is published
  • locationText — readable location restriction
  • applicantCountries, applicantLocationRequirements — applicant country names

Dates

  • postedAt — current listing date (renewed listings get a fresh date)
  • firstPostedAt — original first-post date
  • postedAgeDays — days since the current listing date
  • isRenewed — true when the current listing is newer than the original post
  • expiresAt, applyBefore, validThrough — listing expiry
  • scrapedAt — collection timestamp

Salary

  • salary — the salary text found in the posting
  • salaryDetails — {min, max, currency, unit} object
  • salaryMin, salaryMax, salaryCurrency, salaryUnit — flattened values (salaryUnit is YEAR, MONTH, WEEK, DAY or HOUR)
  • salaryPeriod, salaryType — lowercase period and base, ote, total-comp or hourly
  • salaryAnnualMin, salaryAnnualMax — annualized values used by the salary filters
  • salarySource — description or detail

Description and skills

  • skills, skillsRaw — tags supplied by the employer, when present
  • descriptionHtml, descriptionText — full posting content; cleanHtml removes scripts and tracking pixels

Company profile

  • companyHq, companyWebsite, companyLogo, companyLogoFull
  • companyBio, companyStatement, companyJobsCount, companyTop100, companyFoundedYear
  • hiringOrganizationSameAs — additional company links from the job page, when present

Application and monitoring

  • applyUrl, applyEmail, applyUrlSource — the employer's real application URL or email from the public job XML
  • directApply — whether the posting advertises direct application
  • newSinceLastRun, firstSeenAt — incremental mode only
  • sourceUrl — the feed URL the record came from

Input

Field Type Default Description
mode string browse browse, search or byUrls
categories array all One or more of the 12 category feeds
searchTerm string – Words to match in title, company, category or description; all words must match. Required in search mode
startUrls array – Job, category, search, company or listing URLs (byUrls mode)
employmentTypes array all Full-Time, Contract
regions array all Region labels such as Anywhere in the World, USA Only, Europe
countries array all Applicant countries as ISO-2 codes (e.g. US, DE, IN)
postedWithin string any any, 1, 3, 7, 14 or 30 days
minSalary integer – Minimum annualized salary in USD
maxSalary integer – Maximum annualized salary in USD
requireSalary boolean false Only keep jobs with a confidently parsed salary
includeDescription boolean true Include full description HTML and text
cleanHtml boolean true Remove scripts, tracking pixels and unsafe attributes
includeDetails boolean false Also fetch each job's HTML page for extra structured fields; the public job XML (apply URL/email, company bio, exact dates) is always read
includeCompanyProfile boolean true Fetch company website, logo, about text and open-job count
incremental boolean false Return only new or renewed jobs since the last run
stateKey string – Optional name for an incremental campaign
maxItems integer 200 Maximum jobs to return (1-5000)

Example: every programming job

{
  "mode": "browse",
  "categories": [
    "remote-full-stack-programming-jobs",
    "remote-front-end-programming-jobs",
    "remote-back-end-programming-jobs"
  ],
  "maxItems": 200
}

Example: Python roles open to Pakistan, above $60k

{
  "mode": "search",
  "searchTerm": "python",
  "countries": ["PK"],
  "minSalary": 60000,
  "postedWithin": "14",
  "maxItems": 50
}

Example: paste a company and a job URL

{
  "mode": "byUrls",
  "startUrls": [
    "https://weworkremotely.com/company/stripe",
    "https://weworkremotely.com/remote-jobs/stripe-abuse-research-engineer"
  ]
}

Example: daily new-job monitor

{
  "mode": "search",
  "searchTerm": "product manager",
  "incremental": true,
  "stateKey": "product-manager-monitor",
  "maxItems": 100
}

Use cases

  • Recruiters and sourcers — monitor new remote roles by category, country eligibility and salary.
  • Job boards and newsletters — sync the full We Work Remotely inventory with full descriptions and company profiles.
  • Salary research — compare disclosed remote pay by role, company and region.
  • Market analysis — track which categories and countries are hiring remotely.
  • Lead generation — identify remote-first companies, their websites and open-role counts.
  • Job alerts — run incremental searches and push only new or renewed postings into a workflow.

Limitations

  • We Work Remotely does not publish salary for every job. The actor parses a range only when the posting states one (about six in ten postings), so salary fields are absent on non-disclosing jobs.
  • Almost every public job XML carries an application URL or email; a small minority only exposes the We Work Remotely account wall, in which case both are omitted and url opens the posting.
  • Skills are optional on the source and appear on a minority of postings. They are returned as published and are not used for keyword matching.
  • Company bios are available for about half of postings; where the board has no profile text the field is omitted.
  • Salary filters compare the published annualized numbers; the actor does not convert between currencies.

FAQ

Where does the data come from?

The 12 public category RSS feeds published by We Work Remotely, plus job and company pages when detail or company enrichment is enabled. Links back to We Work Remotely are preserved in every record. No affiliation with We Work Remotely.

Do I need a proxy, login or API key?

No. The public feeds and pages used here work without credentials or proxy setup.

Why is salary missing on some jobs?

About six in ten postings state a numeric range. The actor returns a salary only when it can parse one confidently and never substitutes a guess. Use requireSalary to keep only disclosing jobs.

Why is applyUrl missing on most jobs?

The public job XML exposes the employer's application link or email for almost every posting, even when the on-page apply button is locked. The actor returns applyUrl for web links and applyEmail for email applications. If neither exists, use url to open the posting.

What is the difference between postedAt and firstPostedAt?

We Work Remotely renews listings, so the visible "Posted" date can be newer than the original publication date. postedAt is the current listing date used by postedWithin; firstPostedAt is the original post date. isRenewed marks the difference.

How do region and country filters work?

A job open worldwide matches any selected region or country because it is eligible everywhere. A restricted job matches only when its published region or applicant-country list overlaps your selection. The applicant-country list takes precedence over the broader region label.

Are all skills returned?

No. We Work Remotely's skill tags are optional and appear on a minority of jobs. They are returned when present, exactly as published.

How do I get only new jobs?

Set incremental to true and give the campaign a stateKey. The next run of the same search returns only jobs that were not seen before, plus renewed listings. Use a different stateKey for a different search.

How fresh is the data?

The feeds are read live at run time and update continuously. Schedule the actor as often as you need; incremental mode keeps follow-up runs small.

Is this affiliated with We Work Remotely?

No. This is a third-party actor that reads publicly available We Work Remotely feeds and pages.

Python quickstart

Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.

Open the step-by-step Python guide →

Source build eb6rHgNVPPgCCl1qp. Documentation is regenerated from the default published build; private drafts are not included.