TaskRabbit Scraper - Taskers, Rates, Ratings & Availability
Pricing
from $1.60 / 1,000 tasker or review records
TaskRabbit Scraper - Taskers, Rates, Ratings & Availability
Scrape TaskRabbit taskers by US city and service. Extract hourly rates, ratings, reviews, completed tasks, elite status, and availability. Track NEW, UPDATED, REAPPEARED, and EXPIRED taskers with incremental runs, resume, and MCP export.
Pricing
from $1.60 / 1,000 tasker or review records
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
TaskRabbit Scraper: Tasker Rates, Ratings & Reviews
TaskRabbit Scraper turns TaskRabbit tasker listings into a clean data feed. Pick one or more US cities and service categories, and get the taskers TaskRabbit features there, with hourly rates, ratings, review counts, completed tasks and on-duty status pulled from each public profile. Paste a tasker profile link or numeric id for a direct read instead, add each tasker's public reviews when you need them, and monitor a city or service over time with change tracking. Export to JSON, CSV or Excel, or pull results straight into your app through the API.
Why This Scraper?
- Real rate data: per-category hourly rates, the client-facing rate and the service fee, alongside ratings, review counts and completed tasks.
- Availability signal: each enriched profile carries the tasker's on-duty status, hours worked and years on the platform.
- City and service search: paste city names and service categories; cities are matched against the source's own city pages automatically.
- URL mode: paste tasker profile links or numeric ids for a direct read, skipping the search entirely.
- Optional review records: one row per public review, plus each city page's recent service testimonials.
- Recurring monitoring: scheduled runs classify every record as NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED, with per-campaign state you can name or share.
- Structured failures: a blocked or broken run fails loudly with a clear message instead of silently returning an empty dataset.
Use Cases
- Gig marketplace research: compare tasker hourly rates and service demand across cities and categories.
- Local services directories: feed live tasker cards (rates, ratings, availability) into your own site or app.
- Marketplace analytics: track rating distributions, review volume and elite status over time.
- Rate benchmarking: pull the going hourly rate for a service category across several cities at once.
- Review mining: collect a tasker's public reviews for service quality or sentiment analysis.
Data You Get
Sample shape: values are illustrative placeholders, not from a live tasker.
| Field | Example |
|---|---|
kind | "tasker" (also "review", "city_review") |
recordId / taskId | "3000042" / 3000042 |
url | "https://www.taskrabbit.com/profile/sample-t--9" |
displayName | "Sample T." |
cityName / citySlug | "Portland, OR" / "portland" |
serviceName / serviceSlug | "Furniture Assembly" / "assemble-furniture" |
averageRating | 4.9 |
reviewsCount / totalReviewCount | 120 / 340 |
tasksCount / taskCountProfile | 210 / 512 |
elite | false |
onDuty | true |
positiveRating | "98%" |
hoursWorked | 812.5 |
rabbitSinceYear | 2019 |
vehicleType | "none" |
categories | [{"categoryName": "Furniture Assembly", "hourlyRate": 42.0, "hourlyRateDisplay": "$42.00/hr", ...}] |
ratingDistribution | {"5": 280, "4": 45, ...} |
source | "profile" (or "card" when profile enrichment is off) |
changeType | "NEW" (incremental mode only) |
firstSeenAt / lastSeenAt | "2026-01-01T00:00:00+00:00" |
Review records (kind=review, optional) add reviewId, taskerName, taskerUrl, posterName, rating, positive, message, categoryName, categoryId, canceled, createdAt, reviewType and the full upstream review object (raw). City testimonial records (kind=city_review, optional) carry the recent service reviews shown on each city page: reviewId, citySlug, serviceSlug, authorName, rating, message, createdAt and raw. Tasker records do not carry a raw field; every rate, availability and category value is already exposed under its own name.
How to Use
- Pick a mode:
search(cities and services) orurl(tasker links or ids). - In search mode, fill in Cities and Services; profile enrichment (rates and availability) is on by default.
- Turn on the review toggle when you also want review rows, and set Max items to control run size and cost.
- Click Start, then download the dataset as JSON, CSV or Excel, or read it through the API.
City and service search:
{"mode": "search","locations": ["Portland, OR", "Austin, Texas"],"services": ["furniture assembly", "tv mounting"],"maxItems": 40}
Read specific taskers by link or id:
{"mode": "url","profileInputs": ["3000042", "https://www.taskrabbit.com/profile/sample-t--9"]}
Also collect each tasker's reviews:
{"mode": "search","locations": ["Chicago"],"services": ["house cleaning"],"includeReviews": true,"maxReviewsPerTasker": 20,"maxItems": 60}
Recurring monitoring for one city and service:
{"mode": "search","locations": ["Denver"],"services": ["handyman"],"incrementalMode": true,"emitExpired": true,"stateKey": "denver-handyman-weekly"}
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/taskrabbit-tasker-scraper").call(run_input={"mode": "search","locations": ["Portland, OR"],"services": ["furniture assembly"],})for tasker in client.dataset(run["defaultDatasetId"]).iterate_items():print(tasker["displayName"], tasker.get("averageRating"))
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/taskrabbit-tasker-scraper').call({mode: 'search',locations: ['Portland, OR'],services: ['furniture assembly'],});const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
Source coverage per scope
Each city and service pair carries the featured taskers module the source itself shows there, up to 6 taskers. There is no deeper public listing behind that module (the interactive "all taskers" flow sits behind the booking funnel), so wider coverage comes from adding more cities or services, not from paging one scope. Per-tasker depth (rates, hours, availability, categories, paginated reviews) is unlimited once a tasker is found.
If the same tasker is featured in more than one of the cities or services you search in a single run, only the first scope reached produces a row for that tasker; the later scope's occurrence of the same tasker is treated as already seen and does not produce a second row. That one row's city and service fields (and its listing-card fields such as bio, reviewsCount and tasksCount) describe only the first scope, so per-scope tasker counts come out lower than what the source features there. Run overlapping city or service combinations in separate runs if you need one row per city and service pairing even for a tasker who is featured in several of them.
Resume and recurring updates
- Resume (
resumeFromRunId) continues one interrupted run: paste its run or dataset id and the actor skips every tasker or review already collected there, so you don't pay twice. - Incremental mode (
incrementalMode) is for scheduled runs over the same cities and services. Each record is classifiedNEW,UPDATED(withchangedFields),UNCHANGED(suppressed and not billed unlessemitUnchangedis on),REAPPEAREDorEXPIRED(only after a run that scanned the whole scope without being resumed, and only withemitExpired).stateKeynames or shares the stored state. With incremental mode off, output is exactly as before. - EXPIRED rows are not currently limited by Max items: once a run has fully scanned its scope, every tracked record no longer found is returned as EXPIRED in that same run, on top of whatever NEW, UPDATED and REAPPEARED rows already used part of your Max items budget. On a monitoring campaign with a large tracked baseline and a small Max items, this can push and bill far more rows than Max items declares. If you need a hard per-run cap, turn off Emit expired records and read expirations less often, or budget for the full tracked baseline size rather than Max items when Emit expired records is on.
- Resume and incremental mode do not currently combine cleanly: a resumed run skips the records the interrupted run already returned but does not save them to the monitoring state either, so the next incremental run on the same state returns (and bills) them again as
NEW. Resuming an interrupted incremental run therefore does not avoid paying for those rows twice; expect them once more on the following scheduled run.
Send results into your apps (MCP connectors)
Optionally pipe results into the apps you already use through Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape, and it never changes the dataset.
- Authorize a connector once under Apify, Settings, API and Integrations (Notion, Linear, Airtable or Apify).
- Select it in the mcpConnectors field. If the picker is empty, you have not authorized a connector yet.
- For Notion, also set notionParentPageUrl to the URL or id of the page under which item pages are created.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search (cities and services) or url (tasker links or ids). |
locations | array | ["Portland, OR"] | US city names, one per entry (search mode). Matched to the source's own city pages automatically. |
services | array | ["furniture assembly", "tv mounting"] | Service categories (search mode); friendly names and source slugs both work. |
profileInputs | array | sample | Tasker links or numeric ids (url mode). |
urls | array | (none) | Alias for profileInputs, accepted under the name other Apify actors use for url mode. |
maxItems | integer | 20 | Stop after this many records (0 = no limit). Tasker and review records share this budget. |
includeProfiles | boolean | true | Search mode: fetch each tasker's full profile for rates and availability. Off = card-only pull, no rates. |
includeReviews | boolean | false | Also emit one record per public review, kind=review. In search mode it needs profile enrichment on: a tasker whose profile was not read gets no review rows. |
maxReviewsPerTasker | integer | 10 | How many reviews to ask for per tasker (max 100). Reviews are read in whole source pages and every review on a page read is returned, so a tasker can return more rows than this number (a recorded source page held 30 reviews, so 10 can yield 30). Max items still caps the whole run. |
includeCityReviews | boolean | false | Also emit the city pages' recent service testimonials, kind=city_review. |
resumeFromRunId | string | (none) | Continue one interrupted run, skipping records already collected there. |
incrementalMode | boolean | false | Turn on for daily or recurring monitoring: only new, updated and reappeared records are returned by default. |
stateKey | string | (none) | Name a monitoring campaign to keep its state stable, or deliberately share state across runs. |
emitUnchanged | boolean | false | Also return (and bill) records unchanged since the last run. |
emitExpired | boolean | false | Also return (and bill) records no longer found, once a run has fully scanned its scope. |
mcpConnectors | array | (none) | Optional: send results into apps you authorized under Integrations. |
notionParentPageUrl | string | (none) | Notion connector only: page under which records are created. |
maxNotifyListings | integer | 50 | Cap on items written to each connector per run. Does not affect the dataset. |
proxyConfiguration | object | Apify Proxy | Connection settings. |
Filters apply to search mode; url mode reads the taskers you name directly, and city and service fields are ignored there.
Output Example
Sample shape: values are illustrative placeholders, not from a live tasker.
{"kind": "tasker","recordId": "3000042","taskId": 3000042,"displayName": "Sample T.","citySlug": "portland","serviceSlug": "assemble-furniture","cityName": "Portland, OR","metroId": 1058,"serviceName": "Furniture Assembly","v3CategoryId": 33,"v3TaskTemplateId": 7,"averageRating": 4.9,"reviewsCount": 120,"tasksCount": 210,"elite": false,"bio": "Sample bio text describing experience with assembly and mounting work.","imageUrl": "https://www.taskrabbit.com/img/sample-card.jpg","source": "profile","slug": "sample-t--9","url": "https://www.taskrabbit.com/profile/sample-t--9","metroName": "Portland","hoursWorked": 812.5,"positiveRating": "98%","onDuty": true,"taskCountProfile": 512,"rabbitSinceYear": 2019,"vehicleType": "none","phoneNumberMasked": "XXXXXXXXXX99","description": "Sample profile description text.","avatarUrl": "https://www.taskrabbit.com/img/sample-avatar.jpg","categories": [{"categoryId": 33,"categoryName": "Furniture Assembly","focused": true,"hourlyRate": 42.0,"hourlyRateDisplay": "$42.00/hr","hourlyRateCurrency": "usd","posterRateDisplay": "$49.50/hr","serviceFeePercent": 15.0,"inDemand": true}],"totalReviewCount": 340,"ratingDistribution": { "1": 2, "2": 3, "3": 10, "4": 45, "5": 280 }}
Plan Requirement
Every route this actor reads answers openly with no special access requirement, so the default connection setting works out of the box on any plan that includes proxy access. Very large or very frequent runs may still benefit from a broader connection pool; adjust it under Connection if needed.
FAQ
How much does it cost?
You pay per record returned, with tasker and review rows sharing the same rate. The Pricing tab shows the current rates. Use Max items to cap the cost of a run whose EXPIRED rows are off (see the note below when Emit expired records is on).
Is it legal to scrape TaskRabbit?
This actor collects only publicly available tasker listing and profile data. You are responsible for how you use it: follow TaskRabbit's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Tasker photos, bios and reviews may carry personal or third-party rights beyond plain facts like a rate or a rating.
Can I get only new or changed taskers on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new, updated and reappeared records by default, and unchanged ones are not billed unless you turn on Emit unchanged records.
Why did an incremental run return far more records than Max items?
EXPIRED rows are not counted against Max items: once a run has fully scanned its scope, every tracked record from a prior run that is no longer found is returned as EXPIRED in the same run, however large the tracked baseline is. If you need a hard per-run cap, turn off Emit expired records, or plan for the tracked baseline size rather than Max items when it is on.
Why does a city only return a handful of taskers?
Each city and service pair carries up to 6 featured taskers, the same number the source itself shows there; there is no deeper public listing behind that page. Add more cities or services to widen coverage.
Why did my run fail instead of returning an empty dataset?
If the site refuses every request, or none of the given cities and services matched a real page, the run stops with a clear message so "no taskers found" is never confused with "nothing could be read". Check the city and service names, or try again in a few minutes for a connection problem.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
๐ More scrapers you might like
Pair this actor with these related scrapers from the same team:
| ๐จ Rover Pet Care Scraper Scrape Rover.com pet-care providers: sitter search by city, rates per stay type, ratings... | ๐ฑ Clutch Scraper Scrape Clutch company directories and profiles. Get names, ratings, review counts, hourly... |
| ๐งฉ Viagogo Scraper Scrape Viagogo events by artist, production, venue, city, category, or URL. Extract event... | ๐งฉ Padmapper Scraper Scrape Padmapper apartment rentals across US/CA cities: rent, beds, baths, sqft... |
| ๐ผ Superprof Scraper Scrape Superprof tutors by subject and location, or paste tutor URLs. One rich record per... | ๐งฉ Too Good To Go Scraper Scrape Too Good To Go (TGTG) stores and surprise bags by location or item: price, value... |
๐ Browse all abotapi scrapers
๐ฌ Support
- ๐ Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- ๐ ๏ธ Need another site, extra fields or a private build? Email contact@abotapi.com.
- โญ Enjoying it? A quick review on the actor page helps other users find it.