# Thumbtack Pro Profile Scraper 🎯 (`easyapi/thumbtack-pro-profile-scraper`)

Extract detailed business information from Thumbtack Pro profiles including business details, reviews, pricing, credentials, and FAQs. Perfect for market research and competitor analysis.

- **URL**: https://beta-securitybyobscurity.apify.com/easyapi/thumbtack-pro-profile-scraper.md
- **Developed by:** [EasyApi](https://beta-securitybyobscurity.apify.com/easyapi) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 7 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

$19.99/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period.
You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#rental-actors

# README

## Thumbtack Pro Profile Scraper 🎯

Extract comprehensive business information from Thumbtack professional service provider profiles. This actor helps you gather detailed insights about businesses, their services, and customer feedback.

### Features ✨

- 📊 Comprehensive business information extraction
- ⭐ Customer reviews and ratings
- 💰 Pricing information
- 📅 Business hours and availability
- 📝 Detailed business introduction and overview
- 🏆 Top Pro status and achievements
- 💳 Payment methods
- 📱 Social media links
- ❓ FAQs and business credentials
- 📍 Service area coverage

### Use Cases 🎯

- Market research and competitor analysis
- Lead generation for B2B services
- Service provider verification
- Price comparison and market positioning
- Customer sentiment analysis

### Output 📤

The actor provides detailed JSON output including:

- Basic business information (name, introduction, rating)
- Pricing details and payment methods
- Operating hours and availability
- Customer reviews with detailed feedback
- Business credentials and achievements
- Social media presence
- Frequently asked questions
- Service area coverage

### Input Parameters 🎛️

The actor accepts the following input:

- `proUrls`: Array of Thumbtack pro profile URLs to scrape
- `maxItems`: Maximum number of items to scrape (optional)

### Limitations ⚠️

- Respects Thumbtack's robots.txt and terms of service
- Rate limiting implemented to prevent server overload
- Some profile information may be private or unavailable

### Tips 💡

- Use specific profile URLs for best results
- Consider setting appropriate maxItems limit for your needs
- Check output regularly for data quality

#### Input Example

A full explanation of an input example in JSON.

```json
 {
    "proUrls": [
        "https://www.thumbtack.com/ca/los-angeles/portrait-photographers/granli-photography/service/368212411530838020?service_pk=368212411530838020&encoded_answers=eyJzZl9wayI6IjQ4OTk0ODUxNjE2MjI0MDUxNiIsImFucyI6e319&project_pk=538565940530561044&lp_request_pk=538565960083218450&zip_code=90001&keyword_pk=225261462311840629&category_pks%5B0%5D=122327716174340365&category_pks%5B1%5D=122338311061807381&category_pks%5B2%5D=122338515982958874&category_pks%5B3%5D=156221686301327776&category_pk=122327716174340365&click_origin=pro%20list%2Fclick%20pro%20name&hideBack=true&ir_referrer=FRONT_DOOR_SEARCH"
    ]
}
```

#### Output sample

The results will be wrapped into a dataset which you can always find in the **Storage** tab. Here's an excerpt from the data you'd get if you apply the input parameters above:

And here is the same data but in JSON. You can choose in which format to download your data: JSON, JSONL, Excel spreadsheet, HTML table, CSV, or XML.

```json
[
    {
        "businessName": "Granli Photography",
        "introduction": "Hi there, please only contact me if you’re serious about booking me, since I have to pay for the contact regardless. \nThank you! \nA little bit about myself; I have almost 10 years of experience doing photography. Some of the highlites of my career; 2 Indian weddings, visits to shelters in India, Bangladesh and Nepal photographing children that are rescued from trafficking, 2 magazine covers of author and  presidential candidate Marianne Williamson. Regardless  of your  age, race, gender or nationality I’m enthusiastic and eager to capture  your essence. Before I started doing photography I worked as a fashion model, which is initially what sparked my interest in photography. \nI love what I do, and my  goal as a photographer  is to see and capture  your uniques beauty and the magic of the moment. \nBasic editing is included, more advanced photoshop work is $25.00 per picture. Everything can be negotiated. Thank you!i",
        "rating": "4.9",
        "totalReviews": "108",
        "startingPrice": "$300",
        "businessHours": [
            {
                "day": "Sun",
                "hours": "12:00 am - 11:59 pm"
            },
            {
                "day": "Mon",
                "hours": "12:00 am - 11:59 pm"
            },
            {
                "day": "Tues",
                "hours": "12:00 am - 11:59 pm"
            },
            {
                "day": "Wed",
                "hours": "12:00 am - 11:59 pm"
            },
            {
                "day": "Thurs",
                "hours": "12:00 am - 11:59 pm"
            },
            {
                "day": "Fri",
                "hours": "12:00 am - 11:59 pm"
            },
            {
                "day": "Sat",
                "hours": "12:00 am - 11:59 pm"
            }
        ],
        "paymentMethods": "This pro accepts payments via Apple Pay, Cash, Check, PayPal, Venmo, and Zelle.",
        "overview": [
            {
                "title": "topPro",
                "value": "Current Top Pro"
            },
            {
                "title": "trophy",
                "value": "Hired 154 times"
            },
            {
                "title": "location",
                "value": "9 similar jobs done near you"
            },
            {
                "title": "backgroundCheck",
                "value": "Background checked"
            },
            {
                "title": "profiles",
                "value": "1 employee"
            },
            {
                "title": "clock",
                "value": "9 years in business"
            }
        ],
        "socialMedia": [
            {
                "platform": "Instagram",
                "url": "https://www.thumbtack.com/websites/services/368212411530838020/instagram/redirect"
            }
        ],
        "topProYears": [
            "2024",
            "2023",
            "2022",
            "2021"
        ],
        "reviews": [
            {
                "author": "Suha A.",
                "rating": 5,
                "date": "Feb 21, 2024",
                "text": "Elizabeth was professional, friendly, timely, responsible and gave us the most beautiful photos for our special occasion!  I'm so happy with the results and highly recommend Elizabeth:)",
                "jobDetails": "Details: Bridal or baby shower • 50 - 99 guests • Indoors • Digital or online download • Physical proofs or prints • Flash drive"
            },
            {
                "author": "Alison K.",
                "rating": 5,
                "date": "Feb 16, 2024",
                "text": "I had the pleasure of hiring Elisabeth for my moms wedding. She truly went above and beyond all expectations. She not only followed all of our instructions but also added her own creative touch to capture the special day. \n\nShe was friendly, professional, and made everyone including the guests comfortable. Her attention to detail was impeccable, and her dedication to getting the perfect shot was evident in the stunning work she produced. \n\nThe photos turned out absolutely breathtaking, and we couldn’t be happier with the end result. I highly recommend this photographer for any wedding or special event. They will undoubtedly exceed your expectations and deliver exceptional work.",
                "jobDetails": "Details: Wedding • 25 - 49 guests • Indoors • Digital or online download"
            },
            {
                "author": "Kimberly C.",
                "rating": 5,
                "date": "Dec 13, 2024",
                "text": "Elisabeth was an absolute pleasure to work with! She arrived early and captured beautiful moments from our toy distribution and holiday festival. She sent over the photos promptly and was very responsive throughout the process. Highly recommend!",
                "jobDetails": "Details: Family or children's portrait • Candid (captured in the moment) • Outdoors • Digital or online download • My home, venue, etc."
            },
            {
                "author": "Sam R.",
                "rating": 5,
                "date": "Oct 10, 2024",
                "text": "I know this review is late but i still wanted to write a review even though i keep forgetting. I had my wedding in 2021, and this photographer came in a clutch for me. My person that was suppose to come take pictures for me canceled on me last minute and i had to hurry and find someone. Right away did she respond and was available asap for my wedding day. She came all the way to hesperia to save my day 🥰 still wont forget it. Her pictures were very nice, i got all of them on an usb drive, she had it mailed to me. She gave me choice to get some edited but i didnt ended up doing it if i remember correctly but its okay. I appreciated her hard work, she took amazing pictures of my guests, decoration and of us. Very sweet, respectful, and polite! I still do not forget that day with her! Highly recommend.",
                "jobDetails": "Details: Bridal portrait • Natural / environmental (photographed in an outdoor setting) • Outdoors • Album or photo book • Flash drive • My home, venue, etc."
            },
            {
                "author": "Victoria A.",
                "rating": 5,
                "date": "Sep 13, 2024",
                "text": "We had such an amazing experience, I was nervous since this was my first time with a photographer with my 2 kids. She was extremely patient with us and I am over the moon with our pictures, I can’t recommend her enough!",
                "jobDetails": "Details: Family or children's portrait • Natural / environmental (photographed in an outdoor setting) • Candid (captured in the moment) • Outdoors • Digital or online download • My home, venue, etc."
            }
        ],
        "faqs": [
            {
                "question": "What should the customer know about your pricing (e.g., discounts, fees)?",
                "answer": " I'm fair, and don't overcharge, or change my mind. The price I quote is the price you pay. It's important to me that you're happy with the pictures. \n\n"
            },
            {
                "question": "What is your typical process for working with a new customer?",
                "answer": "I'm friendly, flexible, give more than is expected and treat everyone with kindness, respect, patience and encouragement. "
            },
            {
                "question": "What education and/or training do you have that relates to your work?",
                "answer": "For many years I worked as a model on the other side of the camera, so I know what it’s like. Then I worked as an assistant to two successful photographers, where I learned about all the technical aspects of photography"
            },
            {
                "question": "How did you get started doing this type of work?",
                "answer": "My whole life I've loved taking pictures. A few years ago I got a professional camera and made it my career. "
            },
            {
                "question": "What types of customers have you worked with?",
                "answer": "Authors, actors, models, health coaches, yoga teachers, lawyers, couples getting married, families, children, babies, fashion designers, jewelry designers, politicians."
            },
            {
                "question": "Describe a recent project you are fond of. How long did it take?",
                "answer": "I was shooting a story for the British actor Adam Croasdell in Vasquez Canyon.  Love the way the the  dramatic landscape added so much to the shoot. Seamless merging of man and nature. "
            },
            {
                "question": "What advice would you give a customer looking to hire a provider in your area of work?",
                "answer": "Ask questions! Can he or she give you what you need, and make it a good experience? Personality is so important. "
            },
            {
                "question": "What questions should customers think through before talking to professionals about their project?",
                "answer": "Will we be a good fit? Can he or she give me what I want? Does he or she understand what I’m looking for?  Will he or she \"get me\"?"
            }
        ],
        "credentials": [
            {
                "title": "Background Check",
                "details": [
                    "Elisabeth Granli"
                ]
            }
        ],
        "serviceArea": ""
    }
]
```

# Actor input Schema

## `proUrls` (type: `array`):

List of Thumbtack pro profile URLs to scrape

## Actor input object example

```json
{
  "proUrls": [
    "https://www.thumbtack.com/ca/los-angeles/portrait-photographers/granli-photography/service/368212411530838020?service_pk=368212411530838020&encoded_answers=eyJzZl9wayI6IjQ4OTk0ODUxNjE2MjI0MDUxNiIsImFucyI6e319&project_pk=538565940530561044&lp_request_pk=538565960083218450&zip_code=90001&keyword_pk=225261462311840629&category_pks%5B0%5D=122327716174340365&category_pks%5B1%5D=122338311061807381&category_pks%5B2%5D=122338515982958874&category_pks%5B3%5D=156221686301327776&category_pk=122327716174340365&click_origin=pro%20list%2Fclick%20pro%20name&hideBack=true&ir_referrer=FRONT_DOOR_SEARCH"
  ]
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("easyapi/thumbtack-pro-profile-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("easyapi/thumbtack-pro-profile-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call easyapi/thumbtack-pro-profile-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=easyapi/thumbtack-pro-profile-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Thumbtack Pro Profile Scraper 🎯",
        "description": "Extract detailed business information from Thumbtack Pro profiles including business details, reviews, pricing, credentials, and FAQs. Perfect for market research and competitor analysis.",
        "version": "0.0",
        "x-build-id": "ELqFDZkHceX8PeCvR"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/easyapi~thumbtack-pro-profile-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-easyapi-thumbtack-pro-profile-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/easyapi~thumbtack-pro-profile-scraper/runs": {
            "post": {
                "operationId": "runs-sync-easyapi-thumbtack-pro-profile-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/easyapi~thumbtack-pro-profile-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-easyapi-thumbtack-pro-profile-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "proUrls"
                ],
                "properties": {
                    "proUrls": {
                        "title": "Pro Profile URLs",
                        "type": "array",
                        "description": "List of Thumbtack pro profile URLs to scrape",
                        "default": [
                            "https://www.thumbtack.com/ca/los-angeles/portrait-photographers/granli-photography/service/368212411530838020?service_pk=368212411530838020&encoded_answers=eyJzZl9wayI6IjQ4OTk0ODUxNjE2MjI0MDUxNiIsImFucyI6e319&project_pk=538565940530561044&lp_request_pk=538565960083218450&zip_code=90001&keyword_pk=225261462311840629&category_pks%5B0%5D=122327716174340365&category_pks%5B1%5D=122338311061807381&category_pks%5B2%5D=122338515982958874&category_pks%5B3%5D=156221686301327776&category_pk=122327716174340365&click_origin=pro%20list%2Fclick%20pro%20name&hideBack=true&ir_referrer=FRONT_DOOR_SEARCH"
                        ],
                        "items": {
                            "type": "string"
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
