"Thumbtack API" gets searched by two different people: a developer who wants to send customers to Thumbtack pros, and an analyst who wants a list of the pros. Thumbtack built an API for the first one.
A partner platform, not a data export
Thumbtack's Partner Platform documents two families of API. Marketplace integrations help customers find pros: widgets, Find Pros search by location and service, categories, keyword autocomplete, project requests, and reviews to display on a partner's site. Pro integrations help professionals manage leads, messages, profiles and reviews. Access is requested from Thumbtack rather than self-serve.
None of that is a directory export. For market analysis — how many plumbers, how rated, how busy — the public pages are the source, and that is what the Thumbtack Scraper reads. This project has not applied for partner access, so whether a partner integration could serve a research use was not tested.
Three quarters of the professionals are behind a button
A Thumbtack category page — /tx/austin/plumbers/ — renders seven to nine professionals and a "See more" control that loads the rest. Measured across 192 city-and-category pairs drawn from 192 categories and 160 cities:
| Where the professional was found | Count |
|---|---|
| On the visible page only | 243 |
| On the page and behind "See more" | 883 |
| Only behind "See more" | 1,172 |
| Unique professionals | 1,603 |
73.1% of the professionals exist only in that second list. A scraper that reads the rendered page alone delivers about a quarter of what Thumbtack holds for the same query.
Why ?page=2 is a trap
Thumbtack's category URLs accept ?page=2, return HTTP 200, and serve the same professionals as page 1 — on every page number. Nothing errors, so a scraper that paginates reports success while filling a dataset with repeats, and one that charges per row charges for each repeat. Coverage on Thumbtack comes from breadth instead: its sitemaps list 905,197 URLs, of which 406,500 are professional profiles, across 3,264 categories and 3,656 cities.
How many professionals a query really returns
About 14 per city and category, averaged across the Actor's 15 public example tasks, each sweeping a whole metro. Adding suburbs barely moves it: Austin alone returned 10, Austin plus five neighbouring cities returned 12, because Thumbtack serves nearly the same regional professionals for every city slug in a metro. Duplicates are removed before charging, so the sweep costs nothing extra — it just does not add much.
For volume, sweep categories rather than cities, or set profilesFromSitemap, which reads profile URLs directly: one request per professional, no overlap between cities.
{
"maxResults": 200,
"cities": ["tx/austin", "ca/san-diego"],
"categories": ["plumbers", "hvac"],
"scrapeProfiles": true,
"maxReviewsPerPro": 20,
"minRating": 4
}What a row contains, measured
| Field | Filled | Sample |
|---|---|---|
num_hires, avg_response_time_hours | 100% | 1,603 listings |
rating, num_reviews | 96.4% | 1,603 listings |
price_min | 27.8% | 1,603 listings |
is_top_pro true | 19.8% | 1,603 listings |
postal_code (the pro's own) | 90.9% | 110 profiles |
reviews, review_histogram | 88.2% | 110 profiles |
credentials | 87.3% | 110 profiles |
badges, is_sponsored | 0% | 1,603 listings |
Phone and email are not in the table because Thumbtack does not publish them: contact happens inside the platform. A tool that promises Thumbtack phone numbers is promising something that is not on the page. Review text is the opposite case — written by third parties, so a phone number or email typed inside one is removed and counted in redactions. How that compares with free-text neighbour posts is in the Nextdoor recommendations measurement.
Signals, not verifications
is_licensed_signal means Thumbtack displayed a licence badge, on 4.6% of 1,603 professionals. Its absence does not mean a professional is unlicensed, and is_background_checked has the same status. Neither should be resold as proof. For a signal that comes from a complaint file rather than a badge, compare what BBB publishes.
What Thumbtack's robots.txt and terms say
Thumbtack's terms list "Unauthorized Scraping" as prohibited: using automated tools, including robots, spiders or scrapers, to access the platform without Thumbtack's prior written consent. Its robots.txt allows the category and professional pages but disallows /api, /graphql, /profile and /reviews/ on www.thumbtack.com, and app.thumbtack.com's robots.txt disallows /graphql. The "See more" list and review pagination are served from that GraphQL endpoint, so the 73.1% above comes from a disallowed route. The Actor never submits a project request: paging further would require one, which would send a fake job to real professionals.
What a run costs
$0.0025 per professional, or $0.008 per professional with the full profile and reviews. There is no start event, error rows are not charged and duplicates are removed before charging, so a run that finds nothing costs zero — how pay-per-event pricing works. A thousand professionals cost $2.50, or $8.00 with profiles. The three local-services sources side by side are in the cluster overview.
