# 🧾 Accountant & CPA Leads Scraper - Firm Emails & Phones (`renzomacar/accountant-cpa-leads-scraper`) Actor

Every accounting firm, CPA, bookkeeper and tax preparer in a metro with phone, website, emails and social profiles extracted live from each firm's own site. Built for accounting SaaS, fintech, staffing and agencies. $8 per 1,000 leads.

- **URL**: https://apify.com/renzomacar/accountant-cpa-leads-scraper.md
- **Developed by:** [Renzo Madueno](https://apify.com/renzomacar) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.00 / 1,000 leads

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/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

## 🧾 Accountant & CPA Leads Scraper — Firm Emails & Phones

Accounting firms are the rare B2B target that is both **numerous** (every town has dozens) and **high-LTV** (a firm that adopts your software keeps it for years and drags its clients along). The catch is that most CPA lists sold online are recycled state-board exports: full of retired licensees, missing the bookkeeping shops that buy fastest, and stale on email. This Actor builds the list from the live map instead — **firm name, phone, website, address, emails and social profiles, taken from each firm's own site** — at $8 per 1,000 firms.

### Pick the practice type, not just "accountant"

`accounting firm` and `bookkeeping service` are different businesses with different budgets. The `Practice types` multi-select covers six:

- **Accounting firm** — general practices, the widest net
- **CPA firm** — licensed firms, larger average headcount
- **Tax preparation service** — seasonal volume shops
- **Bookkeeping service** — smallest, fastest to buy new tools
- **Payroll service** — recurring-revenue operators
- **Enrolled agent** — IRS-representation specialists, often solo

Select one, several, or leave it empty to sweep all six. Narrower niches — forensic accounting, fractional CFO, franchise tax specialists — go into `searchQueries` as free-form text.

### The seasonality nobody tells you about

Accounting is the most calendar-driven vertical in local B2B. From mid-January through April 15 a US tax firm will not answer a cold email, and from May through August the same firm is actively shopping for software, staffing and marketing before the next season. **Scrape in the spring, sell in the summer.** A list built in June converts on a completely different curve than the same list worked in March — this is the single biggest lever on your response rate, and it costs nothing to get right.

### One row per firm

Every record: `name`, `category`, `phone` and `websitePhones[]`, `website`, `email` with `emails[]` and an `emailFound` flag, `socialProfiles`, `address`/`city`/`country`, `rating` and `reviewsCount`, `techStack[]`, `placeUrl`, coordinates and the `searchQuery` that found it. CSV, Excel, JSON, or straight over the API into HubSpot, Instantly or Smartlead.

### Who buys these lists

- **Accounting SaaS** (practice management, workflow, client portals, AP automation) — `techStack` reveals firms on a decade-old site; those are the firms still emailing spreadsheets around.
- **Fintech and lending partners** — accountants are the referral channel to thousands of SMBs; one firm relationship compounds.
- **Outsourced staffing and offshore bookkeeping** — target `cpa firm` and `accounting firm` by metro; the staffing shortage is the pitch.
- **Agencies and web studios** — accounting sites are notoriously dated, and firms have the margin to fix that.
- **Continuing-education and course sellers** — `enrolled agent` and `cpa firm` rows are the CPE market.

### Pricing

$0.008 per firm delivered ($8/1,000) plus a $0.01 run-start fee. A metro sweep across all six practice types usually lands 300–700 firms, so **$2.50–5.60 for a market**. Pay for what a run delivers; no subscription, no seat fees, no annual contract.

### Example input

```json
{
  "location": "Charlotte, NC",
  "keywords": ["accounting firm", "cpa firm", "bookkeeping service"],
  "maxResults": 200,
  "maxPagesPerSite": 2
}
```

### FAQ

**Are these verified CPA licenses?**
No — and any list claiming that from a map source is lying. This finds accounting **businesses** and their contact details. License verification lives with the state boards and CPAverify; cross-reference there if licensure matters to your offer.

**What email hit rate should I expect?**
Accounting firms publish contact addresses more consistently than trades — commonly 55–70% of firms that have a website. Use `emailFound` to split the file; the rest still carry a direct phone line.

**Can I exclude the national chains?**
H\&R Block, Jackson Hewitt and Liberty Tax storefronts appear as normal listings and all share a corporate domain. Dedupe or filter on `website` and they collapse into one row you can delete.

**Solo practitioners working from home?**
They show up when they list a service-area business on the map. Many have no street address but do have a phone and often a simple site — exactly the segment that buys entry-level tooling.

**Can I run a whole state?**
Run the major metros as separate queries in `searchQueries` — one line per city. That covers a state far better than a single statewide search, which the map truncates.

**How fresh is it?**
Live at run time. Nothing is cached from an earlier scrape, so firms that closed after tax season are not in your file the way they are in a purchased list.

**Do you filter out firms with no website?**
Only if you ask. `onlyWithWebsite: true` drops them and you are not charged for dropped rows; by default they arrive with name, phone, address and rating.

**Is this compliant?**
The Actor collects publicly listed business data and emails firms publish themselves. No client or taxpayer data is involved. You remain responsible for lawful outreach — CAN-SPAM, GDPR, and local telemarketing rules if you call.

***

Same engine, other verticals: this author maintains niche lead Actors for contractors, clinics, dealerships and more.

### QuickBooks ProAdvisors and independent bookkeepers

Bookkeeping is one of the six presets, but the way bookkeepers actually market themselves — by the software they certify in — is not. Those listings are reached with **Custom search queries**, which take over from the keyword picker and `location`:

```
quickbooks proadvisor in Denver, CO
xero accountant in Denver, CO
bookkeeping service in Aurora, CO
virtual bookkeeper in Lakewood, CO
small business bookkeeper in Littleton, CO
```

This is the segment with the highest email coverage in the whole vertical: solo and two-person practices that live on inbound enquiries and publish a real mailbox on the homepage. It is also the segment with the least brand loyalty to their current stack, which is why app resellers and fintechs work it first.

### Fractional CFOs, advisory practices and audit firms

The advisory end of accounting buys different things — and charges differently — than a tax office:

```
fractional cfo services in Austin, TX
outsourced accounting firm in Austin, TX
business advisory firm in Round Rock, TX
audit firm in Austin, TX
forensic accounting firm in Austin, TX
```

These firms run marketing-led websites, so expect `contactPageUrl` on nearly every row and a `techStack` that frequently includes HubSpot or a Tag Manager container — a firm already spending on acquisition, and therefore already used to buying tools.

### Reading the calendar before you send anything

Accounting is the most seasonal vertical in this fleet, and a list sent at the wrong moment converts at nothing regardless of quality.

| Window | What the firm is doing | Worth pitching? |
|---|---|---|
| Mid-Jan – Apr 15 | Filing season, phones off | No |
| May – Jun | Debrief, tooling review, hiring | Best window of the year |
| Jul – Aug | Extensions, quieter | Good |
| Sep – Oct 15 | Extension deadline crunch | No |
| Nov – Dec | Next-year planning and budgets | Very good |

`scrapedAt` on every row records exactly when the list was built, so when you come back in the November window you know whether to re-run it or send what you have.

# Actor input Schema

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

City, region or country to search in, e.g. 'Charlotte, NC', 'Austin, TX', 'London, UK'.

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

Which accounting practice types to search for. Pick one or several; leave empty to sweep all six at once. Need something narrower (e.g. 'forensic accountant')? Use Custom search queries below.

## `searchQueries` (type: `array`):

Full searches, one per line (e.g. 'bookkeeping service in Austin, TX'). When set, these override Location + practice types, and any wording is allowed here — use it for segments outside the list above or to cover several cities in one run.

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

Maximum number of companies to find per search. One search typically yields up to ~120 companies.

## `maxPagesPerSite` (type: `integer`):

How many pages to check on each company website when hunting for emails (homepage, /contact, /about...). More pages = more emails found, slightly slower run.

## `onlyWithWebsite` (type: `boolean`):

Drop companies that have no website (they can never have an email). You are not charged for dropped companies.

## `includeGenericEmails` (type: `boolean`):

Keep every published address, including shared inboxes like info@, hello@ and contact@. Disable to drop only non-deliverable system addresses (noreply@, no-reply@, donotreply@, mailer-daemon@, postmaster@, webmaster@, hostmaster@, abuse@).

## `language` (type: `string`):

Language code for the discovery search (e.g. 'en', 'es', 'fr', 'de').

## Actor input object example

```json
{
  "location": "Charlotte, NC",
  "keywords": [
    "accounting firm"
  ],
  "maxResults": 5,
  "maxPagesPerSite": 1,
  "onlyWithWebsite": false,
  "includeGenericEmails": true,
  "language": "en"
}
```

# Actor output Schema

## `leads` (type: `string`):

Complete B2B leads (company, website, phone, address, emails, social profiles), one item per lead in the default dataset.

# 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 = {
    "location": "Charlotte, NC",
    "keywords": [
        "accounting firm"
    ],
    "maxResults": 5,
    "maxPagesPerSite": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("renzomacar/accountant-cpa-leads-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 = {
    "location": "Charlotte, NC",
    "keywords": ["accounting firm"],
    "maxResults": 5,
    "maxPagesPerSite": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("renzomacar/accountant-cpa-leads-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 '{
  "location": "Charlotte, NC",
  "keywords": [
    "accounting firm"
  ],
  "maxResults": 5,
  "maxPagesPerSite": 1
}' |
apify call renzomacar/accountant-cpa-leads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,renzomacar/accountant-cpa-leads-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/X6YhMGByMthh2463F/builds/9Eyye64A08LgtPSQv/openapi.json
