# Workana Jobs Scraper — Freelance Projects, Budgets & Skills (`haketa/workana-scraper`) Actor

Scrape freelance projects from Workana, Latin America's biggest freelance marketplace: title, description, budget, required skills, bid count, client country, client rating and posted date. Filter by language, keyword or URL. No login or API key. Export JSON, CSV, Excel.

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

## Pricing

from $1.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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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 💼🌎

Extract **freelance projects from Workana — Latin America's biggest freelance marketplace** — at scale, without an account or API key. Scrape by language or keyword and export clean JSON, CSV or Excel: **project title, description, budget, required skills, bid count, client country, client rating and posted date.**

Perfect for **freelancers hunting the right gigs, agencies sourcing leads, rate & skill-demand market research and freelance-economy datasets.**

***

### 🔑 What this scraper does

- 🌎 **Scrape by language** — Spanish (the largest pool), Portuguese and English project editions.
- 🔎 **Filter by keyword** — e.g. `wordpress`, `python`, `logo`, `virtual assistant`.
- 💰 **Budget** — fixed-price range or hourly rate, exactly as posted.
- 🧩 **Skills** — the skills each project requires.
- 📊 **Competition** — how many freelancers have already bid.
- 🌍 **Client country** — where the project owner is posting from.
- ⭐ **Client signals** — client rating, verified payment method, company vs. individual, urgent flag.
- 📝 **Full description** — the complete project brief, not just a teaser.

No login, no cookies to paste, no API key. Pick a language, press start, export.

***

### 📋 Example output

```json
{
  "slug": "development-of-a-simple-wordpress-website",
  "title": "Development of a Simple WordPress Website with Booking",
  "url": "https://www.workana.com/job/development-of-a-simple-wordpress-website",
  "description": "We need a simple WordPress site with an appointment booking system...",
  "budget": "USD 100 - 250",
  "isHourly": false,
  "totalBids": 24,
  "skills": ["WordPress", "PHP", "HTML"],
  "countryName": "Hong Kong",
  "countryCode": "HK",
  "authorName": "L. V.",
  "clientRating": null,
  "hasVerifiedPaymentMethod": true,
  "isUrgent": false,
  "isCompany": false,
  "isFeatured": false,
  "postedDate": "2 hours ago",
  "scrapedAt": "2026-09-14T10:00:00.000Z"
}
```

***

### 🗂️ Fields you get

| Field | Description |
|---|---|
| `slug` | Project slug (unique ID) |
| `title` | Project title |
| `url` | Link to the project |
| `description` | Full project brief |
| `budget` | Budget as posted (fixed range or hourly rate) |
| `isHourly` | Whether the budget is hourly |
| `totalBids` | Number of freelancer bids so far |
| `skills` | Required skills |
| `countryName` | Client's country |
| `countryCode` | Client's country code (ISO-2) |
| `authorName` | Client's name as shown (Workana shows initials) |
| `clientRating` | Client rating (0–5), when they have one |
| `hasVerifiedPaymentMethod` | Whether the client's payment method is verified |
| `isUrgent` | Marked urgent |
| `isCompany` | Client is a company vs. an individual |
| `isFeatured` | Featured/promoted project |
| `postedDate` | When it was posted (as shown) |
| `scrapedAt` | Scrape timestamp |

> Title, description, budget, skills, bid count, country and posted date come on every project. Client rating is included when the client has one. Workana displays client names as initials, so `authorName` is a short label rather than a full name.

***

### 🚀 How to use

1. Click **Try for free**.
2. Choose a **Language** (Spanish has the most projects) and optionally a **Search Keyword**.
3. (Advanced) Paste a filtered Workana jobs URL into **Start URLs** to reuse category/skill/country filters.
4. Set **Max Items** and **Max Pages per List**, then click **Start**.
5. Export as **JSON, CSV, Excel, HTML, RSS**, or via the **Apify API**.

***

### 📝 Example inputs

#### 1. All Spanish projects

```json
{ "language": "es", "maxItems": 500 }
```

#### 2. WordPress projects in English

```json
{ "language": "en", "query": "wordpress", "maxItems": 300 }
```

#### 3. Portuguese design projects

```json
{ "language": "pt", "query": "design", "maxItems": 300 }
```

#### 4. A specific filtered URL

```json
{ "startUrls": ["https://www.workana.com/jobs?category=it-programming&skills=python"], "maxItems": 500 }
```

***

### 💡 Popular use cases

#### 🎯 Find the right gigs faster

Pull every project in your niche with budget, skills and bid count, then sort by low competition or high budget to bid where it matters.

#### 📈 Rate & budget benchmarking

Aggregate budgets by skill, category and country to see what clients actually pay — and price your own services with data.

#### 🧩 Skill-demand research

Track which skills appear most across thousands of projects to spot rising demand and plan what to learn or hire for.

#### 🏢 Agency & lead sourcing

Build a live feed of projects matching your agency's services, filtered by skills, budget and client country.

#### 🤖 AI, LLM & data products

Feed clean, structured freelance-market data into your own models, dashboards or products.

***

### 👥 Who uses this

- **Freelancers** finding and prioritising the best-fit projects.
- **Agencies & studios** sourcing project leads at scale.
- **Analysts & researchers** studying freelance rates and skill demand.
- **Developers & AI builders** who need freelance-market data via API.

***

### 🎛️ Options

- **Language** — `es` (most projects), `pt` or `en`.
- **Search Keyword** — optional keyword filter.
- **Start URLs** — optional advanced filter URLs.
- **Max Items** — cap total projects (`0` = unlimited).
- **Max Pages per List** — pages per list (`0` = all; about 9 projects per page for anonymous access).
- **Proxy** — Apify Proxy is enabled by default and just works.

***

### ❓ FAQ

**Do I need a Workana account or API key?**
No. Pick a language and run — no login, no cookies, no key.

**Which language has the most projects?**
Spanish (`es`) by far, since Workana is Latin America's largest freelance marketplace. Portuguese and English editions have fewer.

**Does the budget come as a number?**
Budgets are returned exactly as posted — a fixed-price range (e.g. "USD 100 - 250") or an hourly rate (e.g. "Less than USD 15 / hour"). The `isHourly` flag tells you which.

**Do I get the client's full name?**
No. Workana shows client names as initials, so `authorName` is a short label. You still get the client's country, rating and verified-payment signal.

**Can I filter by category, skill or country?**
Yes — apply the filters on Workana, copy the URL, and paste it into **Start URLs**.

**How many projects can I get?**
Up to a few hundred per language edition per run (anonymous browsing is capped near 100 pages of ~9 projects each). Narrow with a keyword or filter URL to reach the projects you care about, and use `maxItems` / `maxPagesPerList` to control volume.

**What export formats are supported?**
JSON, CSV, Excel, HTML table, RSS, and the Apify API. Connect to Make, Zapier, Google Sheets, Slack, webhooks or an MCP server.

**Is the data structured and clean?**
Yes. Each project is a flat, typed JSON object, de-duplicated by slug, with bid counts parsed to numbers and skills as a clean list.

***

### 🔌 Integrations

- Export to **JSON, CSV, Excel, HTML, RSS**.
- Pull via the **Apify API** or client libraries (JavaScript, Python).
- Connect to **Make, Zapier, Google Sheets, Slack, webhooks** and more.
- Use from an **MCP server** in your AI agent / LLM workflow.
- Schedule recurring runs with the **Apify Scheduler** to catch new projects as they post.

***

### ⚖️ Legal & responsible use

This scraper collects **publicly available** project listing information only — the same data any visitor can see on Workana without logging in. It does not access private messages, accounts, or anything behind authentication.

You are responsible for how you use the collected data. Please:

- Respect Workana's Terms of Service and all applicable laws.
- Use any personal or company data lawfully and only for legitimate purposes.
- Avoid excessive request rates and scrape responsibly.

This tool is provided for lawful purposes such as market research, lead generation and business intelligence. It is not affiliated with, endorsed by, or connected to Workana.

# Actor input Schema

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

Project language / site edition. 'es' (Spanish) has by far the most projects; 'pt' (Portuguese) and 'en' (English) have fewer.

## `query` (type: `string`):

Optional keyword to filter projects, e.g. "wordpress", "logo", "python". Leave empty to get all projects.

## `startUrls` (type: `array`):

Optional. Paste any Workana jobs listing URL to use its filters (category, skills, country, budget, etc.). Browse Workana, apply filters, copy the URL and paste it here.

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

Maximum number of projects to collect. 0 = unlimited.

## `maxPagesPerList` (type: `integer`):

How many result pages to scrape per list (each page has about 9 projects for anonymous access, capped near 100 pages per list). 0 = all available pages.

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

Datacenter proxy works out of the box.

## Actor input object example

```json
{
  "language": "es",
  "startUrls": [],
  "maxItems": 200,
  "maxPagesPerList": 25,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

Open to view and export all scraped projects (JSON, CSV, Excel).

# 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": "es",
    "query": "",
    "startUrls": [],
    "maxItems": 200,
    "maxPagesPerList": 25,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/workana-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": "es",
    "query": "",
    "startUrls": [],
    "maxItems": 200,
    "maxPagesPerList": 25,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/workana-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": "es",
  "query": "",
  "startUrls": [],
  "maxItems": 200,
  "maxPagesPerList": 25,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call haketa/workana-scraper --silent --output-dataset

```

## MCP server setup

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