# Workana Jobs Scraper (`parsebird/workana-jobs-scraper`) Actor

Scrape Workana freelance job listings: title, description, budget, skills, client country, bids, and deadline. Filter by keyword, category, and country. Export JSON, CSV, Excel.

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

## Pricing

from $0.70 / 1,000 job listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

### Workana Jobs Scraper

Workana Jobs Scraper extracts freelance job listings from [Workana](https://www.workana.com/), the largest freelance marketplace in Latin America, including title, description, budget, skills, client country, bid count, and deadline.

<table><tr>
<td style="border-left:4px solid #1C1917;padding:12px 16px;font-weight:600">
Search by keyword, category, and client country across Workana's Portuguese, Spanish, or English site, and get parsed budgets — currency, minimum, maximum, and hourly vs. fixed-price — alongside skills and client details.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```text
Use Apify Actor parsebird/workana-jobs-scraper to scrape Workana freelance job listings. Example with ApifyClient: client.actor("parsebird/workana-jobs-scraper").call(run_input={"country":"BR","language":"pt","maxItems":20}). Inputs: keyword string optional search keyword; category string optional enum web-development/design/marketing/writing/it-programming/seo/e-commerce/admin-support/legal/finance-management/customer-support/mobile-app-design/logo-design; country string optional 2-letter client country code e.g. BR, AR, MX, CO; language string enum pt/es/en default pt (which Workana site to browse); maxItems integer default 50. Output fields: slug, title, url, description, budget, budgetMin, budgetMax, budgetCurrency, isHourly, deadline, skills, authorName, country, countryCode, totalBids, isUrgent, postedDate, publishedDate, rating, isCompany, hasVerifiedPaymentMethod, scrapedAt. API docs: https://docs.apify.com/api/client/python/ and https://docs.apify.com/api/client/js/. Token: https://console.apify.com/account/integrations.
```

### What is Workana Jobs Scraper?

**Workana Jobs Scraper** is a Workana scraper and freelance job data API alternative for lead generation, market research, and job-board aggregation. Workana is the largest freelance marketplace in Latin America, listing projects across development, design, marketing, writing, admin support, and more. Supply a keyword, category, or client country, and the actor returns one structured row per job listing.

Use it to build a freelance job feed, monitor demand for specific skills, or track budgets in a category over time through [Apify](https://apify.com/), without manually browsing Workana's job board.

### What can Workana Jobs Scraper do?

- 🔍 Search Workana job listings by keyword, category, and client country.
- 🌎 Browse Workana's Portuguese, Spanish, or English site — each surfaces a different mix of listings.
- 💰 Get parsed budgets: currency, minimum, maximum, and whether the project is hourly or fixed-price.
- 🏷️ Extract the full skills list, client country, bid count, and urgency flag for every listing.
- ⏰ Run on demand or with [Apify schedules](https://docs.apify.com/platform/schedules) for recurring job feeds.
- 🔌 Access results through the [Apify API](https://docs.apify.com/api/v2), webhooks, and [integrations](https://apify.com/integrations).
- 💾 Download datasets as JSON, CSV, Excel, XML, or HTML from Apify storage.

### What data can you extract from Workana?

| Field | Description |
|-------|-------------|
| `title` / `description` | Job title and full project description |
| `budget` / `budgetMin` / `budgetMax` / `budgetCurrency` | Raw budget text and its parsed range and currency |
| `isHourly` | Whether the project is billed hourly or as a fixed price |
| `skills` | List of skills or technologies requested |
| `authorName` / `country` / `countryCode` | Client name and country |
| `totalBids` | Number of freelancers who already placed a bid |
| `isUrgent` | Whether the client flagged the project as urgent |
| `postedDate` / `deadline` | When the job was posted and its deadline, when set |

### How to scrape Workana job listings

1. Open [Workana Jobs Scraper](https://apify.com/parsebird/workana-jobs-scraper) on Apify.
2. Optionally set `keyword` to search for a term like "marketing" or "development".
3. Optionally set `category` to one of the supported category slugs, and `country` to a 2-letter client country code like `BR` or `AR`.
4. Choose `language` to pick which Workana site to browse — Portuguese, Spanish, or English show different listings.
5. Set `maxItems` to control how many listings to collect.
6. Run the actor, open the dataset, and export results as JSON, CSV, Excel, or through the [Apify API](https://docs.apify.com/api/v2).

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `keyword` | string | No | - | Search keyword, e.g. "marketing", "development", "design". |
| `category` | string | No | - | Category slug, e.g. "web-development", "design", "marketing", "seo", "e-commerce". |
| `country` | string | No | - | 2-letter client country code, e.g. "BR", "AR", "MX", "CO". Omit for all countries. |
| `language` | string | No | `pt` | Workana site language to browse: `pt`, `es`, or `en`. |
| `maxItems` | integer | No | `50` | Maximum number of job listings to extract. |

#### Category slugs

`web-development`, `design`, `marketing`, `writing`, `it-programming`, `seo`, `e-commerce`, `admin-support`, `legal`, `finance-management`, `customer-support`, `mobile-app-design`, `logo-design`

Example input:

```json
{
  "country": "BR",
  "language": "pt",
  "maxItems": 20
}
```

Example — development jobs on the Spanish-language site:

```json
{
  "keyword": "development",
  "category": "web-development",
  "language": "es",
  "maxItems": 100
}
```

### Output example

```json
{
  "slug": "desenvolvedor-full-stack-react-native-e-node-js-para-aplicativo-mobile",
  "title": "Desenvolvedor Full Stack React Native e Node.js para Aplicativo Mobile",
  "url": "https://www.workana.com/job/desenvolvedor-full-stack-react-native-e-node-js-para-aplicativo-mobile",
  "description": "Estamos buscando um desenvolvedor full stack experiente...",
  "budget": "Menos de USD 15 / hora",
  "budgetMin": null,
  "budgetMax": 15,
  "budgetCurrency": "USD",
  "isHourly": true,
  "deadline": null,
  "skills": ["React Native", "Node.js", "MongoDB", "Android", "iOS"],
  "authorName": "Maurício M.",
  "country": "Brasil",
  "countryCode": "BR",
  "totalBids": 45,
  "isUrgent": false,
  "postedDate": "Ontem",
  "publishedDate": "Publicado: Ontem",
  "scrapedAt": "2026-08-21T13:40:26.035902+00:00"
}
```

Download results in JSON, CSV, Excel, XML, or HTML from the Apify dataset.

### Python API example

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("parsebird/workana-jobs-scraper").call(run_input={
    "country": "BR",
    "language": "pt",
    "maxItems": 20,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

### JavaScript API example

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('parsebird/workana-jobs-scraper').call({
  country: 'BR',
  language: 'pt',
  maxItems: 20,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

See Apify's official [Python client](https://docs.apify.com/api/client/python/) and [JavaScript client](https://docs.apify.com/api/client/js/) documentation for more options.

### How much does it cost to scrape Workana?

**What is the price per job listing?**

| Plan | Price per event | Price per 1,000 |
|------|----------------|-----------------|
| Free | $0.0009 | **$0.90** |
| Bronze | $0.0008 | **$0.80** |
| Silver | $0.0008 | **$0.80** |
| Gold | $0.0007 | **$0.70** |

Each `job-scraped` event means one job listing was extracted and pushed to the dataset. A run collecting 1,000 listings costs $0.90 on the Free plan or $0.70 on Gold. Apify's free trial credits cover test runs.

### Use cases

- Build a freelance job feed for a specific skill, category, or country.
- Monitor demand and typical budgets for a category over time with scheduled runs.
- Feed job listings into a lead-generation or market-research pipeline.
- Compare project volume and pricing across Workana's Portuguese, Spanish, and English markets.
- Track newly posted urgent jobs matching a keyword.

### How it works

1. The actor validates `keyword`, `category`, `country`, `language`, and `maxItems`.
2. It builds a Workana job search URL for the selected language, category, and filters, and reads the job listings Workana embeds directly in the page for each result.
3. It pages through results, deduplicating listings by their unique slug, until `maxItems` is reached or no new listings are found.
4. Each listing's budget text is parsed into currency, minimum, and maximum, and its skills, client country, and bid count are extracted from the source fields.
5. It pushes one row per listing to the default Apify dataset and charges one PPE event per pushed listing on the Apify platform.

### What are the limitations of Workana scraping?

- `deadline` is only populated when the client set one; most listings leave it empty.
- `language` selects which Workana site to browse (Portuguese, Spanish, or English show a different mix of listings) — it does not translate results.
- Budget parsing depends on Workana's own budget text format; unusual formats fall back to `null` rather than a guessed value.

### Is it legal to scrape Workana?

**Is scraping Workana legal?**

Workana Jobs Scraper reads publicly available job listing pages that Workana itself serves to any visitor. Scraping publicly available data is generally allowed in many jurisdictions, but you should review Workana's terms and make sure your use case complies with applicable laws. For background, read Apify's guide: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/).

### Other freelance and job board scrapers / Related Actors

| Actor | Best for |
|-------|----------|
| [Workana Jobs Scraper](https://apify.com/parsebird/workana-jobs-scraper) | Latin American freelance job listings |
| [We Work Remotely Jobs Scraper](https://apify.com/parsebird/wwr-jobs-scraper) | Remote job listings |
| [RemoteOK Jobs Scraper](https://apify.com/parsebird/remoteok-jobs-scraper) | Remote tech job listings |

### FAQ

**Does Workana Jobs Scraper require a Workana account?**

No login is required. The actor reads Workana's public job search pages.

**What's the difference between the `pt`, `es`, and `en` language options?**

Each points to a different Workana site (`/pt/jobs`, `/es/jobs`, `/en/jobs`) with its own mix of listings — Portuguese is the largest, since Workana's primary market is Brazil. It's not a translation setting.

**Why is `category` a mix of top-level categories and subcategories?**

Workana's own taxonomy has top-level categories (like "IT & Programming") and subcategories within them (like "Web Development"). The actor maps each supported slug to the correct one automatically.

**Can I schedule recurring runs to track new job postings?**

Yes. Use [Apify schedules](https://docs.apify.com/platform/schedules) to run the actor daily, weekly, or at any interval.

**Where can I report issues or request fields?**

Open the Issues tab on the actor page and include your input example, run ID, and the fields you expected.

# Actor input Schema

## `keyword` (type: `string`):

Search keyword, e.g. "marketing", "development", "design".

## `category` (type: `string`):

Category slug to filter by.

## `country` (type: `string`):

2-letter country code of the client, e.g. "BR", "AR", "MX", "CO". Leave blank for all countries.

## `language` (type: `string`):

Workana site language to browse. Affects which jobs are shown, not a translation.

## `maxItems` (type: `integer`):

Maximum number of job listings to extract.

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

Apify Proxy settings. Workana blocks requests from Apify's shared datacenter IPs, so Residential proxies are used by default for reliable access.

## Actor input object example

```json
{
  "category": "",
  "language": "pt",
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "language": "pt",
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/workana-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 = {
    "language": "pt",
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/workana-jobs-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 '{
  "language": "pt",
  "maxItems": 20
}' |
apify call parsebird/workana-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parsebird/workana-jobs-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/uj5rh93RCLiKZvmuR/builds/z7Xizu6OcgILcMS8u/openapi.json
