# New Hampshire Contractor Leads Scraper (Phone & Address) (`scrapebench/new-hampshire-contractor-leads-scraper`) Actor

New Hampshire contractor businesses by trade and city: general contractors, landscapers, HVAC, electricians, roofers, plumbers and more, with phone, website, street address and e-mail where published. Export a trade or look up a firm.

- **URL**: https://apify.com/scrapebench/new-hampshire-contractor-leads-scraper.md
- **Developed by:** [ScrapeBench](https://apify.com/scrapebench) (community)
- **Categories:** Lead generation
- **Features:** Limited permissions
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.004 / contractor lead

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## New Hampshire Contractor Leads Scraper (Phone & Address)

### Pain points

- New Hampshire has no statewide general-contractor licence, so there is no state roster of builders, roofers or remodelers to download.
- The state licenses some trades, such as electricians and plumbers, but not builders, roofers or remodelers.
- Building a New Hampshire contractor list by hand means searching one town and one trade at a time.

### What we solve

- 3,068 New Hampshire contractor businesses in 15 trades, from general contractors and landscapers to well drillers (2026-11-10).
- Phone on 97% of rows, website on 84%, street address on nearly all, e-mail on 39% (2026-11-10).
- Filter by trade and city, or look up firms by name; a row without a phone, website or street can have it added by business name (on by default, its own small charge).

### Summary

New Hampshire contractor businesses: general contractors and builders, landscaping and fencing, HVAC, electricians, roofing and gutters, carpentry and flooring, plumbing, excavation and paving, painting, concrete and masonry, fire protection, garage doors, handymen, well drillers and damage restoration. A row is one business: its name, trade, phone, website, e-mail where published, street, city and ZIP. Businesses marked closed are left out. On 2026-11-10 that was 3,068 businesses: 2,969 with a phone, 2,585 with a website and 1,207 with an e-mail. With 'Include contact details' on (the default), a row missing a phone, website or street address is looked up by its name and town and gets what is found; the match is strict, so a firm that cannot be confirmed stays as it is. These are businesses that list themselves as contractors, not a licence roll: New Hampshire has no statewide general-contractor licence.

### Who it's for

- Building-material, roofing and HVAC suppliers selling to New Hampshire contractors
- General contractors finding New Hampshire subcontractors by trade and town
- Software, insurance and financing vendors building contractor lead lists
- Agencies and marketers running local campaigns for trade businesses

### How to use

This actor does two jobs. Run it, then collect results from the run's dataset (export to JSON/CSV/Excel, or pull via the Apify API).

**Get a list (export):** no names, just filters; returns the whole matching list.

```json
{
  "categories": [
    "HVAC"
  ],
  "cities": [
    "Manchester",
    "Nashua"
  ],
  "includeContacts": true,
  "maxResults": 500
}
```

**Check specific firms (lookup):** put company names or licence numbers in `mode`, `queries`; **Inputs** below says how each is matched.

```json
{
  "mode": "lookup",
  "queries": [
    "East Coast Air",
    "Donovan Plumbing"
  ],
  "maxResults": 20
}
```

See **Inputs** below for every available field.

### What you get

One row per record:

| Field | Description |
|---|---|
| `name` | Business name as listed |
| `category` | Trade (General contractors, Landscaping and fencing, HVAC, Electricians, ...) |
| `phone` | Phone as listed; phone_e164 holds it as +1XXXXXXXXXX |
| `website` | The business's website where available |
| `email` | E-mail where the business published one (about 4 in 10 rows) |
| `street` | Street address |
| `city` | City or town; region (NH) and postal_code beside it |
| `listing_id` | A stable id for the business, the same in every run |
| `source_url` | A map search for the business by name and address |

Sample:

```json
{
  "name": "East Coast Air LLC",
  "listing_id": "cbebf0a271fe5b81",
  "category": "HVAC",
  "categories": [
    "HVAC"
  ],
  "phone": "+16035052556",
  "phone_e164": "+16035052556",
  "website": null,
  "email": "pearce@eastcoastairnh.com",
  "street": "13 Lake Ave",
  "city": "Hampstead",
  "region": "NH",
  "postal_code": "03841",
  "country": "US",
  "source_url": "https://www.google.com/maps/search/?api=1&query=East%20Coast%20Air%20LLC%2C%2013%20Lake%20Ave%2C%20Hampstead%2C%20NH%2003841"
}
```

### Inputs

| Field | Required | Type | Default | Description |
|---|---|---|---|---|
| `mode` | no | string | `"auto"` | export: no names, just filters; returns the whole matching list. lookup: put business names in 'queries'. auto picks the mode for you. |
| `query` | no | string | — | A business name (or listing number) to look up in the stored copy of the directory. Kept alongside 'queries' for saved tasks. |
| `queries` | no | array | `[]` | A business name (or listing number) to look up in the stored copy of the directory. Several values in one run; combined with 'query'. |
| `city` | no | string | — | Only listings in this city. Kept alongside 'cities' for saved tasks. |
| `cities` | no | array | `[]` | Only listings in this city. Several values in one run; combined with 'city'. |
| `categories` | no | array | `[]` | Only rows from this trade (one or more). Available: Carpentry and flooring, Concrete and masonry, Damage restoration, Electricians, Excavation and paving, Fire protection, Garage doors, General contractors, HVAC, Handyman, Landscaping and fencing, Painting, Plumbing, Roofing and gutters, Well drilling. |
| `includeContacts` | no | boolean | `true` | Add each business's phone, website and street address where available, looked up by business name. Charged as a separate 'Contact details found' event per row that gets one; a row without a contact costs only the row price. Only fields the source left empty are filled. Turn off for the list alone. |
| `maxResults` | no | integer | `500` | Per query in lookup mode; per run in export mode. |
| `proxyConfiguration` | no | object | `{"useApifyProxy": false}` | Used only for live lookups; exports read the stored snapshot. |

### Pricing (Pay Per Event)

You pay per result (`dataset-item`) — **no charge for empty runs**. Example: **500 contractor leads** at *$0.004/result* ≈ **$2.00**.

With 'Include contact details' on (the default), a row without a phone, website or street address that gets one is also charged a 'Contact details found' event ($0.005); every other row costs only the row. Notices (unknown trade, no match) are free. Apify platform usage is billed separately per your plan.

### Use cases

- Sales lists: every HVAC contractor in Manchester and Nashua, with phone and website.
- Subcontractor sourcing: New Hampshire electricians, plumbers or excavation firms in one export.
- Territory planning: contractors by town and trade for a rep's route.
- Firm look-ups: find a New Hampshire contractor's phone, website and address by its name.

### Why this actor

- New Hampshire contractor businesses by trade, in one run instead of town by town.
- Phone on 97% of rows and website on 84% (2026-11-10); a missing one can be added by name.
- A strict name match for added contacts: a firm that cannot be confirmed stays without one rather than getting another firm's.
- Pay per row; the contact charge applies only to rows that get one, and notices are free.

### Limitations & updates

Covers publicly listed businesses in 15 contractor trades; a firm with no public business listing is not in it, and a business in two trades appears under its main one. Not a licence roll: New Hampshire has no statewide general-contractor licence. Data comes from a stored copy (its date is in the run log); a business that closed since may still appear.

### FAQ

**Where does the data come from?**

From publicly available business listings: what New Hampshire contractors publish about themselves (name, trade, phone, website, address). Businesses marked closed are left out. Runs read a stored copy that we refresh (the run log gives its date). With 'Include contact details' on, a missing phone, website or street address is looked up by the business's name and town.

**Is this a list of licensed contractors?**

No. New Hampshire has no statewide general-contractor licence, and these are businesses that list themselves in a contractor trade, licensed or not. Check an electrician's or plumber's licence with the state before you hire.

**How many rows have a phone?**

On 2026-11-10, 2,969 of 3,068 rows (97%) had a phone, 2,585 a website, 1,207 an e-mail and all but 2 a street address, before any contact was added.

**Which trades are included?**

General contractors (builders, remodelers, construction services), Landscaping and fencing, HVAC, Electricians, Roofing and gutters, Carpentry and flooring (incl. countertops and windows), Plumbing, Excavation and paving, Painting, Concrete and masonry, Fire protection, Garage doors, Handyman, Well drilling and Damage restoration.

**How do I look up a firm?**

Put business names in queries and set mode to lookup. A name matches when it is contained in the business name, ignoring case and punctuation.

**How am I charged?**

One 'Contractor lead' event per row returned, plus one 'Contact details found' event per row without a phone, website or street address that gets one when 'Include contact details' is on. Notices are free.

### Guides & use cases

Written up on **[scrapebench.dev](https://scrapebench.dev)** — the bench that runs and verifies this actor against the live source every night:

- **How-to:** [How to run New Hampshire Contractor Leads Scraper (Phone & Address)](https://scrapebench.dev/guides/how-to-new-hampshire-contractor-leads-scraper/)
- **Use case:** [New Hampshire General Contractors with Phone](https://scrapebench.dev/use-cases/new-hampshire-general-contractors-with-phone/)

More actors, coverage and nightly verification results: **[scrapebench.dev](https://scrapebench.dev)**

### Works with AI assistants (MCP)

Callable as an MCP tool, so Claude, Cursor, VS Code Copilot and other MCP clients can run it directly. Grab the config from the [MCP tab](https://apify.com/scrapebench/new-hampshire-contractor-leads-scraper/api/mcp) on this page — Apify hosts the server and keeps that snippet current, and OAuth signs you in on first connect, so no API token goes in your config file.

Then just ask:

> "List HVAC contractors in Manchester and Nashua, New Hampshire, with their phone numbers and websites."

That is Trade 'HVAC', Cities 'Manchester' and 'Nashua'. Keep maxResults small on a first call. Runs started this way bill exactly like any other run.

### Data & lawful use

This actor collects publicly available information that each listed business publishes for public
lookup — licence records, business listings and the contact details professionals list there.
Some of it identifies individuals (sole proprietors, licence holders, agents), so treat any
names, phone numbers and emails in your results as personal data.

When you run this actor, you decide what is collected and what it is used for, so you are the
controller of that data and we act only as your processor (Apify Standard Actor Contract).
You need a lawful basis for your use, must honour opt-out and deletion requests, and must
follow the marketing rules that apply to you (CAN-SPAM, TCPA, GDPR, CCPA and similar).
Don't use the output for unsolicited bulk messaging, for screening covered by the FCRA, or
for anything the source's own terms forbid.

Your results are stored in your own Apify account. We don't keep a copy of your results and
don't sell or share them.

### Disclaimer

This is an independent tool. It is not affiliated with, endorsed by or sponsored by
each listed business. Names and marks are used only to describe the data source. Records are
provided as published by the source and may be out of date or incomplete. For anything
consequential (hiring, a permit, a legal decision), confirm the record with the issuing
agency. You are responsible for making sure your use complies with applicable law and the
source's terms.

### Need help?

Open an issue on this actor's **Issues** tab and we'll respond there. Bug reports, missing
fields and feature requests are all welcome. Guides and examples: [scrapebench.dev](https://scrapebench.dev).

If you are a person named in this data and want your record removed from our copy, email
apify-help@scrapebench.dev; the source agency remains the official record.

Your run may be used to improve our services. If something looks off, or you want this actor to fit your use better, please share your run data with us: [Apify Console → Settings → Security → Share run data with developers](https://console.apify.com/settings/security). It lets us see exactly what went wrong and keep improving the actor.

If this actor saved you time, a short review on its Store page helps other buyers find it.

# Actor input Schema

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

export: no names, just filters; returns the whole matching list. lookup: put business names in 'queries'. auto picks the mode for you.

## `query` (type: `string`):

A business name (or listing number) to look up in the stored copy of the directory. Kept alongside 'queries' for saved tasks.

## `queries` (type: `array`):

A business name (or listing number) to look up in the stored copy of the directory. Several values in one run; combined with 'query'.

## `city` (type: `string`):

Only listings in this city. Kept alongside 'cities' for saved tasks.

## `cities` (type: `array`):

Only listings in this city. Several values in one run; combined with 'city'.

## `categories` (type: `array`):

Only rows from this trade (one or more). Available: Carpentry and flooring, Concrete and masonry, Damage restoration, Electricians, Excavation and paving, Fire protection, Garage doors, General contractors, HVAC, Handyman, Landscaping and fencing, Painting, Plumbing, Roofing and gutters, Well drilling.

## `includeContacts` (type: `boolean`):

Add each business's phone, website and street address where available, looked up by business name. Charged as a separate 'Contact details found' event per row that gets one; a row without a contact costs only the row price. Only fields the source left empty are filled. Turn off for the list alone.

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

Per query in lookup mode; per run in export mode.

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

Used only for live lookups; exports read the stored snapshot.

## Actor input object example

```json
{
  "mode": "auto",
  "queries": [],
  "cities": [],
  "categories": [],
  "includeContacts": true,
  "maxResults": 500,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One row per business listing; notices are free.

# API

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

## JavaScript example

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

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

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapebench/new-hampshire-contractor-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("scrapebench/new-hampshire-contractor-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 '{}' |
apify call scrapebench/new-hampshire-contractor-leads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapebench/new-hampshire-contractor-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/c55Cvrpsk6Q0hdRk9/builds/hGkwECDIqS7FpW0jU/openapi.json
