# We Work Remotely Jobs Scraper (`benthepythondev/weworkremotely-jobs-scraper`) Actor

Scrape We Work Remotely category jobs: title, company, company URL, headquarters, published date, remote flag, job URL and description.

- **URL**: https://apify.com/benthepythondev/weworkremotely-jobs-scraper.md
- **Developed by:** [Ben](https://apify.com/benthepythondev) (community)
- **Categories:** Jobs, Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## We Work Remotely Jobs Scraper

Scrape job listings from **We Work Remotely**, one of the best-known remote job boards, in one run. Get remote role titles, hiring companies, company websites, headquarters/location text, published dates, direct job URLs and cleaned job descriptions. Export to JSON, CSV or Excel, schedule recurring runs, call the actor through the API, or send results to Make, Zapier, n8n, Airtable, Google Sheets, a recruiting CRM or your own job-board backend.

### What is the We Work Remotely Jobs Scraper?

We Work Remotely is a high-signal source for remote-friendly roles across software engineering, product, design, marketing, customer support, sales and operations. Companies post there specifically to reach remote candidates, which makes the data useful for recruiters, job-board operators, sales teams, remote-work analysts, market researchers and candidates monitoring the remote hiring market.

This actor extracts jobs from We Work Remotely category feeds. The keyword search page is protected by Cloudflare, so the actor intentionally uses the public category feeds instead. That design keeps it reliable on Apify: no browser, no proxy, no account, no cookies and no paid unblocker. You can paste a category URL or use category shortcuts such as `programming`, `design`, `marketing`, `customer-support`, `sales` and `product`.

### What data does it extract?

- **Job title**
- **Hiring company**
- **Company website URL** when shown
- **Headquarters / location text**
- **Remote flag**
- **Published date**
- **Direct We Work Remotely job URL**
- **Cleaned job description**
- **Source category URL**

### Input

| Field | Type | Description |
|-------|------|-------------|
| `categoryUrls` | array | We Work Remotely category URLs to scrape exactly. |
| `categories` | array | Optional shortcuts: `programming`, `design`, `marketing`, `customer-support`, `sales`, `product`. |
| `maxResults` | integer | Maximum jobs returned per category URL. |

### Example input

```json
{
  "categories": ["programming", "product"],
  "maxResults": 50
}
````

You can also paste a category URL:

```json
{
  "categoryUrls": ["https://weworkremotely.com/categories/remote-programming-jobs"],
  "maxResults": 100
}
```

### Output

Each item is one remote job:

```json
{
  "title": "Senior Web Developer (WordPress & Shopify)",
  "company": "Rehire",
  "company_url": "http://rehiresolutions.com",
  "headquarters": "Colombia",
  "location": "Colombia",
  "is_remote": true,
  "published_at": "2026-06-10T15:59:08+00:00",
  "url": "https://weworkremotely.com/remote-jobs/rehire-senior-web-developer-wordpress-shopify",
  "description": "Headquarters: Colombia URL: http://rehiresolutions.com Role Overview From Rehire...",
  "source_url": "https://weworkremotely.com/categories/remote-programming-jobs"
}
```

### Use cases

- **Remote-job aggregation** - add fresh WWR listings to a remote-work job board, newsletter or internal hiring dashboard.
- **Recruiting and sourcing** - monitor which remote-first companies are hiring by category.
- **Sales lead generation** - identify companies actively hiring remote teams, a strong signal for HR tools, payroll, infrastructure, security, onboarding and collaboration software.
- **Market intelligence** - track remote hiring volume by category and compare programming, product, design, sales or support demand over time.
- **Candidate alerts** - schedule category runs and send new listings to Slack, email, Google Sheets or a career platform.
- **Remote-work research** - collect remote role descriptions, company locations and posting dates for analysis.

### Why use this actor?

The actor is built for reliability first. Many job-board scrapers break because they depend on visual page rendering, search forms or anti-bot-challenged pages. This actor uses We Work Remotely's category feeds, which expose structured current listings and work from plain HTTP. That keeps runs fast, inexpensive and well-suited for Apify's daily auto-tests.

The output focuses on fields that are useful immediately: company, job title, company website, location/headquarters, published date, full job URL and cleaned description. Those fields are enough for job aggregation, lead generation, recruiting workflows, spreadsheet exports and automation pipelines.

### Tips

- Use category shortcuts for the simplest setup.
- Use `categoryUrls` when you want to preserve a specific We Work Remotely category URL.
- Keep `maxResults` low for frequent scheduled monitoring and raise it for one-off exports.
- Combine the company URL with an email/contact enrichment actor when building sales or recruiting lead lists.
- Schedule daily runs and de-duplicate by `url` in your downstream database.

### Supported categories

The actor supports the most commercially useful We Work Remotely job categories through shortcuts:

- `programming` for software engineering, web development, DevOps and technical roles.
- `design` for product design, UI/UX, brand and creative roles.
- `marketing` for growth, content, SEO and demand-generation roles.
- `customer-support` for support, success and customer-facing remote roles.
- `sales` for revenue, partnerships and go-to-market roles.
- `product` for product management and product operations roles.

You can also paste any current We Work Remotely category URL into `categoryUrls`. This is useful when the site adds a new category or when you want to pin a workflow to the exact URL you already use in your browser.

### Reliability notes

This actor deliberately does not use the WWR keyword search page. The category feed route is the stable data source: it exposes the current listings as RSS items with title, company, link, published date and description. That means the actor can run in a small 512 MB container and finish quickly, which is the right shape for scheduled Apify runs and Store auto-tests.

Because the output is feed-based, use downstream filtering for keyword matching. For example, scrape the programming category daily and filter the `title` and `description` fields for `python`, `react`, `rails`, `devops` or `data engineer` in your spreadsheet, database, webhook receiver or automation scenario.

### FAQ

**Does this require a We Work Remotely account?** No. It reads public category feeds.

**Does it scrape keyword search?** No. WWR keyword search is Cloudflare-gated, so this actor uses reliable category feeds instead.

**Does it use a browser or proxy?** No. It uses plain HTTP, which keeps it fast and low-cost.

**Does it include descriptions?** Yes. It returns a cleaned text version of the feed description.

**Can I export the data?** Yes. Apify supports JSON, CSV, Excel, API access, webhooks and integrations.

**Is this useful for lead generation?** Yes. Remote job postings identify companies with active hiring needs and distributed-team operations.

### You might also like

- [Remote Jobs Aggregator](https://apify.com/benthepythondev/remote-jobs-aggregator) for multiple remote-job APIs.
- [Remote Jobs Intelligence](https://apify.com/benthepythondev/remote-jobs-intelligence) for RemoteOK data.
- [Jobicy Remote Jobs Intelligence](https://apify.com/benthepythondev/jobicy-remote-jobs-intelligence) for Jobicy listings.
- [YC Jobs Scraper](https://apify.com/benthepythondev/yc-jobs-scraper) for startup hiring data.
- [BuiltIn Jobs Scraper](https://apify.com/benthepythondev/builtin-jobs-scraper) for tech-company jobs and salaries.

### Keywords

We Work Remotely scraper, WWR jobs scraper, remote jobs scraper, remote work jobs API, remote programming jobs, remote design jobs, remote marketing jobs, remote customer support jobs, remote sales jobs, job board scraper, remote job listings, scrape We Work Remotely, export remote jobs to CSV, Apify jobs scraper, remote hiring leads.

### Support and feedback

If this Actor saves time in your workflow, please leave a short Apify Store review. Reviews help other users evaluate the tool and help prioritize maintenance. If a source changes or a field stops populating, open an Actor issue with the run ID, public input, and expected field. Never include passwords, private cookies, or confidential data.

# Actor input Schema

## `categoryUrls` (type: `array`):

We Work Remotely category feed URLs to scrape exactly.

## `categories` (type: `array`):

Optional category shortcuts: programming, design, marketing, customer-support, sales, product.

## `maxResults` (type: `integer`):

Maximum jobs to return per category URL.

## Actor input object example

```json
{
  "categoryUrls": [
    "https://weworkremotely.com/categories/remote-programming-jobs"
  ],
  "categories": [
    "programming"
  ],
  "maxResults": 10
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "categoryUrls": [
        "https://weworkremotely.com/categories/remote-programming-jobs"
    ],
    "categories": [
        "programming"
    ],
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("benthepythondev/weworkremotely-jobs-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "categoryUrls": ["https://weworkremotely.com/categories/remote-programming-jobs"],
    "categories": ["programming"],
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("benthepythondev/weworkremotely-jobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "categoryUrls": [
    "https://weworkremotely.com/categories/remote-programming-jobs"
  ],
  "categories": [
    "programming"
  ],
  "maxResults": 10
}' |
apify call benthepythondev/weworkremotely-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=benthepythondev/weworkremotely-jobs-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "We Work Remotely Jobs Scraper",
        "description": "Scrape We Work Remotely category jobs: title, company, company URL, headquarters, published date, remote flag, job URL and description.",
        "version": "1.0",
        "x-build-id": "TIykhUX4vINeyT9nI"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/benthepythondev~weworkremotely-jobs-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-benthepythondev-weworkremotely-jobs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/benthepythondev~weworkremotely-jobs-scraper/runs": {
            "post": {
                "operationId": "runs-sync-benthepythondev-weworkremotely-jobs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/benthepythondev~weworkremotely-jobs-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-benthepythondev-weworkremotely-jobs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "categoryUrls": {
                        "title": "Category URLs",
                        "type": "array",
                        "description": "We Work Remotely category feed URLs to scrape exactly.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "categories": {
                        "title": "Categories",
                        "type": "array",
                        "description": "Optional category shortcuts: programming, design, marketing, customer-support, sales, product.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "Max results per category",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum jobs to return per category URL.",
                        "default": 10
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
