# 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
- **Features:** Limited permissions
- **Stats:** 6 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?

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

## Workana Scraper — Freelance Projects, Budgets, Skills & Client Data 💼🌎

[![No Login Required](https://img.shields.io/badge/Login-Not%20Required-brightgreen)](#)
[![No API Key](https://img.shields.io/badge/API%20Key-Not%20Required-brightgreen)](#)
[![Export Formats](https://img.shields.io/badge/Export-JSON%20%7C%20CSV%20%7C%20Excel%20%7C%20API-blue)](#)
[![Editions](https://img.shields.io/badge/Languages-Spanish%20%7C%20Portuguese%20%7C%20English-purple)](#)
[![Scale](https://img.shields.io/badge/Scale-1%2C000%2B%20Projects%20%2F%20Run-orange)](#)
[![Data Quality](https://img.shields.io/badge/Fields-19%20Normalized%20Fields-teal)](#)

**Extract freelance projects from [Workana](https://www.workana.com), Latin America's largest freelance and remote-work marketplace, at scale — no login, no cookies, no coding.** This **Workana scraper** converts public job listings across Spanish (`es`), Portuguese (`pt`), and English (`en`) editions into clean, structured rows: **project title, full brief description, posted budget (fixed or hourly), required skills, freelancer bid count, category, client country & ISO code, client rating, payment verification, and posted date.**

Export every project to **JSON, CSV, Excel (XLSX), XML, or REST API**.

> **💼 Built for software & creative agencies sourcing outbound project leads, freelancers hunting high-budget / low-competition gigs, recruiters mapping LatAm skill demand, rate-benchmarking analysts, and AI / market-intelligence teams.**

***

### ⚡ At a Glance

| Feature | Details |
| --- | --- |
| **Target Platform** | [Workana.com](https://www.workana.com) — Latin America & Global Freelance Marketplace |
| **Language Editions** | Spanish (`es` — largest project pool), Portuguese (`pt`), English (`en`) |
| **Filtering Options** | Language edition + Search Keyword (`query`) + Custom Filtered Workana URLs (`startUrls`) |
| **Project Data Extracted** | `slug`, `title`, `url`, clean `description`, `budget`, `isHourly`, `totalBids`, `skills[]`, `category`, `postedDate` |
| **Client Signals** | `countryName`, `countryCode` (ISO-2), `authorName`, `clientRating` (0–5), `hasVerifiedPaymentMethod`, `isCompany`, `isUrgent`, `isFeatured` |
| **Pagination & Scale** | Auto-scaling pagination (`maxPagesPerList: 0` = auto) + multi-category & multi-edition expansion — **1,000+ unique projects per run** |
| **Deduplication** | 100% deduplicated across pages, categories, and start URLs via unique project `slug` |

***

### 📑 Table of Contents

- [Why Scrape Workana?](#-why-scrape-workana)
- [What This Workana Scraper Does](#-what-this-workana-scraper-does)
- [Use Cases](#-use-cases)
- [Input Configuration](#-input-configuration)
- [Output Schema & Field Reference](#-output-schema--field-reference)
- [Pagination & 1,000+ Scale](#-pagination--1000-scale)
- [How to Use](#️-how-to-use)
- [API Usage Examples](#-api-usage-examples)
- [Tips for Best Results](#-tips-for-best-results)
- [FAQ](#-faq)
- [Related Scrapers](#-related-scrapers)
- [Changelog](#-changelog)

***

### 🔎 Why Scrape Workana?

Workana is the dominant freelance marketplace across Latin America (Brazil, Mexico, Argentina, Colombia, Chile, Peru) and Spain, hosting thousands of live freelance projects across software development, mobile apps, AI/data science, graphic design, video editing, digital marketing, SEO, copywriting, legal, finance, and virtual assistance.

Each listing contains rich market signals — **exact budget ranges (`USD 500 - 1,000`, `USD 15 - 45 / hora`), required technical skills, number of competing bids (`totalBids`), client country, client rating, and verified-payment status** — making it a premier source for freelance lead generation and LatAm labor-market analytics.

Collecting this data manually does not scale:

- **No public bulk export API:** Workana does not offer a public API for exporting live job listings or historical rate benchmarks.
- **Single-list pagination caps:** Anonymous browsing on a single unfiltered Workana feed shows ~9 projects per page and caps near 100 pages (~900 listings), requiring category and language segmentation to collect 1,000+ projects.
- **Cluttered project descriptions:** Workana appends structured category/subcategory boilerplate (`Categoría: X Subcategoría: Y ¿Qué necesitas?: Z`) to the end of project descriptions.

This **Workana data extractor** solves all of those challenges automatically: it paginates across pages, expands across Workana categories and language editions when `maxItems: 1000+` is requested, parses the category into a dedicated `category` field, strips boilerplate tails from `description`, and delivers a clean, deduplicated dataset.

***

### ✨ What This Workana Scraper Does

- 🌎 **Multi-Language Edition Support (`es`, `pt`, `en`)** — target the **Spanish (`es`)**, **Portuguese (`pt`)**, or **English (`en`)** project catalogs, or let large runs sweep across all three.
- 🔎 **Keyword Search (`query`)** — filter projects by technology, tool, or role (e.g., `python`, `wordpress`, `react`, `shopify`, `logo`, `seo`, `n8n`).
- 🔗 **Advanced Filter URLs (`startUrls`)** — paste any filtered Workana jobs URL (combining category, skills, budget tier, client country, or publication date) to scrape that exact slice.
- 📄 **Unlocked 1,000+ Project Pagination (`maxPagesPerList: 0`)** — when `maxPagesPerList` is `0` (default), the scraper walks all available pages and automatically fans out across Workana's 8 core categories (`it-programming`, `design-multimedia`, `sales-marketing`, `writing-translation`, `admin-support`, `finance-management`, `engineering-manufacturing`, `legal`) and editions to reach **1,000+ unique projects**.
- 💰 **Structured Budget & Pricing Model** — captures `budget` exactly as posted (`USD 100 - 250`, `Less than USD 15 / hour`, `Mais de USD 3,000`) plus the boolean `isHourly` flag.
- 📊 **Competition & Bid Tracking** — parses `totalBids` into a clean integer so you can filter for low-competition opportunities (`totalBids < 5`).
- 🧩 **Normalized Skills & Category** — extracts `skills` as a clean string array and parses `category` while stripping the redundant metadata tail from `description`.
- 🌍 **Client Quality & Geo Signals** — captures `countryName`, ISO-2 `countryCode` (`MX`, `AR`, `BR`, `US`, `ES`, `CO`), `authorName`, `clientRating` (`0`–`5`), `hasVerifiedPaymentMethod`, `isCompany`, `isUrgent`, and `isFeatured`.

***

### 🎯 Use Cases

| Persona / Team | How They Use This Workana Scraper |
| --- | --- |
| **Software, Web & Marketing Agencies** | Build an automated hourly/daily lead feed of high-budget projects (`USD 1,000 - 3,000+`) from verified-payment clients (`hasVerifiedPaymentMethod: true`). |
| **Independent Freelancers & Consultants** | Filter live projects by your exact `skills`, sort by lowest `totalBids` and highest `clientRating`, and apply before competitors pile in. |
| **Freelance Rate & Pricing Analysts** | Aggregate `budget` ranges by `category`, `skills`, and `countryCode` to benchmark hourly and fixed-price rates across Latin America, US, and Europe. |
| **Tech Recruiters & Talent Sourcers** | Track which programming languages, frameworks, and AI tools (`python`, `langchain`, `flutter`, `nextjs`) have the fastest-growing project demand. |
| **B2B SaaS & Product Researchers** | Analyze thousands of real client project briefs (`description`) to identify recurring small-business pain points and automation opportunities. |
| **AI Agents & Alerting Workflows** | Pipe live Workana project feeds into Slack, Discord, Telegram, Make, or n8n with LLM scoring to qualify and draft proposals automatically. |

***

### 📥 Input Configuration

All fields are optional. Press **Start** with default settings to collect a fast 60-project sample, or increase `maxItems` to `1000`+ for bulk extraction.

| Field | Key | Type | Default | Description |
| --- | --- | --- | --- | --- |
| **Language** | `language` | `string` | `"es"` | Workana edition: `"es"` (Spanish — largest pool), `"pt"` (Portuguese), or `"en"` (English). |
| **Search Keyword** | `query` | `string` | `""` | Optional keyword filter (e.g., `"wordpress"`, `"python"`, `"shopify"`, `"design"`). Leave empty for all projects. |
| **Start URLs** | `startUrls` | `array<object\|string>` | `[]` | Optional filtered Workana listing URLs (e.g., `https://www.workana.com/es/jobs?category=it-programming`). |
| **Max Items** | `maxItems` | `integer` | `100` (prefill `60`) | Maximum unique projects to collect. Set `0` for unlimited (`1,000+` supported). |
| **Max Pages per List** | `maxPagesPerList` | `integer` | `0` (Auto) | Pages to scrape per list (~9 projects/page). `0` = auto/unlimited governed by `maxItems`. |
| **Proxy Configuration** | `proxyConfiguration` | `object` | `{ "useApifyProxy": true }` | Apify Proxy configuration. Default datacenter proxy works out of the box. |

#### Example 1 — Bulk 1,000+ Freelance Projects Sweep

```json
{
  "language": "es",
  "query": "",
  "maxItems": 1200,
  "maxPagesPerList": 0,
  "proxyConfiguration": { "useApifyProxy": true }
}
```

#### Example 2 — Niche Keyword Search (`python`)

```json
{
  "language": "es",
  "query": "python",
  "maxItems": 250,
  "maxPagesPerList": 0
}
```

#### Example 3 — Multiple Filtered Workana URLs

```json
{
  "startUrls": [
    { "url": "https://www.workana.com/es/jobs?category=it-programming&skills=react" },
    { "url": "https://www.workana.com/pt/jobs?category=it-programming" },
    { "url": "https://www.workana.com/en/jobs?category=design-multimedia" }
  ],
  "maxItems": 600
}
```

***

### 📤 Output Schema & Field Reference

Each scraped project is returned as a flat, normalized JSON object.

#### Sample Output Record

```json
{
  "slug": "especialista-en-cierre-de-ventas-por-whatsapp-y-productos",
  "title": "Especialista en Cierre de Ventas por Whatsapp y Productos",
  "url": "https://www.workana.com/job/especialista-en-cierre-de-ventas-por-whatsapp-y-productos",
  "description": "Se busca un profesional con experiencia en estrategias de ventas y cierre para productos, utilizando WhatsApp como canal principal de comunicación. El objetivo es optimizar el proceso de ventas, gestionar la interacción con clientes potenciales y existentes, y aumentar las tasas de conversión.",
  "budget": "USD 100 - 250",
  "isHourly": false,
  "totalBids": 4,
  "skills": [
    "Ventas",
    "Marketing",
    "Lead Generation",
    "Telemarketing",
    "Social Media Marketing",
    "Experiencia de cliente"
  ],
  "category": "Marketing Digital y Ventas",
  "countryName": "Estados Unidos",
  "countryCode": "US",
  "authorName": "J. H.",
  "clientRating": 4.95,
  "hasVerifiedPaymentMethod": true,
  "isUrgent": false,
  "isCompany": true,
  "isFeatured": false,
  "postedDate": "Hace 2 horas",
  "scrapedAt": "2026-11-10T05:00:00.000Z"
}
```

#### Emoji-Grouped Field Reference & Coverage

##### 📋 Project Identity & Brief

| Field | Type | Coverage | Description |
| --- | --- | --- | --- |
| `slug` | `string` | 🟢 High (100%) | Unique Workana project slug (used for cross-page and cross-list deduplication). |
| `title` | `string` | 🟢 High (100%) | Clean project title (HTML unwrapped). |
| `url` | `string` | 🟢 High (100%) | Canonical URL to the project page (`https://www.workana.com/job/{slug}`). |
| `description` | `string` | 🟢 High (100%) | Full human-written project brief with Workana's category/subcategory metadata tail removed. |
| `category` | `string\|null` | 🟢 High (99%+) | Workana category label (e.g., *Programación y Tecnología*, *Diseño y Multimedia*, *Marketing Digital y Ventas*). |
| `skills` | `array<string>` | 🟢 High (95%+) | Array of required technical or professional skills tagged on the project. |
| `postedDate` | `string` | 🟢 High (100%) | Relative or formatted publication date as shown on Workana (e.g., `Hace 2 horas`, `Ayer`). |

##### 💰 Budget, Pricing & Competition

| Field | Type | Coverage | Description |
| --- | --- | --- | --- |
| `budget` | `string` | 🟢 High (100%) | Posted project budget — fixed range (e.g., `USD 100 - 250`) or hourly rate (`USD 15 - 45 / hora`). |
| `isHourly` | `boolean` | 🟢 High (100%) | `true` when the project pays an hourly rate; `false` for fixed-price projects. |
| `totalBids` | `integer\|null` | 🟢 High (100%) | Number of freelancer proposals submitted so far. |
| `isUrgent` | `boolean` | 🟢 High (100%) | `true` when the client marked the project as urgent. |
| `isFeatured` | `boolean` | 🟢 High (100%) | `true` when the project is promoted/featured in search results. |

##### 🌍 Client Profile & Trust Signals

| Field | Type | Coverage | Description |
| --- | --- | --- | --- |
| `countryName` | `string\|null` | 🟢 High (100%) | Client's country name (e.g., `México`, `Brasil`, `España`, `Estados Unidos`, `Argentina`). |
| `countryCode` | `string\|null` | 🟢 High (100%) | Client's ISO-2 country code (`MX`, `BR`, `ES`, `US`, `AR`, `CO`, `CL`). |
| `authorName` | `string\|null` | 🟢 High (100%) | Client display label (Workana displays initials publicly, e.g., `J. H.`). |
| `clientRating` | `number\|null` | 🟡 Conditional | Client rating on a `0.0`–`5.0` scale (~17–25% of listings; `null` when the client has no prior reviews). |
| `hasVerifiedPaymentMethod` | `boolean` | 🟢 High (100%) | `true` when the client has a verified payment method on file. |
| `isCompany` | `boolean` | 🟢 High (100%) | `true` when the client account is a business/company entity. |
| `scrapedAt` | `string` | 🟢 High (100%) | ISO-8601 UTC timestamp when the record was scraped. |

***

### 🔁 Pagination & 1,000+ Scale

Workana's public listing feed returns **~9 projects per page** and caps any single listing query at roughly **100 pages (~350–900 unique projects per list)**. To ensure you can collect **1,000+ unique projects** in a single run without hitting a single-list ceiling:

- **Auto-Scaling Pagination (`maxPagesPerList: 0`):** Leave `maxPagesPerList` at `0` (default) so pagination is governed automatically by `maxItems`.
- **Automatic 8-Category & Multi-Edition Expansion:** When `maxItems > 250` and `maxPagesPerList === 0` (without restrictive custom `startUrls`), the scraper first paginates the main listing feed and then automatically iterates across Workana's 8 core categories (`it-programming`, `design-multimedia`, `sales-marketing`, `writing-translation`, `admin-support`, `finance-management`, `engineering-manufacturing`, `legal`) and language editions (`es`, `pt`, `en`), deduplicating every project by `slug` until `maxItems` is reached.
- **Multi-URL Queueing:** You can also pass any number of custom filtered URLs in `startUrls`; each URL is crawled as its own paginated list into one unified, deduplicated dataset.

***

### ⚙️ How to Use

1. Open **Workana Scraper** in the **Apify Console**.
2. Select a **Language** (`es` has the largest volume, followed by `pt` and `en`) and optionally enter a **Search Keyword (`query`)**.
3. *(Optional)* Paste custom filtered Workana URLs into **Start URLs (`startUrls`)**.
4. Set **Max Items (`maxItems`)** — e.g., `60` for a quick test, `1000`+ for a deep market sweep, or `0` for unlimited — and leave **Max Pages per List (`maxPagesPerList`)** at `0`.
5. Click **Start** and export your results in **JSON, CSV, Excel, HTML, or RSS**, or fetch them via the **Apify API**.

***

### 💻 API Usage Examples

#### Node.js (`apify-client`)

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });

const run = await client.actor('haketa/workana-scraper').call({
    language: 'es',
    query: '',
    maxItems: 1000,
    maxPagesPerList: 0,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Collected ${items.length} unique Workana projects`);
```

#### Python (`apify-client`)

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("haketa/workana-scraper").call(run_input={
    "language": "es",
    "query": "python",
    "maxItems": 300,
    "maxPagesPerList": 0,
})

for job in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(job["title"], job["budget"], job["totalBids"], job["countryCode"])
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/haketa~workana-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "language": "es",
    "maxItems": 500,
    "maxPagesPerList": 0
  }'
```

***

### 🗂️ Supported Workana Categories & Filter URLs

Workana organizes projects across 8 primary verticals. When `maxPagesPerList: 0` and `maxItems > 250`, the scraper automatically expands across these categories — or you can target any specific vertical directly via `startUrls`:

| Category Slug | Spanish Edition URL (`es`) | Typical Project Roles |
| --- | --- | --- |
| `it-programming` | `https://www.workana.com/es/jobs?category=it-programming` | Full-stack web, mobile apps, Python, AI/ML, WordPress, Shopify, APIs |
| `design-multimedia` | `https://www.workana.com/es/jobs?category=design-multimedia` | UI/UX design, branding, logos, video editing, 3D modeling, motion graphics |
| `sales-marketing` | `https://www.workana.com/es/jobs?category=sales-marketing` | Meta/Google Ads, SEO, WhatsApp sales funnels, CRM automation, lead gen |
| `writing-translation` | `https://www.workana.com/es/jobs?category=writing-translation` | Copywriting, blog content, technical writing, ES/PT/EN translation |
| `admin-support` | `https://www.workana.com/es/jobs?category=admin-support` | Virtual assistance, customer support, data entry, project management |
| `finance-management` | `https://www.workana.com/es/jobs?category=finance-management` | Accounting, financial modeling, ERP setup, business consulting |
| `engineering-manufacturing` | `https://www.workana.com/es/jobs?category=engineering-manufacturing` | CAD, architecture, civil/electrical engineering, product design |
| `legal` | `https://www.workana.com/es/jobs?category=legal` | Contract drafting, corporate law, trademark & compliance consulting |

***

### 🔌 Integrations & Automation Workflows

- **Real-Time Agency Lead Alerts (Slack / Telegram / Discord):** Schedule the actor to run every 30–60 minutes with `maxItems: 60` and connect a Make, Zapier, or n8n webhook to notify your sales channel whenever a high-budget (`USD 1,000 - 3,000+`) project is posted.
- **AI Proposal Drafting (OpenAI / Claude + n8n):** Pipe each new project's `title`, `description`, `skills`, and `budget` into an LLM workflow to score fit (`1`–`10`) and draft a tailored Spanish or Portuguese proposal automatically.
- **Google Sheets & BI Dashboards:** Sync daily runs to Google Sheets, Looker Studio, or Power BI to track skill demand, bid competition (`totalBids`), and budget distributions by `countryCode`.

***

### 💡 Tips for Best Results

- **Leave `maxPagesPerList` at `0`:** Setting `maxPagesPerList: 0` lets `maxItems` control the run automatically and enables multi-category expansion for `1,000+` project runs.
- **Filter for high-intent clients:** In your exported dataset or downstream automation, filter on `hasVerifiedPaymentMethod == true` and `totalBids <= 5` to surface fresh, funded projects with minimal competition.
- **Start with Spanish (`es`) and Portuguese (`pt`):** Because Workana is headquartered in Latin America, the `es` and `pt` editions carry over 90% of total platform volume.
- **Schedule hourly runs for real-time lead alerts:** Schedule the actor every hour with `maxItems: 50` and push new `slug` IDs to Slack, Telegram, or HubSpot via Make/n8n.

***

### ❓ FAQ

#### Do I need a Workana account or API key?

No. The actor collects publicly visible project listings without requiring any login, cookies, or API key.

#### How many projects can I scrape in a single run?

You can collect **1,000 to 5,000+ unique projects** in a single run. When `maxPagesPerList` is `0` (default) and `maxItems` is set to `1000+`, the scraper automatically expands across Workana's categories and language editions to bypass single-list page caps.

#### Why is `authorName` shown as initials (e.g., `J. H.`)?

Workana masks client full names as initials on public listings. You still receive the client's full `countryName`, `countryCode`, `clientRating`, `hasVerifiedPaymentMethod`, and `isCompany` status.

#### Why is `clientRating` null on some projects?

`clientRating` is populated whenever the client has completed prior projects and received ratings on Workana (~17–25% of listings). New clients posting their first project naturally have `clientRating: null`.

#### Can I filter by specific Workana categories, skills, or countries?

Yes. Configure your desired filters on [workana.com/jobs](https://www.workana.com/jobs), copy the URL from your browser address bar, and paste it into **Start URLs (`startUrls`)**.

***

#### What export formats are supported?

You can export the scraped dataset directly from the Apify Console or REST API in **JSON, CSV, Excel (XLSX), HTML table, XML, or RSS**.

#### How fresh is the data?

Every run fetches live project listings directly from Workana at execution time (`scrapedAt`). Schedule the actor hourly or daily to maintain a real-time feed of newly posted freelance gigs.

#### Does the scraper handle duplicate projects across pages or URLs?

Yes. Every project is deduplicated across all pages, categories, and `startUrls` using its unique `slug`.

***

### 🔎 Also Searched As

Workana scraper · scrape Workana · Workana jobs scraper · Workana data extractor · Workana freelance projects API · Latin America freelance market data · Workana lead generation · export Workana to CSV Excel JSON · Workana budget & skill intelligence · freelance gig scraper LatAm

***

### 🔗 Related Scrapers

Pair **Workana Scraper** with our companion freelance, remote-work, and job-market actors:

- [Fiverr Gig & Freelancer Scraper](https://apify.com/haketa/fiverr-scraper) — Extract Fiverr gigs, package pricing, seller ratings, and review counts.
- [Freelancermap IT Projects Scraper](https://apify.com/haketa/freelancermap-scraper) — Scrape European & global IT freelance contracts and project leads.
- [Seek Jobs Scraper](https://apify.com/haketa/seek-scraper) — Extract job listings, salaries, and employer data from Seek.
- [ZipRecruiter Jobs Scraper](https://apify.com/haketa/ziprecruiter-scraper) — Scrape US & UK job postings and compensation ranges.
- [XING Jobs Scraper](https://apify.com/haketa/xing-jobs-scraper) — Extract DACH-region job postings and company profiles.

***

### 📋 Changelog

#### v1.2.0 (2026-11)

- **Unlocked 1,000+ Multi-Category & Multi-Edition Pagination:** Set `maxPagesPerList` prefill and default to `0` (auto/unlimited governed by `maxItems`) and added automatic fan-out across all 8 Workana categories (`it-programming`, `design-multimedia`, `sales-marketing`, `writing-translation`, `admin-support`, `finance-management`, `engineering-manufacturing`, `legal`) and language editions (`es`, `pt`, `en`) when `maxItems > 250`.
- **Fast Default & Prefill Limits:** Set `maxItems` default to `100` and prefill to `60` so quick test runs finish in ~20 seconds while `maxItems: 1000+` scales seamlessly.
- **Documentation Upgrade:** Added `⚡ At a Glance` summary table, emoji-grouped field tables with coverage indicators, and updated API examples.

#### v1.1.0 (2026-11)

- **Cleaner `description` Field:** Automatically strips Workana's appended category/subcategory boilerplate tail after extracting the `category` field (99.4% category coverage).
- **Scale Verification:** Verified 355 unique Spanish (`es`) projects in a single list with 0 duplicates and 100% coverage on core fields.

#### v1.0.0 (2026-08)

- Initial release of Workana Jobs Scraper supporting Spanish (`es`), Portuguese (`pt`), and English (`en`) editions, keyword filtering, custom `startUrls`, and 19 normalized output fields.

# Changelog

This Actor's version history is a separate document: https://apify.com/haketa/workana-scraper/changelog.md

# 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 (1,000+ supported).

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

How many result pages to scrape per list (each page has about 9 projects). 0 = auto/unlimited governed by Max Items.

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

Datacenter proxy works out of the box.

## Actor input object example

```json
{
  "language": "es",
  "query": "",
  "startUrls": [],
  "maxItems": 60,
  "maxPagesPerList": 0,
  "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": 60,
    "maxPagesPerList": 0,
    "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": 60,
    "maxPagesPerList": 0,
    "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": 60,
  "maxPagesPerList": 0,
  "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/tp37CdFvh93cRRwDS/openapi.json
