# Airtasker Scraper \[From $2💰] | AU UK US | Monitor (`ahmed_jasarevic/airtasker-scraper`) Actor

Extract Airtasker tasks, bids, reviews and public poster & tasker profiles for gig-economy research, lead generation and price monitoring across AU, UK, US, IE, NZ and SG.

- **URL**: https://apify.com/ahmed\_jasarevic/airtasker-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.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/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

## Airtasker Scraper — Gig Economy Data Extraction for AU, UK, US & More

Extract live Airtasker task listings, bids, reviews and public poster/tasker profiles across **Australia, UK, US, Ireland, New Zealand and Singapore** — no official Airtasker API and no login required. Get task titles, descriptions, budgets, categories, GPS locations, deadlines, bid counts and poster reputation data as clean structured JSON for gig-economy research, lead generation and task price monitoring.

### Monitor Gig Economy Demand And Task Pricing

Each dataset row is one real, publicly posted Airtasker task with its posted budget, category, state, bid count and location — the same data researchers and analysts use to track gig work trends (Airtasker itself publishes category-level market insights and cost guides per task type across AU/UK/US):

- **Gig-economy market research** — track what work is posted, where, and at what price across six regions; build time-series datasets of task demand, category mix and posted budgets.
- **Lead-generation agencies** — find businesses and individuals posting paid tasks (posters with budget intent, public rating, completion rate and location included).
- **Airtasker price benchmarks** — build rate cards per category, city and region from real posted budgets, assigned prices and bid counts.
- **Freelancer-tool SaaS** — monitor bid counts, going rates and category demand to power pricing and demand features.
- **In-demand task tracking** — see which categories (removals, cleaning, handyman, rubbish removal and more) are actively posted in each region over time.

### Build Lead Generation Lists From Airtasker Task Posters

Every task includes the poster's **public profile data**: average rating, reviews received, tasks posted, completion rate, member-since date, pro/supertasker badges and avatar. When a task is assigned, the winning tasker's profile is included too. That makes it possible to build targeted outreach lists of people actively hiring for local services — handyman jobs, house cleaning, furniture removals, gardening and other task categories — filtered by what they posted and where.

### How The Airtasker Scraper Works: Public Data, No Browser

This actor is a plain HTTP crawler (no browser, no DOM scraping) that reads the same data any anonymous visitor sees on Airtasker's public pages:

1. **SSR browse pages** — the region pages (`airtasker.com/[uk|us|…]/tasks/`) embed a `bootstrappedData` JSON blob with ~30 current tasks plus sender profiles and locations with GPS coordinates.
2. **Public JSON feed** — `GET /api/v2/tasks?limit=50&after=N` pages deeper into the same public recommender feed (up to your `maxTasks` limit).
3. **Full task detail** — `GET /api/v2/tasks/{id}` returns the complete task payload: description, up to 50 bids with bidder info and messages, comments, reviews, images and locations.
4. **Direct task URLs** — pass specific `airtasker.com/tasks/...` URLs via `taskUrls` to scrape or re-monitor only those listings.

No logins, no cookies, no CAPTCHA solving. Requests are polite and capped by `maxRequestsPerCrawl` (default 600). If you hit Airtasker rate limiting (HTTP 429 / 403), enable the Apify proxy in the input for IP rotation.

### Track In-Demand Tasks Across AU, UK, US, IE, NZ And SG

Airtasker operates separate regional marketplaces; this actor covers all six that exposed public listings at the time of writing:

| Region | Code | Currency |
|---|---|---|
| Australia (largest marketplace) | `au` | AUD |
| United Kingdom | `uk` | GBP |
| United States | `us` | USD |
| Ireland | `ie` | EUR |
| New Zealand | `nz` | NZD |
| Singapore | `sg` | SGD |

Airtasker's own **Trends pages** (airtasker.com/au/trends, /uk/trends, /us/trends) show that the busiest categories by posted volume are removals, furniture removals, cleaning, rubbish removal and handyman, with high demand in cities like Melbourne, Sydney, London and Brisbane. This actor collects the raw task feed behind those insights so you can run your own analysis.

### Scraper Input: Region, Task Limit And Detail Options

All input fields are taken directly from the actor's input schema. Nothing is required — defaults work out of the box.

| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
| `region` | string | No | `au` | Regional marketplace to scrape: `au`, `uk`, `us`, `ie`, `nz` or `sg`. AU has the most tasks; UK/US are smaller. |
| `maxTasks` | integer | No | `50` | Maximum number of tasks to return, 1–500. Free users are hard-capped at 10. Each task costs one extra request when details are enabled. |
| `includeTaskDetails` | boolean | No | `true` | Fetch each task's full detail (description, bids with bidder info, comments, reviews, images, coordinates). Recommended. Adds a small per-task surcharge (one extra request per task). |
| `taskUrls` | array of `{ url }` | No | `[]` | Scrape only these specific `airtasker.com/tasks/...` URLs instead of browsing the marketplace. |
| `maxConcurrency` | integer | No | `20` | Parallel HTTP requests (1–100). Raise for speed, lower if you hit rate limits (HTTP 429). |
| `maxRequestsPerCrawl` | integer | No | `600` | Safety cap on total HTTP requests for the whole run. |
| `proxy` | object | No | off | Standard Apify proxy picker. Enable only if you need IP rotation or geo-targeting. |

### Dataset Fields: Every Task, Bid And Profile

One dataset item per task. Field names below match the actor's actual output exactly.

| Field | Type | Description |
|---|---|---|
| `taskId`, `title`, `description`, `url` | — | Core listing identity, full text and link |
| `price`, `currency` | — | Posted budget and region currency (AUD/GBP/USD/EUR/NZD/SGD) |
| `amountCents`, `assignedPrice`, `fixedPrice` | — | Budget in cents, final assigned price and fixed-price flag |
| `category`, `categoryId` | — | Airtasker category (filter the dataset by these to slice cleaning, removals, handyman, etc.) |
| `state` | enum | `posted`, `assigned`, `closed`, `completed`, … |
| `bidsCount`, `commentsCount` | — | Engagement counters |
| `onlineOrPhone`, `city` | — | Task mode and city string |
| `location` | object | `displayName` plus numeric `latitude` / `longitude` |
| `deadline`, `semanticDueDate`, `flexibleDeadline` | — | Timing info |
| `postedAt`, `updatedAt`, `regionCode` | — | Listing timestamps and region |
| `poster` | object | Public poster profile: name, `profileUrl`, `averageRating`, `reviewsReceived`, `tasksPosted`, `posterCompletionRate`, `pro`, `supertasker`, `memberSince`, `avatarUrl` |
| `assignedTasker` | object | Winning tasker profile (same shape as `poster`) when the task is assigned |
| `bids` | array (≤50) | Each bid: `bidderName`, `bidderProfileUrl`, `bidderAvgRating`, `bidderReviewsReceived`, `bidderTasksCompleted`, `message`, `createdAt`, `accepted`, `proposedDeadline` |
| `reviews` | array (≤50) | Task reviews: `rating`, `body`, `authorId`, `createdAt` |
| `images` | array | Attachment image URLs |
| `scrapedAt` | string | ISO timestamp of the scrape |

### Example Input

```json
{
  "region": "au",
  "maxTasks": 100,
  "includeTaskDetails": true,
  "maxConcurrency": 20,
  "maxRequestsPerCrawl": 600
}
```

The minimal valid run is just `{ "region": "au", "maxTasks": 50 }` — every other field has a sensible default.

### Example Output

One dataset row per task (field names are real output fields; values are illustrative):

```json
{
  "taskId": 20880960,
  "title": "Furniture removal — 3 items, 2nd floor",
  "description": "Need two movers to carry a sofa, mattress and wardrobe to a van…",
  "url": "https://www.airtasker.com/tasks/furniture-removal-3-items-2nd-floor/",
  "price": 150,
  "currency": "AUD",
  "amountCents": 15000,
  "assignedPrice": null,
  "fixedPrice": false,
  "category": "Furniture Removal",
  "categoryId": 24,
  "state": "posted",
  "bidsCount": 4,
  "commentsCount": 1,
  "onlineOrPhone": false,
  "city": "Melbourne VIC",
  "location": { "displayName": "Melbourne VIC, Australia", "latitude": -37.81, "longitude": 144.96 },
  "deadline": "2026-09-25T10:00:00+10:00",
  "semanticDueDate": null,
  "flexibleDeadline": false,
  "postedAt": "2026-09-19T08:12:00+10:00",
  "updatedAt": "2026-09-19T08:12:00+10:00",
  "poster": {
    "userId": 1355955,
    "name": "Melissa K.",
    "profileUrl": "https://www.airtasker.com/users/melissa-k/",
    "averageRating": 4.9,
    "reviewsReceived": 23,
    "tasksPosted": 12,
    "posterCompletionRate": 100,
    "pro": false,
    "supertasker": false,
    "memberSince": "2023-04-02T00:00:00+10:00",
    "avatarUrl": "https://…/avatar.jpg"
  },
  "assignedTasker": null,
  "bids": [
    {
      "bidderName": "Courtney H.",
      "bidderProfileUrl": "https://www.airtasker.com/users/courtney-h/",
      "bidderAvgRating": 4.7,
      "bidderReviewsReceived": 41,
      "bidderTasksCompleted": 397,
      "message": "Hi Melissa — experienced with furniture removals, can do Saturday morning…",
      "createdAt": "2026-09-19T09:00:00+10:00",
      "accepted": false,
      "proposedDeadline": null
    }
  ],
  "reviews": [],
  "images": [],
  "regionCode": "au",
  "scrapedAt": "2026-09-19T09:05:00.000Z"
}
```

### Integrations & Automation: API, Webhooks And Scheduling

The actor runs on the Apify platform, so everything around it is batteries-included:

- **API** — call it from any language via the Apify API and get the dataset as JSON, CSV, Excel or XML.
- **Scheduling** — schedule daily (or hourly) runs per region to build price-benchmark and task-demand time series; recurring usage also improves Apify Store recommendation quality.
- **Webhooks** — trigger downstream pipelines when a run finishes (e.g. push new tasks to a database or Slack).
- **Zapier / Make** — the Apify integrations let you connect run outputs to thousands of apps without code.

Recommended pattern: one scheduled run per region per day, `maxTasks: 100–200`, details on — a complete daily snapshot of public task supply.

### Related Gig Economy Data Actors

These Apify actors cover neighbouring marketplaces if you want a broader freelancer / local-services data picture:

- [Upwork Jobs Scraper 2026](https://apify.com/devcake/upwork-jobs-scraper) — remote freelance job postings, budgets and skills
- [Fiverr Search Gig Scraper](https://apify.com/igview-owner/fiverr-scraper) — Fiverr gigs, sellers, prices and ratings
- [TaskRabbit Services Scraper](https://apify.com/fortuitous_pirate/taskrabbit-scraper) — US local-services tasker data (the closest platform analog to Airtasker)
- [PeoplePerHour Job Scraper](https://apify.com/getdataforme/PeoplePerHour-Job-Scraper) — PeoplePerHour job listings and client info
- [Upwork Jobs & Freelancer Scraper](https://apify.com/sian.agency/upwork-jobs-scraper) — Upwork jobs, freelancer profiles and client intelligence

### FAQ: Airtasker Data, API And Pricing Questions

#### Does Airtasker have an official public API for data?

No public **data** API. Airtasker publishes app/API endpoints for its own products (e.g. an MCP server for account actions that requires OAuth and your own account), and third-party providers resell Airtasker data. This actor reads Airtasker's **public, login-free** listing surfaces directly — no account, no key, no OAuth — and returns the data in a clean dataset.

#### Why use this actor instead of building an Airtasker scraper yourself?

Building one means reverse-engineering the site, handling pagination, bypassing blocks, and running infrastructure. This actor does the work once: plain HTTP requests against the public JSON feed and SSR data, no browser, no CAPTCHA solving, polite and capped concurrency, pay-per-result pricing, and scheduling, proxies, retries and exports handled by Apify.

#### What are the alternatives to this actor for gig-economy and task data?

For the same platform: Airtasker's own account-oriented MCP/API (requires login, not bulk data) or third-party paid APIs. For neighbouring platforms on Apify: the Upwork, Fiverr, PeoplePerHour and TaskRabbit actors listed under Related Actors above. Off-platform, Airtasker publishes category-level Trends pages and cost guides if you only need aggregates.

#### How can I get Airtasker task pricing data by category?

Run the actor with details enabled, then group the dataset by the `category` field and aggregate `price`, `assignedPrice` and `bidsCount` per category, city and date. Airtasker's own cost guides (e.g. handyman $180–$280 average per task in AU) give published benchmarks you can validate your scraped numbers against.

#### Why do I only get ~30 tasks from the browse page?

Anonymous browsing shows a recommender feed of ~30 recent/recommended tasks per region page. The actor automatically pages the public JSON feed (`after=` offsets) to go deeper, up to `maxTasks` (max 500) — and can target specific listings via `taskUrls`.

#### Can I search Airtasker by keyword?

Not anonymously: Airtasker's on-site keyword search calls a login-gated API, so this actor browses the region's recent/recommended feed instead. Once the dataset is downloaded, every row includes `category` and full text fields, so you can filter and search locally.

#### Is scraping Airtasker legal?

The actor only reads publicly visible marketplace listings — the same data any visitor can see without logging in — at a polite rate. Respect Airtasker's Terms of Use and applicable law; you are responsible for how you use the data (see the Legal & Compliance Disclaimer below).

#### Why is some data missing from some tasks?

Fields like `deadline`, `images`, `reviews` or `assignedTasker` are empty by design when a task has none (e.g. no deadline set, not yet assigned). Phone numbers and full standalone profile pages require login and are therefore not scraped.

### Pricing: Pay Per Airtasker Task Result

The actor is **pay-per-event**:

- **Actor Start** — one charge when a run starts (priced by memory; ~$0.00005 per event/GB).
- **result** — **$0.002 per task row** saved to the dataset (base listing: title, price, category, location, state, poster).
- **Detail** (add-on) — **$0.003 per task** charged only when `includeTaskDetails` is enabled (description, bids, comments, reviews, images, coordinates).

Cost control: free users get a capped 10-task preview; paying users can run up to 500 tasks per run. A fast title–price sweep with details **off** costs ~2–3 requests total and only the base `result` charges.

### Tips For Cheap, Reliable Runs

- Start with `maxTasks: 20` + details **on** to validate the data shape before scaling.
- Turn `includeTaskDetails` off for a fast, cheap title–price–location sweep.
- Use `taskUrls` to re-scrape or monitor specific listings of interest.
- Schedule daily runs per region to build price-benchmark time series.
- Reduce `maxConcurrency` if you see HTTP 429s; enable the Apify proxy if blocking persists.

For issues or feature requests, open a ticket on the [Issues tab](https://console.apify.com/actors/ahmed_jasarevic/airtasker-scraper/issues). Need a custom data pipeline, alerts or enrichment for Airtasker data? Contact the author.

### For AI Agents & LLM Apps

One-line purpose: **returns one JSON dataset row per publicly posted Airtasker task — including budget, category, GPS location, bids with bidder reputation, reviews and poster/tasker public profiles — across AU, UK, US, IE, NZ and SG.**

Minimal working input (all fields optional — defaults shown):

```json
{ "region": "au", "maxTasks": 50 }
```

Variant: cheap title–price sweep without extra detail requests:

```json
{ "region": "au", "maxTasks": 200, "includeTaskDetails": false }
```

Output field list: `taskId, title, description, url, price, currency, amountCents, assignedPrice, fixedPrice, category, categoryId, state, bidsCount, commentsCount, onlineOrPhone, city, location{displayName,latitude,longitude}, deadline, semanticDueDate, flexibleDeadline, postedAt, updatedAt, poster{userId,name,profileUrl,averageRating,reviewsReceived,tasksPosted,posterCompletionRate,pro,supertasker,memberSince,avatarUrl}, assignedTasker, bids[]{bidderName,bidderProfileUrl,bidderAvgRating,bidderReviewsReceived,bidderTasksCompleted,message,createdAt,accepted,proposedDeadline}, reviews[]{rating,body,authorId,createdAt}, images, regionCode, scrapedAt`

Behaviors an agent should know:

- **Currency follows region** — `au`→AUD, `uk`→GBP, `us`→USD, `ie`→EUR, `nz`→NZD, `sg`→SGD. Don't assume AUD.
- **No anonymous keyword search** — the actor walks the region's recent/recommended feed; use `taskUrls` (array of `{url}` objects for `airtasker.com/tasks/...` pages) to target specific tasks. One detail enqueue happens per `taskUrls` entry when details are on.
- **`includeTaskDetails` defaults to `true`** — every task then costs one extra `task-detail` charge ($0.003) and one extra HTTP request. Set it to `false` for a cheap sweep; then rows lack `description`, `bids`, `reviews`, `images` detail content.
- **`maxTasks` is capped at 500** (clamped internally, also clamped to free users' 10-item preview). It is NOT a validation error if you pass more.
- **Bids (≤50) include bidder reputation and message but no per-bid price**; individual bid prices and full standalone user-profile pages require login and are not included.
- **`maxRequestsPerCrawl` (default 600) is the real cost brake** — a details-on run of N tasks costs ~N+5 requests.

Billing model: pay-per-event — Actor start ~$0.00005/event, $0.002 per task result row, +$0.003 per task only with `includeTaskDetails: true`.

### Legal & Compliance Disclaimer

This actor is an independent tool and is **not affiliated with, endorsed by, or sponsored by Airtasker Pty Ltd**. "Airtasker" is a trademark of its respective owner and is used here only to describe the publicly accessible data source.

The actor accesses **only publicly available Airtasker pages and JSON endpoints** that any anonymous visitor can view without logging in — it does not bypass logins, solve CAPTCHAs, or use automated browser sessions. It runs at a polite, capped request rate.

You are responsible for your own compliance with Airtasker's Terms of Service and applicable data-protection and consumer laws. If you process data that may identify individuals (poster/tasker names, ratings, locations), honour applicable privacy rules — including the GDPR for EU-linked data and the CCPA for California-linked data — and avoid using the data for unsolicited commercial outreach where doing so would violate laws such as CAN-SPAM or the TCPA (which generally do not apply to business contact data, but check local rules). This section is a factual disclosure, not legal advice.

### SEO Keywords

airtasker scraper, airtasker api, scrape airtasker tasks, airtasker data, airtasker dataset, gig economy data, gig economy market research, gig work trends data, airtasker task pricing, airtasker rates by category, airtasker price monitoring, airtasker lead generation, handyman job leads, cleaning jobs data, removalist task data, in-demand tasks data, airtasker trends, airtasker tasker earnings, airtasker australia tasks, airtasker melbourne, airtasker uk tasks, airtasker london, airtasker us tasks, task marketplace data, airtasker alternative

# Actor input Schema

## `region` (type: `string`):

Airtasker regional marketplace to scrape. AU has the most tasks; UK/US are smaller.

## `maxTasks` (type: `integer`):

Maximum number of tasks to return (free users are capped at 10). Each task costs 1 extra request when task details are enabled.

## `includeTaskDetails` (type: `boolean`):

Fetch each task's full detail (description, bids with bidder info, comments, reviews, images, coordinates). Recommended. Adds a small per-task surcharge (one extra request per task).

## `maxConcurrency` (type: `integer`):

How many HTTP requests to run in parallel. Higher = faster (detail mode issues 1 extra request per task). Raise for speed, lower if you hit rate limits (HTTP 429).

## `taskUrls` (type: `array`):

Scrape only these specific Airtasker task page URLs instead of browsing the marketplace (e.g. https://www.airtasker.com/tasks/slug/).

## `maxRequestsPerCrawl` (type: `integer`):

Safety cap on total HTTP requests for the whole run.

## `proxy` (type: `object`):

Select proxies to be used by your crawler.

## Actor input object example

```json
{
  "region": "au",
  "maxTasks": 50,
  "includeTaskDetails": true,
  "maxConcurrency": 20,
  "maxRequestsPerCrawl": 600,
  "proxy": {
    "useApifyProxy": false
  }
}
```

# 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 = {
    "proxy": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/airtasker-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 = { "proxy": { "useApifyProxy": False } }

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/airtasker-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 '{
  "proxy": {
    "useApifyProxy": false
  }
}' |
apify call ahmed_jasarevic/airtasker-scraper --silent --output-dataset

```

## MCP server setup

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