Airtasker APIairtasker.com ↗
Search Airtasker tasks by location, category, and price. Get task details, user profiles, location coordinates, and category listings via 6 structured endpoints.
What is the Airtasker API?
The Airtasker API provides 6 endpoints for accessing task listings, user profiles, and location data from Airtasker.com. With search_tasks you can query open tasks by latitude/longitude radius, category IDs, price range, and keyword, receiving paginated results that include task summaries, poster profiles, and precise location objects. Additional endpoints cover full task detail, public user profiles, category listings, and two-step location resolution.
curl -X GET 'https://api.parse.bot/scraper/78346169-28d6-472e-b840-44ada671f013/search_tasks?lat=-33.8688&lon=151.2093&limit=3&radius=50000&sort_by=posted_asc&carl_ids=1&max_price=9999&min_price=10&task_types=inperson&search_term=cleaning&task_states=posted&location_name=Sydney+NSW' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace airtasker-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Airtasker SDK — find tasks by location and category, drill into details."""
from parse_apis.airtasker_api import Airtasker, Sort, TaskType, ResourceNotFound
client = Airtasker()
# Search for cleaning tasks in Sydney, sorted by newest first.
for task in client.tasks.search(
search_term="cleaning",
lat="-33.8688",
lon="151.2093",
location_name="Sydney NSW",
sort_by=Sort.POSTED_DESC,
task_types=TaskType.BOTH,
limit=3,
):
print(task.name, f"${task.price}", task.state)
# Take one task and get its full details.
task = client.tasks.search(search_term="cleaning", limit=1).first()
if task:
detail = task.refresh()
print(detail.taskCard, detail.sections)
# Browse all categories (single page).
for cat in client.categories.list(limit=5):
print(cat.display_name, cat.carl_id)
# Resolve a location name to coordinates.
suggestion = client.locationsuggestions.search(query="Melbourne VIC", limit=1).first()
if suggestion:
location = client.locations.get(external_id=suggestion.external_id)
print(location.display_name, location.latitude, location.longitude)
# Typed error handling: attempt to fetch a non-existent profile.
try:
profile = client.profiles.get(user_id="9999999999")
print(profile.first_name)
except ResourceNotFound as exc:
print(f"Profile not found: {exc}")
print("exercised: tasks.search / task.refresh / categories.list / locationsuggestions.search / locations.get / profiles.get")
Search for tasks with filters on location, category, price range, task type, and keywords. Returns task summaries with poster profiles and location data. Paginates via a time-based cursor (after_time from meta.latest_result). Each page returns up to `limit` tasks; set limit to control page size.
| Param | Type | Description |
|---|---|---|
| lat | string | Latitude for location-based search (decimal string) |
| lon | string | Longitude for location-based search (decimal string) |
| limit | integer | Number of tasks per page (max results returned per request) |
| radius | integer | Search radius in meters from the lat/lon center |
| sort_by | string | Sort order for results |
| carl_ids | string | Category IDs to filter by, comma-separated (e.g. '1' for General Cleaning, '57' for Gardening Services). Obtain IDs from browse_categories. |
| max_price | integer | Maximum task budget in AUD |
| min_price | integer | Minimum task budget in AUD |
| after_time | string | Pagination cursor: ISO 8601 timestamp from meta.latest_result of the previous page |
| task_types | string | Filter by task type |
| search_term | string | Keyword to search for in task titles and descriptions |
| task_states | string | Filter by task state |
| location_name | string | Display name of the search location |
{
"type": "object",
"fields": {
"meta": "object with total, has_more, latest_result and saved_filters",
"tasks": "array of task summary objects with id, name, slug, price, state, deadline, location_ids, sender_id, bids_count",
"total": "integer total number of matching tasks (flattened from meta)",
"has_more": "boolean indicating if more results are available (flattened from meta)",
"profiles": "array of user profile summaries for task posters",
"locations": "array of location objects with id, latitude, longitude, display_name",
"latest_result": "ISO timestamp cursor for next page (flattened from meta)"
},
"sample": {
"data": {
"meta": {
"total": 6,
"has_more": true,
"latest_result": "2026-06-11T15:01:15+10:00"
},
"tasks": [
{
"id": 20353787,
"name": "Cleaner required",
"slug": "cleaner-required-x01kttfy06ktyd79ag5ewtkdvah",
"price": 150,
"state": "posted",
"deadline": "2026-07-11T10:00:00+10:00",
"sender_id": 1355955,
"bids_count": 2,
"online_or_phone": true,
"carl_category_name": "General Cleaning"
}
],
"total": 6,
"has_more": true,
"profiles": [
{
"id": 1355955,
"first_name": "Bryan",
"average_rating": 5
}
],
"locations": [
{
"id": 257331,
"latitude": "-32.04",
"longitude": "115.77",
"display_name": "White Gum Valley WA"
}
],
"latest_result": "2026-06-11T15:01:15+10:00"
},
"status": "success"
}
}About the Airtasker API
Search and Filter Tasks
The search_tasks endpoint accepts up to eight filter parameters: lat and lon define the geographic center, radius sets the search distance in meters, carl_ids (comma-separated) restricts results to specific categories, and min_price/max_price constrain the task budget in AUD. Each response returns a tasks array with fields including id, name, slug, price, state, deadline, bids_count, and location_ids, alongside parallel profiles and locations arrays. Pagination uses the latest_result ISO timestamp cursor from meta; pass it as after_time on the next request to walk through result pages.
Task and User Detail
get_task_detail takes a task_slug (available from search_tasks results) and returns structured sections: a taskCard with title, description, task_info_items, and images; a header with status and action buttons; and an actions object covering share, report, and notification options. get_user_profile accepts a numeric user_id (from the profiles array in search results) and returns profile sections including rating, completion rate, reviews, and location, plus optional sticky_banner and menu_items fields.
Category and Location Resolution
browse_categories returns the complete Airtasker category list in one call — each entry exposes a display_name and a carl_id array that maps directly to the carl_ids filter in search_tasks. For location-based searches, use the two-step flow: get_location_suggestions takes a free-text query (e.g. 'Sydney NSW') and returns suggestion objects with name, source, and external_id; pass that external_id to get_location_details to receive latitude, longitude, and display_name suitable for use in search_tasks.
The Airtasker API is a managed, monitored endpoint for airtasker.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when airtasker.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official airtasker.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Aggregate open tasks in a specific city by combining location resolution with
search_tasksradius filtering - Monitor new tasks in a category (e.g. Gardening Services, carl_id 57) and alert users when budget exceeds a threshold
- Build a task price benchmarking tool using
min_price/max_pricefilters andbids_countfrom search results - Pull poster reputation data via
get_user_profileto surface rating and completion rate alongside task listings - Populate a category-browsing UI from
browse_categoriesand map selections tocarl_idsfor filtered searches - Resolve human-readable suburb names to coordinates using
get_location_suggestionsandget_location_details - Track task state changes over time by polling
get_task_detailfor a set of known slugs
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Airtasker have an official developer API?+
How does pagination work in `search_tasks`?+
latest_result ISO timestamp in meta. Pass that value as after_time on your next request to retrieve the subsequent page. The has_more boolean tells you whether additional pages exist.What does `get_task_detail` return beyond what `search_tasks` provides?+
search_tasks returns summary fields: id, name, slug, price, state, deadline, and bids_count. get_task_detail adds the full task description, task_info_items, images, action menus, and tabbed sections for offers and questions — data not present in the search response.Are accepted or completed tasks accessible, or only open ones?+
search_tasks endpoint returns tasks across states (the state field is included per task), so completed and assigned tasks can appear in results depending on what the source surfaces. However, private task details, direct messages between taskers and posters, and payment or invoicing data are not exposed by any endpoint. You can fork this API on Parse and revise it to add an endpoint targeting a specific task state filter if needed.Can I retrieve a list of bids or offers on a task?+
bids_count integer is available in search_tasks results, and get_task_detail includes an offers tab section, but individual bid amounts, bidder identities, and bid timestamps are not returned as structured fields in the current endpoints. You can fork this API on Parse and revise it to add a dedicated bids endpoint exposing that detail.