# Thumbtack Phone Number Scraper - Verified Numbers (`scrapido/thumbtack-phone-number-scraper`) Actor

📞 Thumbtack Phone Number Scraper returns validated service pro numbers from keyword and location search. ✅ Country code, line type and carrier on every record. 🧰 Great for contractor lead generation & SaaS sales.

- **URL**: https://apify.com/scrapido/thumbtack-phone-number-scraper.md
- **Developed by:** [Scrapido](https://apify.com/scrapido) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### Thumbtack Phone Number Scraper 📞

**Thumbtack Phone Number Scraper** helps you extract phone numbers from Thumbtack profiles at scale. It’s ideal for lead generation, contact information extraction, and B2B prospecting—using your keywords and a country targeting filter. Instead of manual directory data mining, automate {phone number scraper} workflows with reliable, structured results.

***

### What Does Thumbtack Phone Number Scraper Do? 🤖

**Thumbtack Phone Number Scraper** scrapes phone numbers from Thumbtack bios, profiles, and post content. During a run, you provide **keywords**, an optional **location**, and a target **country** (to focus on the correct dialing format). The actor then extracts publicly available phone numbers, **filters** and **deduplicates** them, and **exports** each result into a dataset. Each item is labeled with the matching `keyword`, profile `title`, and the source `url`, making it easy to review leads or feed them into your workflow. It’s a fast way to automate contact information extraction and web scraping for local business leads.

***

### What Can Thumbtack Phone Number Scraper Extract? 📊

This actor captures phone leads and key context around where the phone number appears, so you can do name phone mapping and contact enrichment without manual cleanup.

| Data Type | Field Name | Description |
|---|---|---|
| Lead Discovery | `keyword` | Search term you provided that surfaced this profile/lead |
| Identity | `title` | Profile name or business title associated with the phone number |
| Context | `description` | Profile bio, summary, or post content where the phone number was found |
| Navigation | `url` | Direct link to the Thumbtack profile page |
| Contact | `phone_number` | Extracted phone number in the expected format for the targeted country |
| Location | `country` | Country name targeted for this lead extraction |
| Formatting | `dial_code` | Dial code associated with the targeted country |

***

#### Key Features of Thumbtack Phone Number Scraper ⚡

- ✅ **Keyword-driven lead extraction:** Uses your input keywords to surface relevant Thumbtack profiles for B2B prospecting and directory data mining.
- 🌍 **Location targeting (optional):** Filter results by `location` (for example, a city or region) to find local business leads.
- 📞 **Country dialing focus:** Select a country to target phone numbers with the correct dial code format for your outreach list.
- 🧠 **Smart max limit control:** Use the `maxPhoneNumbers` setting to stop after you’ve found enough results.
- 📊 **Structured dataset output:** Each scraped lead is exported with labeled fields like `title`, `description`, `url`, and `dial_code`.
- 💾 **Incremental saving:** Results are pushed during the run so you don’t lose progress if you stop early.
- 🔄 **Resume-friendly progress:** The actor maintains progress so you can continue later rather than starting over.
- 🛡️ **Proxy-ready scraping:** Includes built-in proxy support to help keep scraping stable at scale for contact information extraction.

***

### How to Use Thumbtack Phone Number Scraper 🚀

1. **Find the Actor** — Open the **Thumbtack Phone Number Scraper** in the Apify Console / Apify Store.
2. **Open the Input Tab** — Set your scraping settings in the actor’s input form.
3. **Add Keywords** — Enter one or more keywords related to the type of leads you want (e.g., “marketing”, “founder”).
4. **Set Country Targeting** — Choose the country whose phone numbers you want (dialing format support).
5. **(Optional) Add Location** — Narrow results to a specific city/region.
6. **Set Max Results** — Use `maxPhoneNumbers` to control how many leads you want per run.
7. **Start & Monitor** — Watch logs and open the dataset when the run completes (or during the run).

*No coding required.* ✅

***

### Thumbtack Phone Number Scraper Input Parameters 📋

```json
{
  "keywords": ["marketing", "founder"],
  "location": "",
  "country": "United Kingdom (+44)",
  "maxPhoneNumbers": 20
}
```

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `keywords` | array | ✅ Yes | `["marketing","founder"]` | Enter keywords to search for (for example, roles, industries, or services you want to target on Thumbtack). |
| `location` | string | No | `""` | Filter by location (for example, “London” or “California”). Leave empty for global search. |
| `country` | string | ✅ Yes | `United Kingdom (+44)` | Select the country to target for phone numbers (helps keep your outreach data consistent). |
| `maxPhoneNumbers` | integer | No | `20` | Stop scraping after this many phone numbers are found. Increasing this can extend scraping duration. |

***

### Thumbtack Phone Number Scraper Output Format 📦

```json
[
  {
    "keyword": "marketing",
    "title": "Acme Growth Studio",
    "description": "Performance marketing & lead generation services. Contact us to discuss your next campaign.",
    "url": "https://www.thumbtack.com/united-kingdom/london/marketing/acme-growth-studio/service/123456789",
    "phone_number": "+44 7700 900123",
    "country": "United Kingdom",
    "dial_code": "+44"
  },
  {
    "keyword": "founder",
    "title": "Jordan Clarke",
    "description": "Founder and consultant. I help local businesses improve conversions and customer outreach.",
    "url": "https://www.thumbtack.com/united-kingdom/manchester/business-consultant/jordan-clarke/service/987654321",
    "phone_number": "+44 7912 334567",
    "country": "United Kingdom",
    "dial_code": "+44"
  }
]
```

| Field | Label | Format | Description |
|---|---|---|---|
| `keyword` | Keyword | text | Search term used to discover the lead/profile. |
| `title` | Title | text | Profile name or business handle/title associated with the scraped phone number. |
| `description` | Description | text | Bio, summary, or post content associated with the lead. |
| `url` | Url | link | Source URL for the Thumbtack profile page. |
| `phone_number` | Phone Number | text | Extracted phone number for the targeted country. |
| `country` | Country | text | Country targeted for phone number extraction. |
| `dial_code` | Dial Code | text | Dial code tied to the targeted country selection. |

***

### 🎯 Use Cases of Thumbtack Phone Number Scraper

**B2B Lead Generation:** Build local business leads for outbound sales and prospecting pipelines using scraped phone number data and profile context.

**Email and Phone Enrichment:** Pair phone numbers with your existing contact data to improve match rates for name phone mapping and reverse lookup automation workflows.

**Directory Data Mining:** Mine public directory-style profile pages to assemble contact lists faster than manual web scraping.

**Local Business Prospecting:** Target specific industries with keywords and focus on the correct dialing format using country selection to keep your outreach organized.

**Sales Ops & CRM Enrichment:** Feed structured data into your CRM or spreadsheet so sales teams can segment leads by keyword and location context.

***

### How Much Will Thumbtack Phone Number Scraper Cost You? 💰

This actor is designed around a capped result workflow using **`maxPhoneNumbers`**. In practice, your cost and run length are influenced by how many phone numbers you request per run—higher limits can take longer. To keep spending predictable, set `maxPhoneNumbers` to the number of leads you actually need for lead generation and contact information extraction.

***

### Is It Legal to Scrape Thumbtack? ⚖️

This actor collects information only from **publicly available sources**. It does not access private or authenticated content. Scraping publicly available web data is often considered lawful, but you’re responsible for complying with Thumbtack’s Terms of Service and applicable privacy and anti-spam regulations (including GDPR/CCPA where relevant). Always use extracted data responsibly for legitimate purposes like research, marketing, and recruitment. For questions or concerns, contact <scrapidocontact@gmail.com>.

***

### Thumbtack Phone Number Scraper Input Parameters 📋

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `keywords` | array | ✅ Yes | `["marketing","founder"]` | Enter keywords to search for (e.g., job titles, industries, services). |
| `location` | string | No | `""` | Filter by location (leave empty for global search). |
| `country` | string | ✅ Yes | `United Kingdom (+44)` | Select the country to target for phone numbers. |
| `maxPhoneNumbers` | integer | No | `20` | Stop scraping after this many phone numbers are found. |

***

### During the Actor Run ⏱️

You’ll see live progress in the Apify Console while results are pushed to the dataset incrementally. The actor processes by keyword and stops once it reaches `maxPhoneNumbers`. If you get fewer leads than expected, broaden your keywords or adjust country targeting and (optionally) location filters.

***

### Final Note ✉️

Get better leads faster with **Thumbtack Phone Number Scraper**—built for automation, structured exports, and scalable web scraping. If you need help or custom adjustments, reach out at <scrapidocontact@gmail.com>.

***

### FAQ — Thumbtack Phone Number Scraper ❓

#### What does the Thumbtack Phone Number Scraper look for?

It scrapes phone numbers from Thumbtack bios, profiles, and post content. You guide the discovery with the `keywords` you provide, optionally refine with `location`, and focus extraction using the selected `country` dialing target.

#### How do keywords and location targeting affect results?

Keywords determine which profiles are surfaced for extraction, and location can further narrow the set to a specific city or region. If you receive fewer results than expected, try broader or alternative keywords and consider clearing or changing the `location` filter.

#### Can I limit the number of phone numbers returned?

Yes. Use `maxPhoneNumbers` to stop scraping after the actor finds that many phone numbers. Increasing the limit can extend the scraping duration.

#### What does the dataset contain after the run?

The actor saves results to the **Thumbtack Phone Numbers Dataset** with a “Scraped Phone Numbers” view, including fields in this order: `keyword`, `title`, `description`, `url`, `phone_number`, `country`, `dial_code`. This makes it easy to analyze leads by keyword and follow source links.

#### Is it legal to scrape Thumbtack phone numbers?

The actor only uses publicly available sources and does not access private or authenticated data. You must still comply with Thumbtack’s Terms of Service and relevant privacy/anti-spam laws. For concerns or guidance, contact <scrapidocontact@gmail.com>.

#### How can I increase my yield for phone number scraper use cases?

If results are fewer than expected, adjust by using broader keywords, changing the country targeting, or modifying/removing the location filter. This is especially helpful for directory data mining and local business leads where public listing density varies.

***

### 🆘 Support & Feedback

Need support, a bug report, or a custom feature request for **Thumbtack Phone Number Scraper**? Contact <scrapidocontact@gmail.com>. 🚀

### Multiple Phone Type

**Phone Types** replaces the old single Number Type choice: select as many kinds
of line as you want and the run collects all of them.

| Type | Kept when the number is |
| --- | --- |
| Mobile | A confirmed mobile |
| Landline | A confirmed fixed line |
| Toll-Free | A freephone number |
| VoIP | An internet-telephony number |
| Premium-Rate | A premium-rate number |
| Shared-Cost | A shared-cost number |

Leave it empty for every type. Each number is checked against its *real* line
type before being kept, so the filter is enforced rather than merely requested.
Numbers on ranges where mobile and landline genuinely cannot be told apart (the
US, Canada and Mexico) are kept rather than silently dropped - discarding them
would quietly lose good leads.

### Outreach links

| Field | Meaning |
| --- | --- |
| `telLink` | A clickable `tel:` link, so a row can be dialled straight from a spreadsheet or CRM |
| `whatsappLink` | A `wa.me` chat link, or empty for a confirmed landline or a number that failed validation |
| `whatsappCapable` | Whether the number is on a line WhatsApp can run on |

`whatsappCapable` is a plain yes/no you can filter on. It never claims the
person actually uses WhatsApp - only that the number is of a kind that could.
Switch the links off with **Include WhatsApp links**; the capability flag is
still reported.

# Actor input Schema

## `keywords` (type: `array`):

Enter keywords to search for (e.g., 'Target Keyword').

## `location` (type: `string`):

Filter by location (e.g., 'London', 'California'). Leave empty for global search.

## `country` (type: `string`):

Select the country to target for phone numbers.

## `maxPhoneNumbers` (type: `integer`):

Stop scraping after this many phone numbers are found. Setting a higher limit extends the scraping duration.

## `numberType` (type: `string`):

Restrict results to a specific line type, classified offline via libphonenumber. Any keeps every valid match.

## `phoneTypes` (type: `array`):

Which kinds of line to collect. Pick as many as you like - each number is checked against its real line type before it is kept. Leave empty for every type. Numbers on ranges where mobile and landline cannot be told apart (the US, Canada and Mexico) are always kept rather than silently dropped.

## `includeWhatsappLinks` (type: `boolean`):

Add a ready-made wa.me chat link for numbers on a line WhatsApp can run on. The link means the number is in a form WhatsApp accepts - not proof that an account exists.

## Actor input object example

```json
{
  "keywords": [
    "contractor",
    "photographer"
  ],
  "country": "United States (+1)",
  "maxPhoneNumbers": 20,
  "numberType": "Any",
  "phoneTypes": [
    "Mobile"
  ],
  "includeWhatsappLinks": true
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# 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 = {
    "keywords": [
        "contractor",
        "photographer"
    ],
    "phoneTypes": [
        "Mobile"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapido/thumbtack-phone-number-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 = {
    "keywords": [
        "contractor",
        "photographer",
    ],
    "phoneTypes": ["Mobile"],
}

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

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

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

```

## CLI example

```bash
echo '{
  "keywords": [
    "contractor",
    "photographer"
  ],
  "phoneTypes": [
    "Mobile"
  ]
}' |
apify call scrapido/thumbtack-phone-number-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapido/thumbtack-phone-number-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/TmCQ8fKesDbVU3txv/builds/clKeKC0J9ot9gJz2P/openapi.json
