# TaxBuzz Scraper — Tax Preparers, CPAs & Accountant Leads (`scrapesage/taxbuzz-scraper`) Actor

Scrape TaxBuzz for tax & accounting professionals by location: CPAs, tax preparers, enrolled agents, tax attorneys, accountants & bookkeepers with direct contact email, phone, firm, address, specialties, rating, reviews & a lead score. Monitoring mode. No login, no API key, no browser.

- **URL**: https://apify.com/scrapesage/taxbuzz-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (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 $8.00 / 1,000 tax professional records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## TaxBuzz Scraper — Tax Preparers, CPAs & Accountant Leads (Emails, Phones & Reviews)

Extract **complete tax & accounting professional data from TaxBuzz** — CPAs, tax preparers, enrolled agents, tax attorneys, accountants and bookkeepers in any US city. Every record ships with a **direct contact email and phone**, the firm name, full street address, specialties, star rating and review count — turning the largest US tax-pro directory into a clean, ready-to-use **B2B lead list**.

No login, no cookies, no browser — fast JSON-grade extraction with a built-in retry on transient blocks.

### Why this TaxBuzz scraper?

Most "accountant lead" tools scrape Google Maps and hand you a name and a phone number. This actor pulls every field TaxBuzz exposes — including the **verified contact email that sits right on each listing** — and ships the richest dataset in the category:

| Data | Google-Maps lead tools | This actor |
|---|---|---|
| Direct contact **email** | ❌ needs a website crawl | ✅ on the listing |
| Phone | ✅ | ✅ |
| Firm / business name | partial | ✅ |
| Designation (CPA, EA, Tax Attorney, Bookkeeper…) | ❌ | ✅ |
| Specialties (Tax Planning, Bookkeeping, Audit, Payroll…) | ❌ | ✅ |
| Star rating + review count | ✅ | ✅ |
| Full street address + extra office locations | partial | ✅ opt-in |
| Client review text (rating, date, body) | ❌ | ✅ opt-in |
| Website + social links | partial | ✅ opt-in |
| Lead score (0–100) | ❌ | ✅ |
| Website email/phone enrichment | ❌ | ✅ opt-in |
| Monitoring mode (only new pros) | ❌ | ✅ |

### Use cases

- **Lead generation** — tax & accounting firms are high-value buyers for SaaS, fintech, payroll, lending, insurance and professional services. Filter by designation, rating and specialty and reach them directly with the listing **email** and **phone**.
- **Sales prospecting for tax/accounting software** — build targeted lists of independent CPAs, EAs and bookkeepers by city for practice-management, tax-prep, bookkeeping and client-portal tools.
- **Market & competitor mapping** — count and profile tax pros by city, designation, rating and specialty to size territories and spot underserved markets.
- **Recruiting & M&A** — find practice owners and firms by location for staffing, acquisition or partnership outreach.
- **Directory & data enrichment** — append firm, designation, specialty and contact data to an existing list of accountants.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up) — the free plan is enough to try this actor.
2. Open the **TaxBuzz Scraper**, choose designations (e.g. `cpa`, `tax-preparer`) and locations (e.g. `New York, NY`), and click **Start**.
3. Watch professionals stream into the dataset table.
4. **Export** as JSON, CSV, Excel, XML, or RSS — or pull results programmatically via the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "mode": "search",
    "designations": ["cpa", "tax-preparer"],
    "locations": ["New York, NY", "Los Angeles, CA"],
    "maxResults": 200,
    "includeProfileDetails": true,
    "includeReviews": false,
    "enrichContactEmails": false,
    "withEmailOnly": true,
    "monitorMode": false
}
````

- **mode** — `search` (designations × locations) or `startUrls` (paste TaxBuzz URLs).
- **designations** — one per row: `tax-preparer`, `cpa`, `enrolled-agent`, `tax-attorney`, `accountant`, `bookkeeper`.
- **locations** — US cities as `City, ST` (`New York, NY`, `Houston, Texas`). TaxBuzz listings are city-based, so include a city.
- **startUrls** — TaxBuzz profile URLs (`…/find-the-best-cpa/<state>/<city>/<slug>`) or listing URLs (`…/find-the-best-cpa/<state>/<city>`). Auto-detected and routed.
- **maxResults** — cap on professionals for the whole run (listings paginate automatically).
- **includeProfileDetails** *(default true)* — open each profile for the full street address, extra office locations, website, socials and total review count.
- **includeReviews** *(default false)* — also output client review records (rating, author, date, text).
- **enrichContactEmails** *(default false)* — crawl the pro's own website (home + contact/about) for extra emails, phones and socials. TaxBuzz already supplies a direct email on most listings.
- **withEmailOnly / withPhoneOnly / minRating** — output filters.
- **monitorMode** *(default false)* — emit ONLY professionals (and reviews) not seen in previous runs. Pairs with Apify Schedules.

### Output

One record per professional (`type: "professional"`), plus optional review records (`type: "review"`):

```json
{
    "type": "professional",
    "designation": "cpa",
    "designationLabel": "CPA",
    "name": "Anthony Apodaca",
    "firmName": "Apodaca CPA",
    "profileUrl": "https://www.taxbuzz.com/find-the-best-cpa/california/monrovia/anthony-apodaca",
    "email": "anthony@apodaca-cpa.com",
    "phone": "(626) 305-4220",
    "city": "Monrovia",
    "state": "CA",
    "zip": "91016",
    "fullAddress": "123 E Foothill Blvd, Monrovia, CA 91016",
    "rating": 5,
    "reviewCount": 1,
    "specialties": ["Tax Planning", "Tax Preparation", "Bookkeeping"],
    "website": "https://www.apodaca-cpa.com",
    "socialLinks": { "linkedin": "https://www.linkedin.com/in/anthonyapodaca" },
    "imageUrl": "https://www.taxbuzz.com/...jpg",
    "searchDesignation": "cpa",
    "searchLocation": "Los Angeles, CA",
    "leadScore": 88,
    "scrapedAt": "2026-06-15T12:00:00.000Z"
}
```

### Automate & schedule

Run this actor on autopilot and pull results into your own stack:

- **[Apify API](https://docs.apify.com/api/v2)** — start runs, fetch datasets, and manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[apify-client for Python](https://docs.apify.com/api/client/python/)** — official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)** — run it daily/weekly with **monitoring mode** to capture only newly listed tax pros in a city; perfect for lead pipelines.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** — trigger downstream actions (CRM import, Slack alert, email sequence) the moment a run finishes.

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

const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });

const run = await client.actor('scrapesage/taxbuzz-scraper').call({
    mode: 'search',
    designations: ['cpa', 'enrolled-agent'],
    locations: ['Chicago, IL'],
    maxResults: 300,
    withEmailOnly: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} tax & accounting leads`);
```

### Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** — multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** — push new tax-pro leads straight into your CRM.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** — get notified when a monitored city gets new professionals.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** — auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** — pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)** — trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** — ask your assistant to "find CPAs in Austin with reviews and list their emails" and let it run this scraper for you.

### More scrapers from scrapesage

Build a complete **professional-services & B2B lead-gen stack**:

- **[FindLaw Scraper](https://apify.com/scrapesage/findlaw-scraper)** — lawyers, law firms and legal leads.
- **[Financial Advisor & Broker Scraper](https://apify.com/scrapesage/financial-advisor-scraper)** — advisors and brokers from FINRA + SEC.
- **[Healthgrades Scraper](https://apify.com/scrapesage/healthgrades-scraper)** — doctors, reviews and provider leads.
- **[WebMD Scraper](https://apify.com/scrapesage/webmd-scraper)** — doctors, reviews and provider leads.
- **[Insurance Agent Scraper](https://apify.com/scrapesage/insurance-agent-scraper)** — State Farm & Farmers agent leads.
- **[US Business Formation Scraper](https://apify.com/scrapesage/us-business-formation-scraper)** — new LLC & company leads.
- **[Companies House Scraper](https://apify.com/scrapesage/companies-house-scraper)** — UK companies, directors and PSCs.
- **[Bark Scraper](https://apify.com/scrapesage/bark-scraper)** — local service-provider leads.

### Tips

- **Cover a metro fully**: add nearby cities to `locations` (e.g. `Brooklyn, NY`, `Queens, NY`) — TaxBuzz lists each pro under their own city.
- **Faster runs**: turn off `includeProfileDetails` for a listing-only pass — it still includes name, firm, city, phone, **email**, rating and specialties.
- **Cost control**: profile and website-enrichment calls only fire when enabled, and `deduplicateProfiles` skips overlaps across searches.
- **Recurring monitoring**: combine [Schedules](https://docs.apify.com/platform/schedules) with `monitorMode` to capture only newly listed professionals over time.

### FAQ

**How do I scrape tax preparers or CPAs for a specific city?** Put the city in `locations` as `City, ST` (e.g. `Dallas, TX`) and choose one or more `designations` (`cpa`, `tax-preparer`, `enrolled-agent`, `tax-attorney`, `accountant`, `bookkeeper`).

**Where do the emails come from?** TaxBuzz publishes a contact email on most professional listings — this actor reads that public email directly, so no website crawl is needed. With `enrichContactEmails` on, it can additionally crawl the pro's own website for more contacts.

**Can I export to Google Sheets, CSV, or Excel?** Yes — one click in the dataset view, or automatically on every run via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**How do I get only new professionals over time?** Turn on `monitorMode` and run on a [Schedule](https://docs.apify.com/platform/schedules) — each run returns only pros not seen before.

**Is scraping TaxBuzz legal?** This actor collects publicly available data only. You are responsible for using the data in compliance with applicable laws (GDPR/CCPA for personal data) and TaxBuzz's terms.

**A field is null — why?** Some listings genuinely omit a phone, website or rating. Fields are `null` only when the data doesn't exist, not because the scraper skipped them.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome — this actor is actively maintained.

# Actor input Schema

## `mode` (type: `string`):

Search builds a list from designations × locations. Start URLs scrapes specific TaxBuzz profile or listing URLs you paste in.

## `designations` (type: `array`):

Which kinds of tax/accounting professionals to pull. One per row. Allowed: tax-preparer, cpa, enrolled-agent, tax-attorney, accountant, bookkeeper. (Search mode.)

## `locations` (type: `array`):

US cities to search, as "City, ST" — e.g. "New York, NY", "Los Angeles, CA", "Houston, Texas". TaxBuzz listings are city-based, so a city is required. One per row. (Search mode.)

## `startUrls` (type: `array`):

TaxBuzz URLs to scrape directly: profile URLs (…/find-the-best-<designation>/<state>/<city>/<slug>) or listing URLs (…/find-the-best-<designation>/<state>/<city>). Auto-detected and routed. One per row. (Start URLs mode.)

## `maxResults` (type: `integer`):

Cap on professional records across the whole run. Listings are paginated automatically until this cap or the city is exhausted.

## `includeProfileDetails` (type: `boolean`):

Open each professional's profile page for the richer record: full street address, all office locations, website, social links, total review count and services. One extra request per professional. Turn off for a faster, listing-only run (which already includes name, firm, city, phone, email, rating and specialties).

## `includeReviews` (type: `boolean`):

Also output client review records (type `review`) parsed from each profile page: rating, author, date and text. In monitoring mode only NEW reviews are returned.

## `maxReviewsPerProfile` (type: `integer`):

How many reviews to output per professional when 'Include client reviews' is on.

## `enrichContactEmails` (type: `boolean`):

Opt-in extra lead enrichment: crawl each professional's own website (home + contact/about) for additional emails, phones and social links. Only runs for professionals that list a website. TaxBuzz already supplies a direct contact email on most listings.

## `withEmailOnly` (type: `boolean`):

Output only professionals that have a contact email (from TaxBuzz or, if enabled, the website crawl).

## `withPhoneOnly` (type: `boolean`):

Output only professionals that have a phone number.

## `minRating` (type: `integer`):

Only output professionals with at least this star rating (0–5). 0 = no rating filter.

## `deduplicateProfiles` (type: `boolean`):

Skip a professional already emitted in this run (by profile URL) — useful when several searches overlap.

## `monitorMode` (type: `boolean`):

Remember what was already returned and emit ONLY records not seen in previous runs (new professionals, and new reviews per profile). Pairs with Apify Schedules to track new listings over time.

## `monitorStoreName` (type: `string`):

Named key-value store that holds the 'already seen' ids for monitoring mode. Use a different name per tracked search to keep their histories separate.

## `maxConcurrency` (type: `integer`):

Maximum parallel requests for profile/enrichment fetches. Lower it for very large runs if you see transient blocks; raise it for speed.

## `proxyConfiguration` (type: `object`):

Proxy settings. TaxBuzz works through the default Apify datacenter proxy (blocked requests retry automatically on a fresh IP). Switch to Residential for the most consistent results on very large runs.

## Actor input object example

```json
{
  "mode": "search",
  "designations": [
    "tax-preparer"
  ],
  "locations": [
    "New York, NY"
  ],
  "maxResults": 100,
  "includeProfileDetails": true,
  "includeReviews": false,
  "maxReviewsPerProfile": 20,
  "enrichContactEmails": false,
  "withEmailOnly": false,
  "withPhoneOnly": false,
  "minRating": 0,
  "deduplicateProfiles": true,
  "monitorMode": false,
  "monitorStoreName": "taxbuzz-monitor",
  "maxConcurrency": 6,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped records in the default dataset. Professional rows carry the full profile, a direct contact email/phone and a lead score; review rows carry their own rating and text.

# 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 = {
    "designations": [
        "tax-preparer"
    ],
    "locations": [
        "New York, NY"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/taxbuzz-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 = {
    "designations": ["tax-preparer"],
    "locations": ["New York, NY"],
}

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/taxbuzz-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 '{
  "designations": [
    "tax-preparer"
  ],
  "locations": [
    "New York, NY"
  ]
}' |
apify call scrapesage/taxbuzz-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "TaxBuzz Scraper — Tax Preparers, CPAs & Accountant Leads",
        "description": "Scrape TaxBuzz for tax & accounting professionals by location: CPAs, tax preparers, enrolled agents, tax attorneys, accountants & bookkeepers with direct contact email, phone, firm, address, specialties, rating, reviews & a lead score. Monitoring mode. No login, no API key, no browser.",
        "version": "0.1",
        "x-build-id": "JVkvLW4mjal1n1gHo"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapesage~taxbuzz-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapesage-taxbuzz-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/scrapesage~taxbuzz-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapesage-taxbuzz-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/scrapesage~taxbuzz-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapesage-taxbuzz-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": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "What to scrape",
                        "enum": [
                            "search",
                            "startUrls"
                        ],
                        "type": "string",
                        "description": "Search builds a list from designations × locations. Start URLs scrapes specific TaxBuzz profile or listing URLs you paste in.",
                        "default": "search"
                    },
                    "designations": {
                        "title": "Designations",
                        "type": "array",
                        "description": "Which kinds of tax/accounting professionals to pull. One per row. Allowed: tax-preparer, cpa, enrolled-agent, tax-attorney, accountant, bookkeeper. (Search mode.)",
                        "items": {
                            "type": "string"
                        }
                    },
                    "locations": {
                        "title": "Locations",
                        "type": "array",
                        "description": "US cities to search, as \"City, ST\" — e.g. \"New York, NY\", \"Los Angeles, CA\", \"Houston, Texas\". TaxBuzz listings are city-based, so a city is required. One per row. (Search mode.)",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Start URLs (TaxBuzz profile or listing URLs)",
                        "type": "array",
                        "description": "TaxBuzz URLs to scrape directly: profile URLs (…/find-the-best-<designation>/<state>/<city>/<slug>) or listing URLs (…/find-the-best-<designation>/<state>/<city>). Auto-detected and routed. One per row. (Start URLs mode.)",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "Max results (professionals)",
                        "minimum": 1,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Cap on professional records across the whole run. Listings are paginated automatically until this cap or the city is exhausted.",
                        "default": 100
                    },
                    "includeProfileDetails": {
                        "title": "Include full profiles (street address, website, total reviews)",
                        "type": "boolean",
                        "description": "Open each professional's profile page for the richer record: full street address, all office locations, website, social links, total review count and services. One extra request per professional. Turn off for a faster, listing-only run (which already includes name, firm, city, phone, email, rating and specialties).",
                        "default": true
                    },
                    "includeReviews": {
                        "title": "Include client reviews",
                        "type": "boolean",
                        "description": "Also output client review records (type `review`) parsed from each profile page: rating, author, date and text. In monitoring mode only NEW reviews are returned.",
                        "default": false
                    },
                    "maxReviewsPerProfile": {
                        "title": "Max reviews per professional",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "How many reviews to output per professional when 'Include client reviews' is on.",
                        "default": 20
                    },
                    "enrichContactEmails": {
                        "title": "Enrich contacts from the professional's website",
                        "type": "boolean",
                        "description": "Opt-in extra lead enrichment: crawl each professional's own website (home + contact/about) for additional emails, phones and social links. Only runs for professionals that list a website. TaxBuzz already supplies a direct contact email on most listings.",
                        "default": false
                    },
                    "withEmailOnly": {
                        "title": "Only professionals with an email",
                        "type": "boolean",
                        "description": "Output only professionals that have a contact email (from TaxBuzz or, if enabled, the website crawl).",
                        "default": false
                    },
                    "withPhoneOnly": {
                        "title": "Only professionals with a phone",
                        "type": "boolean",
                        "description": "Output only professionals that have a phone number.",
                        "default": false
                    },
                    "minRating": {
                        "title": "Minimum rating",
                        "minimum": 0,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Only output professionals with at least this star rating (0–5). 0 = no rating filter.",
                        "default": 0
                    },
                    "deduplicateProfiles": {
                        "title": "Deduplicate professionals",
                        "type": "boolean",
                        "description": "Skip a professional already emitted in this run (by profile URL) — useful when several searches overlap.",
                        "default": true
                    },
                    "monitorMode": {
                        "title": "Monitoring mode — only new records",
                        "type": "boolean",
                        "description": "Remember what was already returned and emit ONLY records not seen in previous runs (new professionals, and new reviews per profile). Pairs with Apify Schedules to track new listings over time.",
                        "default": false
                    },
                    "monitorStoreName": {
                        "title": "Monitor store name",
                        "type": "string",
                        "description": "Named key-value store that holds the 'already seen' ids for monitoring mode. Use a different name per tracked search to keep their histories separate.",
                        "default": "taxbuzz-monitor"
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 16,
                        "type": "integer",
                        "description": "Maximum parallel requests for profile/enrichment fetches. Lower it for very large runs if you see transient blocks; raise it for speed.",
                        "default": 6
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. TaxBuzz works through the default Apify datacenter proxy (blocked requests retry automatically on a fresh IP). Switch to Residential for the most consistent results on very large runs.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
