# We Work Remotely Jobs Scraper – Real-Time Data (`b2b_leads/we-work-remotely-real-time-data-scraper`) Actor

Live remote job listings from We Work Remotely: keyword and category search with full descriptions, company info, locations, and apply links. Every row streams to your dataset in real time — ready for recruiters, job boards, and AI workflows. Free trial: 2 results per run.

- **URL**: https://apify.com/b2b_leads/we-work-remotely-real-time-data-scraper.md
- **Developed by:** [Emmanuel](https://apify.com/b2b_leads) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## We Work Remotely Real-Time Data

> **Free trial:** 2 results per run on the free plan. Upgrade to a paid Apify plan for unlimited exports.

Live remote job listings from We Work Remotely — the largest remote work community. Search by keyword and category, collect full descriptions, company info, locations, and posting dates, and stream every row to your dataset in real time.

### Who it's for

- Recruiters and sourcing teams tracking remote hiring demand
- Job boards and aggregators keeping remote listings fresh
- Founders and operators researching remote salary and hiring trends
- Agencies building outreach lists from hiring companies
- AI agents answering "what remote jobs are live right now?"

### Use cases

1. Track new Python / React / design / support openings daily
2. Build a remote-jobs feed for a niche board or newsletter
3. Enrich hiring companies with headquarters and company profiles
4. Monitor a competitor's hiring velocity
5. Feed live listings into a RAG pipeline or chatbot
6. Export weekly snapshots to Sheets, Airtable, or your CRM

### Features

| Checkbox | What it does |
|---|---|
| 💼 Job search (default on) | Keyword + category search with location, company, and date-posted filters |
| Enrich with full details | Adds full description, apply link, company profile, and headquarters to each row (adds a little extra time per record) |
| 🔗 Job links | Collect structured rows from pasted We Work Remotely job URLs |
| ⚙️ Output & delivery | Webhooks (JSON + Slack) |
| 🌐 Connection | Residential proxy (US default) |

### Input reference

- `enableJobSearch` (boolean, default `true`) — run keyword/category search.
- `jobKeywords` (string\[], default `["python"]`) — e.g. `["python", "react", "customer support"]`. Empty = all jobs in the selected categories.
- `jobCategories` (string\[], default `["remote-programming-jobs"]`) — any of: `remote-programming-jobs`, `remote-full-stack-programming-jobs`, `remote-front-end-programming-jobs`, `remote-back-end-programming-jobs`, `remote-devops-sysadmin-jobs`, `remote-design-jobs`, `remote-product-jobs`, `remote-customer-support-jobs`, `remote-sales-and-marketing-jobs`, `remote-management-and-finance-jobs`, `all-other-remote-jobs`. Empty = all categories.
- `jobLocation` (string, default `""`) — e.g. `Worldwide`, `Americas`, `Europe`.
- `jobCompany` (string, default `""`) — e.g. `Toggl`.
- `jobDatePosted` (select `any|month|week|day`, default `any`).
- `jobsPerQuery` (integer 1–200, default `10`).
- `searchFetchFullDetails` (boolean, default `false`) — enrich rows in place (`detailsFetched: true`). No second row, no dropped records.
- `enableScrapeByUrl` (boolean, default `false`) + `jobUrls` (string\[]) — e.g. `["https://weworkremotely.com/remote-jobs/toggl-senior-full-stack"]`.
- `webhookUrl`, `webhookFormat` (`json|slack`), `proxyConfiguration`.

Demo: leave defaults and click Start — you get live programming jobs in seconds.

### Output fields

`featureType`, `jobId`, `title`, `company`, `companyUrl`, `companyLogo`, `location`, `category`, `jobType`, `tags`, `jobUrl`, `applyUrl`, `descriptionText`, `descriptionHtml`, `postedAt`, `detailsFetched`, `searchQuery`, `searchCategory`, `position`, `scrapedAt`.

### Webhooks

Set `webhookUrl` (+ `webhookFormat`). Every record is always saved to the dataset; the webhook sends an additional real-time POST per job. `json` = full record, `slack` = compact message. Delivery failures never stop the run.

### MCP / AI-agent usage

Via Apify MCP: `actor: weworkremotely-com-real-time-data`.

> Example: "Find 10 live remote Python jobs in Programming posted this month and return title, company, location, and apply link."

### FAQ

- **Proxies?** Residential US by default; override the country in Connection settings.
- **Free tier?** 2 results per run; paying plans are uncapped.
- **Freshness?** Every run collects live listings; `postedAt` and `scrapedAt` are on every row.
- **Enrich cost?** Full-details mode adds a little extra time per record but keeps the same row shape.

# Actor input Schema

## `enableJobSearch` (type: `boolean`):

Search live We Work Remotely jobs by keyword and category. Enabled by default.

## `jobKeywords` (type: `array`):

Search terms matched against job title, company, and description (e.g. python, react, customer support). Empty = all jobs in the selected categories.

## `jobCategories` (type: `array`):

Limit search to these We Work Remotely categories. Empty = all categories.

## `jobLocation` (type: `string`):

Optional filter on the job region (e.g. Worldwide, Americas, Europe, USA Only). Partial match.

## `jobCompany` (type: `string`):

Optional filter on company name. Partial match.

## `jobDatePosted` (type: `string`):

Only return jobs posted within this window.

## `jobsPerQuery` (type: `integer`):

Maximum jobs to return per keyword/category combination (1-200). Default 10 for fast demo runs.

## `searchFetchFullDetails` (type: `boolean`):

Adds full job description, apply link, company profile, and headquarters to each row. Adds a little extra time per record. Off = fast cards from the listing feed.

## `enableScrapeByUrl` (type: `boolean`):

Collect structured data from individual We Work Remotely job page URLs.

## `jobUrls` (type: `array`):

We Work Remotely job page URLs (https://weworkremotely.com/remote-jobs/...) to collect.

## `webhookUrl` (type: `string`):

Optional HTTPS endpoint. Each record is always saved to the dataset — the webhook sends an additional real-time POST per job (CRM, Slack, Zapier, Make, custom pipelines).

## `webhookFormat` (type: `string`):

json = full job record. slack = compact Slack incoming-webhook message.

## `proxyConfiguration` (type: `object`):

Apify proxy configuration. Residential US proxy is recommended for consistent results on large runs.

## Actor input object example

```json
{
  "enableJobSearch": true,
  "jobKeywords": [
    "python"
  ],
  "jobCategories": [
    "remote-programming-jobs"
  ],
  "jobLocation": "",
  "jobCompany": "",
  "jobDatePosted": "any",
  "jobsPerQuery": 10,
  "searchFetchFullDetails": false,
  "enableScrapeByUrl": false,
  "jobUrls": [],
  "webhookUrl": "",
  "webhookFormat": "json",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `allResults` (type: `string`):

Complete dataset with every job field from this run.

## `overview` (type: `string`):

Core job fields table view.

## `full` (type: `string`):

All job fields including descriptions.

# 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 = {
    "enableJobSearch": true,
    "jobKeywords": [
        "python"
    ],
    "jobCategories": [
        "remote-programming-jobs"
    ],
    "jobLocation": "",
    "jobCompany": "",
    "jobDatePosted": "any",
    "jobsPerQuery": 10,
    "searchFetchFullDetails": false,
    "enableScrapeByUrl": false,
    "jobUrls": [],
    "webhookUrl": "",
    "webhookFormat": "json",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("b2b_leads/we-work-remotely-real-time-data-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 = {
    "enableJobSearch": True,
    "jobKeywords": ["python"],
    "jobCategories": ["remote-programming-jobs"],
    "jobLocation": "",
    "jobCompany": "",
    "jobDatePosted": "any",
    "jobsPerQuery": 10,
    "searchFetchFullDetails": False,
    "enableScrapeByUrl": False,
    "jobUrls": [],
    "webhookUrl": "",
    "webhookFormat": "json",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("b2b_leads/we-work-remotely-real-time-data-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "enableJobSearch": true,
  "jobKeywords": [
    "python"
  ],
  "jobCategories": [
    "remote-programming-jobs"
  ],
  "jobLocation": "",
  "jobCompany": "",
  "jobDatePosted": "any",
  "jobsPerQuery": 10,
  "searchFetchFullDetails": false,
  "enableScrapeByUrl": false,
  "jobUrls": [],
  "webhookUrl": "",
  "webhookFormat": "json",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call b2b_leads/we-work-remotely-real-time-data-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,b2b_leads/we-work-remotely-real-time-data-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/KR406oXLJDH3q2hSl/builds/G7yoQfhPS2FUXQZf4/openapi.json
