Thumbtack Scraper — Pro Listings, Reviews & Ratings
The professionals behind the See more button, too.
Public data on US service professionals listed on Thumbtack: rating, review count, jobs booked through Thumbtack, response time and Thumbtack's own signals. With profiles enabled, the full review text, the star histogram, credentials, specialties and the professional's own ZIP code.
oswaldocarabano/thumbtack-pros-scraper
{
"maxResults": 200,
"cities": ["tx/austin", "ca/san-diego"],
"categories": ["plumbers", "hvac"],
"scrapeProfiles": true,
"maxReviewsPerPro": 20,
"minRating": 4
}- Version
- v0.1.10
- Memory
- 4096 MB
- Browser
- none
- Proxy
- Residential, built in
Short answer
The Thumbtack Scraper exports public data on US service professionals from thumbtack.com: rating, review count, jobs booked through Thumbtack, average response time, Top Pro status and, with profiles enabled, the full review text, the 1-to-5 star histogram, credentials and the professional's own ZIP code. Across 192 city-and-category pairs it returned 1,603 unique professionals, 73.1% of whom appear only behind the page's "See more" control. Thumbtack publishes no phone numbers or email addresses, so the output carries none. Pricing is $0.0025 per professional and $0.008 per professional with the full profile, with no start fee.
Key points
- Thumbtack's category pages show seven to nine professionals; across 192 city-and-category pairs, 1,172 of 1,603 unique professionals (73.1%) appeared only behind "See more".
- Thumbtack's `?page=2` returns the same professionals as page 1 with HTTP 200, so a scraper advertising deep pagination on Thumbtack is charging for repeats.
- Rating and review count were filled on 96.4% of 1,603 professionals, and jobs booked and response time on 100%.
- Thumbtack does not publish professionals' phone numbers or email addresses, so no Thumbtack scraper can return them from the public pages.
- The professional's own ZIP code was on 90.9% of 110 profile pages, against the search ZIP that a listing row carries.
- `is_licensed_signal` means Thumbtack displayed a licence badge; its absence does not mean a professional is unlicensed.
- One city and category returned about 14 professionals on average across 15 example tasks, so volume comes from sweeping many categories rather than one deep query.
What it does
Public data on US service professionals listed on Thumbtack: rating, review count, jobs booked through Thumbtack, response time and Thumbtack's own signals. With profiles enabled, the full review text, the star histogram, credentials, specialties and the professional's own ZIP code.
{
"service_pk": "548554120258822149",
"url": "https://www.thumbtack.com/tx/austin/plumbers/example-plumbing/service/548554120258822149",
"business_name": "Example Plumbing",
"category": "plumbers",
"city": "austin",
"state": "tx",
"rating": 4.9,
"num_reviews": 87,
"num_hires": 142,
"avg_response_time_hours": 0.5,
"is_top_pro": true,
"is_licensed_signal": false,
"urgency_signals": ["RESPONSIVE"],
"postal_code": "78745",
"locality": "Austin",
"region": "TX",
"years_in_business": 12,
"num_employees": 4,
"is_background_checked": true,
"review_histogram": [
{ "stars": 5, "percent": "94%" },
{ "stars": 4, "percent": "5%" }
],
"redactions": 0,
"from_cache": false,
"fetched_at": "2026-09-18T22:14:28.498Z",
"data_age_hours": 0
}Why this one
The list behind See more
Thumbtack's visible page lists seven to nine professionals per city and category. The Thumbtack Scraper also reads the list the "See more" control loads, which is where 1,172 of 1,603 measured professionals were found and nowhere else. A scraper that reads only the rendered page delivers roughly a quarter of what Thumbtack holds for the same query.
Breadth from the sitemaps
Paging does not work on Thumbtack: `?page=2` repeats page 1. Coverage comes from Thumbtack's own sitemaps instead — 905,197 URLs, of which 406,500 are professional profiles, across 3,264 categories and 3,656 cities. `profilesFromSitemap` goes straight to the profile URLs, one request per professional with no overlap between cities.
Nothing billed before a row exists
No start event exists, error rows are not charged, and duplicates are removed before the meter runs. A run that finds nothing costs exactly zero, and 1,000 professionals cost $2.50, or $8.00 with full profiles and reviews.
Two empty columns admitted
`badges` and `is_sponsored` came back empty on all 1,603 rows measured. The columns exist because the fields exist upstream, and the README says plainly that they are not promised rather than listing them as features.
Use cases
- Prospect for anyone selling to contractors — software, insurance, financing, marketing — ranked by hires, rating and response time.
- Analyse a trade in a metro: how many plumbers or roofers compete, how they rate and how much work they win through Thumbtack.
- Mine reviews for one professional or a whole category, with rating, date, job type and the professional's reply.
- Monitor the reputation of home-service brands and franchise locations over time.
- Build a local directory from a category-by-city sweep, using the professional's own ZIP rather than the search ZIP.
Input
Every field has a default, and the defaults are deliberately small so a first run is cheap enough to inspect before you commit to a sweep. This table mirrors the Actor's own input schema field for field.
| Field | Default | What it does |
|---|---|---|
maxResultsinteger | 100 | Maximum professionalsCharged per professional delivered, never for an error row, and duplicates are removed before charging. Hard cap 50,000 per run. |
categoriesstring[] | [] | Service categoriesThumbtack category slugs such as `plumbers`, `house-cleaning` or `roofing`. Thumbtack publishes 3,264. Leave empty to sweep what the sitemap offers. |
citiesstring[] | [] | Cities`state/city` slugs such as `tx/austin`. Thumbtack publishes 3,656 cities. |
statesstring[] | [] | StatesTwo-letter codes such as `tx`, to narrow sitemap discovery without naming every city. |
discoverFromSitemapboolean | true | Discover pages from Thumbtack's sitemapHow the Actor gets coverage: 489,781 city-by-category landing pages and 406,500 professional pages in Thumbtack's sitemaps. `?page=2` returns page 1 again. |
profilesFromSitemapboolean | false | Go straight to professional pagesReads professionals from the 406,500 profile URLs: one request per professional, no overlap between cities, every profile field filled. Slower per row. |
scrapeProfilesboolean | false | Also open each professional's profile pagepersonal dataAdds introduction, real ZIP, credentials, specialties, hours, star histogram, photo count and Q&A. One extra request per professional, billed as the profile event. |
maxReviewsPerProinteger | 5 | Reviews per professionalThe profile page carries five; above that the Actor pages through the rest five at a time. Only applies when profiles are fetched. |
minRatinginteger | none | Minimum rating1 to 5. Professionals without a rating are excluded when set. |
minReviewsinteger | none | Minimum number of reviewsProfessionals without a review count are excluded when set. |
topProOnlyboolean | false | Only Top Pro professionalsThumbtack's Top Pro badge, shown on 19.8% of 1,603 measured professionals. |
licensedOnlyboolean | false | Only professionals showing a licence signalAbsence of the signal means Thumbtack did not show it, not that the professional is unlicensed. |
maxConcurrencyinteger | 4 | Maximum concurrencyLeave at 4. Listing pages weigh about 490 KB each, so more concurrency mostly buys memory pressure. |
useCacheboolean | true | Serve unchanged professionals from a shared cacheCached rows always declare their age with `from_cache`, `fetched_at` and `data_age_hours`. |
maxCacheAgeDaysinteger | 7 | Maximum age of cached data, in days0 forces a fresh fetch of everything. Empty means the default of 7 days. |
proxyConfigurationobject | none | ProxyThe Actor brings its own residential proxy. Set this only to route through your own. |
Output and fill rates
A field being in the schema is not the same as it having a value. The percentages below were counted on real runs; the sample sizes are in Measurements. Anything not listed here is not promised.
| Field | Filled | Meaning |
|---|---|---|
business_namestring | 100% | With `url` and `service_pk`, Thumbtack's id for the professional's service. |
num_hiresinteger | 100% | Jobs booked through Thumbtack. |
avg_response_time_hoursnumber | 100% | How fast the professional replies. |
business_factsstring[] | 100% | The short facts Thumbtack shows on the listing card. |
service_area_textstring | 97.3% | The service area as displayed. |
ratingnumber | 96.4% | With `num_reviews`. |
highlighted_reviewstring | 84.9% | The review excerpt Thumbtack features on the card. |
descriptionstring | 55.1% | The listing description. |
urgency_signalsstring[] | 35.2% | Thumbtack's codes such as `LICENSED`, `RESPONSIVE` and `LOW_PRICE`, 18 in all. |
price_minnumber | 27.8% | What Thumbtack publishes, when it publishes it. `price_unit` was 19.7%. |
is_top_proboolean | not measured | True on 19.8% of 1,603 professionals. |
is_licensed_signalboolean | not measured | True on 4.6%. A displayed signal, not a verification. |
postal_codestring | 90.9% | The professional's own ZIP, not the search ZIP. With `locality`, `region` and `schema_type`. Profile pages only, n=110. |
introductionstring | 88.2% | The professional's own pitch, in full. With `years_in_business` and `num_employees` at the same rate. Profile pages only. |
review_histogramobject[] | 88.2% | The 1-to-5 star breakdown. Profile pages only. |
reviewsobject[] | 88.2% | Full text, author, date, labels and the professional's reply. Profile pages only. |
credentialsobject[] | 87.3% | With `is_background_checked`. Profile pages only. |
business_hoursobject[] | 37.3% | Profile pages only. The professional's own Q&A in `faq` was 42.7%. |
badgesstring[] | 0% | Empty on all 1,603 measured rows, as was `is_sponsored`. Kept because the field exists upstream; not promised. |
from_cacheboolean | 100% | With `fetched_at` and `data_age_hours`. |
Every key is always present. A field that exists but is empty comes back as explicit null, so a parser never has to guess.
Datasets
Different record types go to different datasets, so the main table never carries columns that are blank on most rows.
defaultOne row per professional, deduplicated before charging, with the profile and reviews inline when profiles are fetched.billedError rowsA professional whose page failed, with the reason. Never a silent empty row.never billed
Pricing
Pay per delivered result. Charges are applied as each row is produced rather than in a lump at the end, so an aborted run bills only for what it actually gave you.
| Event | Price | Notes |
|---|---|---|
pro-listedProfessional | $0.0025 | One service professional with rating, review count, hires, response time and Thumbtack signals. Deduplicated before charging; error rows are never charged. |
pro-profileProfessional with full profile | $0.008 | The same row plus the profile page: full review text, the star histogram, credentials, specialties, years in business and the professional's real ZIP code. |
Measurements
Each figure is shown with the method that produced it. A benchmark without a method is a marketing claim wearing a number's clothes.
Listing fill-rate sample
1,603 unique professionals
192 city-and-category pairs drawn from 192 categories and 160 cities. Every listing-field rate on this page comes from that sample.
Profile fill-rate sample
110 profile pages, 0 errors
Every profile-field rate on this page comes from that sample.
Only behind See more
1,172 of 1,603 professionals (73.1%)
243 found on the visible page only, 883 on both, 1,172 only in the list "See more" loads, across the same 192 pairs.
Per city and category
about 14 professionals
Average across the 15 public example tasks, each sweeping a whole metro. Austin alone returned 10; Austin plus five neighbouring cities returned 12.
Sitemap inventory
905,197 URLs, 406,500 professional profiles
Counted from Thumbtack's own sitemaps, across 3,264 categories and 3,656 cities.
Speed
2.8 s per city-and-category pair, 1.9 s per profile
Mean latencies over the same contract measurement: 192 city-and-category pairs (landing page plus the list behind See more) and 110 profile pages. A repeat run of the same query was served 100% from cache with zero network requests.
What it will not do
Stated plainly so you can judge fit before spending anything.
- No phone numbers or email addresses: Thumbtack does not publish them, and contact happens inside its platform.
- About 14 professionals per city and category on average across 15 example tasks. Adding suburbs barely helps: Austin alone returned 10 and Austin plus five neighbours returned 12.
- `is_licensed_signal` (4.6%) and `is_background_checked` are Thumbtack's displayed signals, not verifications, and should not be resold as proof of licensing.
- `badges` and `is_sponsored` were empty on all 1,603 measured rows.
- The "See more" list and review pagination come from Thumbtack's GraphQL endpoint, and Thumbtack's robots.txt disallows `/graphql` on both www.thumbtack.com and app.thumbtack.com. The listing and profile pages themselves are not disallowed.
- Thumbtack's terms of service prohibit accessing the platform with automated tools without its prior written consent. Read them before relying on the output.
- Freshness over 24 hours and 7 days has not been measured; the 7-day cache window is a default rather than a result. Every row declares `data_age_hours`.
- A single run is capped at 50,000 professionals, and the default memory is 4,096 MB.
Privacy
- No phone numbers or email addresses are collected; Thumbtack does not publish them.
- Reviews are written by third parties. A phone number or email inside a review is removed, and the row records how many times in `redactions`.
- The output describes professionals acting in a business capacity on a marketplace where they advertise for customers.
- Removal requests: privacy@actorstack.dev
See also the data removal process.