Taskrabbit Scraper [$1.90/1K💰] | Taskers by City + Service
Pricing
from $1.90 / 1,000 results
Taskrabbit Scraper [$1.90/1K💰] | Taskers by City + Service
Extract TaskRabbit tasker profiles and client reviews by city and service. Get names, ratings, review counts, tasks completed, Elite badges and bios across 6,751 city + service pages - no browser, no login, no proxy. Built for home-service lead generation and market research.
Pricing
from $1.90 / 1,000 results
Rating
0.0
(0)
Developer
Ahmed Jasarevic
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
TaskRabbit Scraper — Tasker Data by City and Service for Lead Gen and Market Research
Scrape TaskRabbit tasker profiles and client reviews by city × service — ratings, review counts, tasks completed, Elite badges, bios, photos and testimonial text across 6,751 published city × service pages.
Built for lead-gen teams, home-service franchises, gig-economy researchers and pricing-intelligence tools. No browser, no login, no proxy required — the whole run is plain static-HTML requests.
Main use cases
- Home-service lead lists — build a target list of top-rated taskers per city and service, ready for outreach
- Local competitor mapping — see who dominates assembly, plumbing, moving or cleaning in each metro
- Gig-economy and TaskRabbit market research — coverage maps across cities, service mix and Elite-badge concentration
- Service-demand analysis — rank metros by how deep TaskRabbit's tasker bench is for a given service
- Review mining — pull the client testimonials TaskRabbit publishes on each page, which name taskers in free text
- Franchise and territory planning — quantify the tasker pool available in a market before entering it
Data source: the server-rendered __NEXT_DATA__ JSON blob
This Actor does not render pages with a browser and does not touch TaskRabbit's internal booking or GraphQL APIs. It reads the server-rendered JSON that Next.js embeds in every geo-marketing page.
Endpoint
https://www.taskrabbit.com/locations/{citySlug}/{serviceSlug}
Example: https://www.taskrabbit.com/locations/los-angeles/plumbing
Each of those pages ships this blob in the raw HTML — no JS execution required:
<script id="__NEXT_DATA__" type="application/json">{ ... }</script>
Exact JSON path and fields used
props.pageProps.page.bff
| Field in the blob | What the Actor uses it for |
|---|---|
bff.featuredTaskers.taskers[] | The tasker rows — name, id, rating, review count, tasks count, Elite flag, bio, photo |
bff.featuredTaskers.header / linkUrl | Section context |
bff.location.{name, locationNameState, v3MetroId} | City, state, metro id |
bff.service.{name, v3CategoryId, v3TaskTemplateId} | Service, category id, task-template id |
bff.taskerCount | Total taskers available in that city × service (e.g. 3528) |
bff.reviews.reviews[] | Optional client reviews (name, rating, text, service link) |
bff.seo.{title, description} | Page SEO context |
Why this source was chosen
- It works with plain
curl. Geo pages returnHTTP 200with a normal desktop User-Agent — no Cloudflare challenge, no Turnstile, no bot-management wall.CheerioCrawleris sufficient; a browser would add roughly 50× the cost for zero extra data. - The data is already in the HTML. Tasker objects are in the initial server payload, not fetched client-side. Nothing needs rendering.
- The heavier internal APIs are a dead end and were deliberately rejected:
POST /api/v3/rabbits→403"Something is wrong with your browser settings" (anti-bot cookie gate)POST https://api.taskrabbit.com/graphql→500on every query, including{__typename}and introspection/next-api/trpc/*is the booking-funnel API — every probe returned tRPCNOT_FOUND, and the real tasker-list query is only reachable after a job draft (an address) is created, i.e. authenticated booking state
- Enumeration of city × service pages uses the sitemap, with a link-discovery fallback:
- Primary:
https://www.taskrabbit.com/sitemap.xml(served gzip-encoded in the body, with nocontent-encodingheader — the Actor sniffs the1f 8bmagic bytes and inflates it) →https://www.taskrabbit.com/sitemaps/www.taskrabbit.com/geo_marketing_pages.xml.gz→ 6,751locations/{city}/{service}URLs - TaskRabbit's edge frequently returns
404for the sitemap to datacenter IPs (including Apify's). When that happens the Actor switches to crawling the location index instead:/locations(193 cities) →/locations/{city}(that city's services) → the geo pages. City and service lists come from the pages' ownbff.locations/bff.servicesblobs rather than scraped links, because scraped links also catch site-wide nav and footer entries whose combinations404and would waste the page budget. Cities are walked one at a time and the walk stops the momentmaxRequestsPerCrawlis full. Both paths honour thecities,servicesand page-budget inputs, so the result is the same — only the number of list requests differs.
- Primary:
- There are no public tasker profile pages.
/profiles/{id},/tasker/{id}and/experts/{id}all return 404 or redirect to login. TaskRabbit deliberately does not expose a public per-tasker page, soprofileUrlpoints at the city × service page that publicly lists that tasker.
Net effect: the whole run is plain static-HTML requests with a realistic desktop User-Agent. No proxy is required for normal volumes.
Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
cities | array | no | [] (all 193) | City slugs, e.g. los-angeles, chicago, austin. Leave empty for every city TaskRabbit lists. |
services | array | no | [] (all) | Service slugs, e.g. plumbing, electrical-work, house-cleaning. Leave empty for every service available in the selected cities. |
includeReviews | boolean | no | true | Also emit client reviews into the separate reviews dataset. Billed per review. |
maxRequestsPerCrawl | integer | no | 100 | Main volume control. How many city × service pages to fetch. Each page yields taskers and up to 6 reviews, so 100 pages ≈ 500 taskers and ~550 reviews. |
startUrls | array | no | [] | Explicit locations/{city}/{service} URLs. When set, city/service discovery is skipped entirely. |
proxy | object | no | useApifyProxy: false | Standard Apify proxy picker. |
maxTaskersPerPage | integer | no | 50 | Safety cap on taskers taken per page. Hidden (advanced). |
maxConcurrency | integer | no | 3 | Parallel page requests. Hidden (advanced). |
requestHandlerTimeoutSecs | integer | no | 60 | Per-request timeout. Hidden (advanced). |
The three advanced limits are hidden from the input form on purpose — the defaults suit almost everyone. They are still accepted through the Apify API or the CLI if you need to tune them.
$apify call oMTaUiw6fwiHrg4Vd -i '{"cities":["los-angeles"],"maxRequestsPerCrawl":500}'
Output
Two separate datasets, each with its own table and schema in the Output tab.
| Dataset | Alias | Contents | Billed as |
|---|---|---|---|
| Taskers | default | one row per featured tasker | automatic default-dataset-item event |
| Reviews | reviews | one row per client review | review-added pay-per-event |
Taskers dataset (default)
| Field | Description |
|---|---|
taskerId | TaskRabbit's internal numeric id |
taskerName | Display name |
city, cityState, citySlug, metroId | Location context of the page the tasker was listed on |
service, serviceSlug, categoryId, taskTemplateId | Service context |
rating | Average rating (0–5) |
reviewCount | Total reviews received |
tasksCompleted | Total tasks completed |
isElite | true if TaskRabbit marks them Elite |
bio | Self-written description, control chars and NBSPs cleaned |
photoUrl | Profile photo |
profileUrl / cityServiceUrl | Source page (see Known limitations) |
totalTaskersInCityService | bff.taskerCount — the size of the pool this page is a slice of |
hourlyRateMin / hourlyRateMax | Always null — see Known limitations |
scrapedAt | ISO timestamp |
Reviews dataset (reviews)
| Field | Description |
|---|---|
reviewId | Review identifier |
reviewerName | Client display name |
city, service, categoryId, taskTemplateId | Page context, repeated on every row |
rating | Star rating |
reviewText | Review body — TaskRabbit's name appears inside the free text |
serviceLinkUrl | The city × service page the review came from |
scrapedAt | ISO timestamp |
Example input
Two metros, two services, modest page budget:
{"cities": ["los-angeles", "austin"],"services": ["plumbing", "furniture-assembly"],"maxRequestsPerCrawl": 40}
Broad sweep — 500 pages is roughly 2,500 taskers and 2,800 reviews:
{ "maxRequestsPerCrawl": 500 }
Every published city × service page (6,751 of them — needs a generous cap):
{ "maxRequestsPerCrawl": 5000, "maxConcurrency": 5 }
Single specific page, bypassing discovery:
{ "startUrls": ["https://www.taskrabbit.com/locations/chicago/plumbing"] }
Example output
Tasker row:
{"taskerId": "5923230","taskerName": "Alex R.","city": "Los Angeles","cityState": "CA","citySlug": "los-angeles","metroId": "9001","service": "Plumbing","serviceSlug": "plumbing","categoryId": "1042","taskTemplateId": "88123","rating": 4.9,"reviewCount": 312,"tasksCompleted": 640,"isElite": true,"bio": "Licensed plumber with 12 years of experience. Same-day appointments available.","photoUrl": "https://res.cloudinary.com/taskrabbit-com/image/upload/azshsq1zulzfymkvabel","profileUrl": "https://www.taskrabbit.com/locations/los-angeles/plumbing","totalTaskersInCityService": 3528,"hourlyRateMin": null,"hourlyRateMax": null,"scrapedAt": "2026-09-29T12:00:00.000Z"}
Review row:
{"reviewId": "88213","reviewerName": "Dana","city": "Los Angeles","cityState": "CA","service": "Furniture Assembly","categoryId": "1042","taskTemplateId": "88123","rating": 5,"reviewText": "Alex was fantastic — arrived early and put everything together in under an hour.","serviceLinkUrl": "https://www.taskrabbit.com/locations/los-angeles/furniture-assembly","scrapedAt": "2026-09-29T12:00:00.000Z"}
Run TaskRabbit monitoring on a schedule
Every Apify Actor is callable over HTTP, so recurring coverage maps and watchlists are straightforward:
- Weekly — same
cities/servicesset; difftasksCompletedandreviewCountto see which taskers are gaining traction - Monthly — sweep a new batch of cities to grow a national coverage map, keyed on
citySlug×serviceSlug - Per service line — one saved input per service category you sell into, so each gets its own dataset and its own schedule
- Push to your stack — Apify webhooks, Zapier, Make, Google Sheets and 100+ integrations fire on run completion; results export as JSON, CSV, Excel, XML, HTML or RSS
Because each page yields both taskers and reviews, one scheduled run refreshes two datasets at once.
Related Actors
- TaskRabbit Scraper (
crawlerbros/taskrabbit-scraper) — mode-based tasker extraction (search, by city, by category, by URL) with a dropdown city/service taxonomy - TaskRabbit Scraper (
solidcode/taskrabbit-scraper) — per-metro tasker rosters with five result sort modes - Freelancer Jobs Scraper — real-time project leads from the freelance marketplace side of the gig economy
- Angi Scraper — contractor leads, reviews and ratings from another home-services marketplace
- HomeAdvisor Scraper — home-improvement contractor lead lists from a second marketplace
FAQ
Why not use the official TaskRabbit API instead?
TaskRabbit's Developer Hub exposes one gated Partner API (developer.taskrabbit.com) covering Delivery (inherited from Dolly's PAPI) and a 2025-12-versioned Home Services platform for quoting and booking — Estimate, Availability, Bid, Book. There is no public self-serve API, no API key you can sign up for yourself, and no endpoint that returns a tasker roster for research. Everything this Actor collects is on public marketing pages.
What are the alternatives to this Actor?
- Browser-based scrapers — roughly 50× the cost per run, and they still have to defeat the same anti-bot cookie gate on
/api/v3/rabbits. - Scraping the internal GraphQL API — returns HTTP 500 on every query, including
{__typename}and full introspection. - Human research — the only other way to compile a multi-city tasker list.
Why are hourly rates always null?
TaskRabbit does not publish per-tasker hourly rates on any public surface. Rates are negotiated inside the login-walled booking flow, and /services/* pages only carry generic "starting at around $X per hour" marketing copy. The fields exist so downstream pricing models have a stable schema; real rate data would require a logged-in booking session.
How many taskers do I actually get per page?
About 5–6. featuredTaskers is a curated top slice of a much larger pool — the same page reports a taskerCount of 1,000–6,000, and that total is returned on every row as totalTaskersInCityService so you can gauge coverage. The full roster is only reachable through the login-walled booking funnel. Raise maxRequestsPerCrawl and vary services / cities to widen the net.
How do I get more reviews?
Raise the page count — that is the only lever. TaskRabbit publishes a fixed 6 testimonials per page, so expect roughly 6 × maxRequestsPerCrawl reviews. A measured 22-page run produced 127 reviews (~6 per page). Reviews are city-specific, so different cities do not duplicate each other.
Are reviews linked to individual taskers?
No. bff.reviews.reviews is always exactly 6 testimonials per city × service page — the payload has no cursor, page, offset, hasMore or totalCount field, and there is no public reviews API (/api/v3/reviews → 404, the GraphQL API → 500). taskerId is therefore null on review rows, and TaskRabbit's name appears only inside the free text. That is also why there is deliberately no "max reviews" input — such a control could only ever lower the 6.
Do I need a proxy or API key?
No. Everything used here is publicly served static HTML that returns HTTP 200 with a normal desktop User-Agent. proxy defaults to useApifyProxy: false. The sitemap often 404s from datacenter IPs — that is expected and harmless; the run log says Sitemap discovery failed (...); discovering via /locations instead. and the fallback takes over.
How much does it cost?
Tasker rows are billed at $0.0019–$0.002 per row, so roughly $1.90–$2.00 per 1,000 taskers. Reviews are a separate review-added event priced independently in the Apify Console, so includeReviews: false gives you a tasker-only run at tasker price. Free accounts are capped at 100 tasker rows per run.
For AI Agents & LLM Apps
Callable via the Apify MCP server and the Apify API. Returns tasker profiles (default dataset) and client reviews (second dataset).
Minimal valid input — 100 city × service pages, all cities and services:
{ "maxRequestsPerCrawl": 100 }
Targeted metro + service list:
{"cities": ["los-angeles", "austin"],"services": ["plumbing", "furniture-assembly"],"maxRequestsPerCrawl": 40}
Taskers only, cheapest run — drops every review event from the bill:
{ "cities": ["chicago"], "services": ["plumbing"], "includeReviews": false }
Exact pages, no discovery — startUrls bypasses the city/service walk entirely:
{ "startUrls": ["https://www.taskrabbit.com/locations/chicago/plumbing"] }
Output fields — taskers: taskerId, taskerName, city, cityState, citySlug, metroId, service, serviceSlug, categoryId, taskTemplateId, rating, reviewCount, tasksCompleted, isElite, bio, photoUrl, profileUrl, cityServiceUrl, totalTaskersInCityService, hourlyRateMin, hourlyRateMax, scrapedAt. Reviews: reviewId, reviewerName, city, cityState, service, categoryId, taskTemplateId, rating, reviewText, serviceLinkUrl, scrapedAt.
Behaviors an agent should know
maxRequestsPerCrawlis the only volume control. There is no page/pagination input and no "reviews per tasker" input. Expect roughly 5–6 taskers and 6 reviews per page.startUrlstakes priority overcitiesandservices. If both are supplied, discovery is skipped entirely and only the given pages are fetched.includeReviewsdefaults totrue, so a default run bills review events. Set it tofalsefor a tasker-only run.- Empty
cities/servicesmeans "everything", which is a very large surface (193 cities, 6,751 city × service pages). Always pair it with an explicitmaxRequestsPerCrawl. hourlyRateMinandhourlyRateMaxare alwaysnull. Do not build pricing logic on them — TaskRabbit does not publish per-tasker rates publicly.totalTaskersInCityServiceis the pool size, not the row count. It is often 1,000–6,000 while only 5–6 taskers are returned per page, so coverage is a small fraction of the pool.- Review rows have no
taskerId— the testimonials are page-level, not per-tasker. Join reviews to taskers only viacity+service. profileUrlis a city × service page, not a personal profile page. TaskRabbit exposes no public per-tasker URL; do not treat it as a direct profile link.- Free accounts are capped at 100 tasker rows per run regardless of
maxRequestsPerCrawl.
Billing model — pay per event: one result event per tasker row ($0.0019–$0.002) and one Review (review-added) event per review row, priced independently in the Console. The run stops cleanly if the user's charge budget is exhausted rather than producing unbilled rows.
Legal & Compliance Disclaimer
This Actor is an independent third-party tool. It is not affiliated with, endorsed by, sponsored by, or connected to TaskRabbit, IKEA, or Ingka Group.
It reads only publicly served static HTML from www.taskrabbit.com public geo-marketing pages. It does not log in, does not create a TaskRabbit account, does not submit bookings or job drafts, does not bypass the login wall, does not solve CAPTCHAs, and does not use proxies by default. It deliberately does not request the internal booking, GraphQL or tRPC endpoints.
Extracted tasker rows include display names, profile photos, self-written bios and public review counts, and review rows include client display names and free-text reviews. That is personal data. TaskRabbit publishes it publicly, but you are responsible for your own lawful basis for processing it — and for complying with TaskRabbit's Terms of Service and any messaging or outreach law that applies to you, including CAN-SPAM, TCPA, GDPR and UK GDPR. Do not use this data for unsolicited commercial outreach without a valid basis.
This Actor is a data-collection tool; it does not provide legal advice and makes no claim that any particular use is permitted.
SEO Keywords
taskrabbit scraper, taskrabbit data, taskrabbit api, taskrabbit tasker data, taskrabbit taskers by city, home service leads, gig economy data, taskrabbit lead generation, local service provider database, taskrabbit reviews, plumber leads, furniture assembly leads, moving company leads, handyman leads, contractor lead generation, home services market research, taskrabbit alternative, taskrabbit dataset, service provider directory data, taskrabbit city coverage map, elite tasker data, home improvement lead list, competitor mapping home services