{
  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}