Taskrabbit Scraper [$1.90/1K💰] | Taskers by City + Service avatar

Taskrabbit Scraper [$1.90/1K💰] | Taskers by City + Service

Pricing

from $1.90 / 1,000 results

Go to Apify Store
Taskrabbit Scraper [$1.90/1K💰] | Taskers by City + Service

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

Ahmed Jasarevic

Maintained by Community

Actor 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 blobWhat 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 / linkUrlSection context
bff.location.{name, locationNameState, v3MetroId}City, state, metro id
bff.service.{name, v3CategoryId, v3TaskTemplateId}Service, category id, task-template id
bff.taskerCountTotal 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

  1. It works with plain curl. Geo pages return HTTP 200 with a normal desktop User-Agent — no Cloudflare challenge, no Turnstile, no bot-management wall. CheerioCrawler is sufficient; a browser would add roughly 50× the cost for zero extra data.
  2. The data is already in the HTML. Tasker objects are in the initial server payload, not fetched client-side. Nothing needs rendering.
  3. 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 → 500 on every query, including {__typename} and introspection
    • /next-api/trpc/* is the booking-funnel API — every probe returned tRPC NOT_FOUND, and the real tasker-list query is only reachable after a job draft (an address) is created, i.e. authenticated booking state
  4. 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 no content-encoding header — the Actor sniffs the 1f 8b magic bytes and inflates it) → https://www.taskrabbit.com/sitemaps/www.taskrabbit.com/geo_marketing_pages.xml.gz → 6,751 locations/{city}/{service} URLs
    • TaskRabbit's edge frequently returns 404 for 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' own bff.locations / bff.services blobs rather than scraped links, because scraped links also catch site-wide nav and footer entries whose combinations 404 and would waste the page budget. Cities are walked one at a time and the walk stops the moment maxRequestsPerCrawl is full. Both paths honour the cities, services and page-budget inputs, so the result is the same — only the number of list requests differs.
  5. 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, so profileUrl points 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

FieldTypeRequiredDefaultNotes
citiesarrayno[] (all 193)City slugs, e.g. los-angeles, chicago, austin. Leave empty for every city TaskRabbit lists.
servicesarrayno[] (all)Service slugs, e.g. plumbing, electrical-work, house-cleaning. Leave empty for every service available in the selected cities.
includeReviewsbooleannotrueAlso emit client reviews into the separate reviews dataset. Billed per review.
maxRequestsPerCrawlintegerno100Main 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.
startUrlsarrayno[]Explicit locations/{city}/{service} URLs. When set, city/service discovery is skipped entirely.
proxyobjectnouseApifyProxy: falseStandard Apify proxy picker.
maxTaskersPerPageintegerno50Safety cap on taskers taken per page. Hidden (advanced).
maxConcurrencyintegerno3Parallel page requests. Hidden (advanced).
requestHandlerTimeoutSecsintegerno60Per-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.

DatasetAliasContentsBilled as
Taskersdefaultone row per featured taskerautomatic default-dataset-item event
Reviewsreviewsone row per client reviewreview-added pay-per-event

Taskers dataset (default)

FieldDescription
taskerIdTaskRabbit's internal numeric id
taskerNameDisplay name
city, cityState, citySlug, metroIdLocation context of the page the tasker was listed on
service, serviceSlug, categoryId, taskTemplateIdService context
ratingAverage rating (0–5)
reviewCountTotal reviews received
tasksCompletedTotal tasks completed
isElitetrue if TaskRabbit marks them Elite
bioSelf-written description, control chars and NBSPs cleaned
photoUrlProfile photo
profileUrl / cityServiceUrlSource page (see Known limitations)
totalTaskersInCityServicebff.taskerCount — the size of the pool this page is a slice of
hourlyRateMin / hourlyRateMaxAlways null — see Known limitations
scrapedAtISO timestamp

Reviews dataset (reviews)

FieldDescription
reviewIdReview identifier
reviewerNameClient display name
city, service, categoryId, taskTemplateIdPage context, repeated on every row
ratingStar rating
reviewTextReview body — TaskRabbit's name appears inside the free text
serviceLinkUrlThe city × service page the review came from
scrapedAtISO 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 / services set; diff tasksCompleted and reviewCount to 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.


  • 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

  • maxRequestsPerCrawl is 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.
  • startUrls takes priority over cities and services. If both are supplied, discovery is skipped entirely and only the given pages are fetched.
  • includeReviews defaults to true, so a default run bills review events. Set it to false for a tasker-only run.
  • Empty cities / services means "everything", which is a very large surface (193 cities, 6,751 city × service pages). Always pair it with an explicit maxRequestsPerCrawl.
  • hourlyRateMin and hourlyRateMax are always null. Do not build pricing logic on them — TaskRabbit does not publish per-tasker rates publicly.
  • totalTaskersInCityService is 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 via city + service.
  • profileUrl is 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.


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