# Superpages Business Leads & Local Data Scraper (`b2b_leads/superpages-real-time-data-scraper`) Actor

Live US local-business leads from Superpages: keyword + city search, full business profiles, reviews, and lead enrichment with emails and socials. Checkbox features stream structured JSON to your dataset in real time. Free plans get a 2-result trial.

- **URL**: https://apify.com/b2b_leads/superpages-real-time-data-scraper.md
- **Developed by:** [Emmanuel](https://apify.com/b2b_leads) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 results

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

## Superpages Real-Time Data

**Live US local-business leads from the Superpages directory — streamed to your dataset as they are collected.**

Superpages Real-Time Data turns one of America's long-standing local business directories into an outreach-ready lead source. Point it at one or more services and cities — `plumber` in `New York, NY`, `med spa` in `Austin, TX`, `roofing contractor` in `Chicago, IL` — and every discovered business streams straight to your dataset with its name, phone, website, address, categories, ratings, and years in business. Turn on the enrichment options and the same row gains full business details (opening hours, extra phone numbers, coordinates, full categories) and public contact channels from the business's own website (email addresses and social handles). One business is always one row — enrichment never creates duplicates and never drops a partial record.

> **Free-tier notice:** on a free Apify plan this Actor is capped at **2 results per run** so you can evaluate the quality risk-free. Upgrade to a paid Apify plan for uncapped exports.

***

### Who it's for

Local SEO agencies, lead-gen and outreach teams, CRM operators, market researchers, franchise developers, and sales teams building US SMB prospect lists.

### What you can build with it

- **SMB lead lists for cold outreach** — pull every plumber, dentist, or contractor in dozens of metros in one run, with phone and website attached.
- **Local SEO and competitor mapping** — see which categories a market is saturated with, who has ratings momentum, and who has been in business longest.
- **CRM and dialer enrichment** — add emails and social profiles to existing business lists so sequences and dialers run on complete contact data.
- **Market and franchise research** — count and profile businesses by category, city, and years in business before entering a market.
- **Review and reputation monitoring** — collect public ratings and review history per business to see who is winning locally.
- **Directory hygiene audits** — spot businesses without a website, with stale phone numbers, or in inconsistent categories, then sell the fix.

### Feature matrix

| Feature (checkbox) | What it does | Default |
| --- | --- | --- |
| **Business Search** | Keyword + city search across US local businesses. One row per business with name, phone, website, address, categories, rating, years in business, open status, and description. | On |
| **Enrich with full business details** | Keeps each search result as ONE row (`detailsFetched: true`) and adds hours, extra phones, coordinates, open status, and full categories. Adds a little extra time per record. | Off |
| **Add lead details (emails & socials)** | Keeps each business as ONE row (`leadEnriched: true`) and adds public email addresses and social profiles found on the business's own website. Adds a little extra time per record. | Off |
| **Business Details** | Full profiles for specific businesses you list by URL. | Off |
| **Reviews & Ratings** | Public reviews and star ratings for the businesses you list — reviewer, rating, date, review text. | Off |
| **Scrape By URL** | Paste any Superpages business, search, or city/category URL; the page type is auto-detected and structured business data is returned. | Off |
| **Webhook** | Optional real-time push of every record to Slack, Discord, Zapier, Make, n8n, or your CRM — in addition to the dataset. | Off |

Every enabled feature is validated before the run starts: if a required list is empty, the Actor tells you exactly which field to fill instead of failing mid-run.

### Input reference

| Field | Type | Default | Notes |
| --- | --- | --- | --- |
| `enableBusinessSearch` | boolean | `true` | Primary feature. Prefilled demo: `plumber` + `roofing contractor` in `New York, NY`. |
| `searchTerms` | string\[] | `["plumber", "roofing contractor"]` | What to look for: `"plumber"`, `"dentist"`, `"auto repair"`, `"med spa"`, `"hvac contractor"`. |
| `searchLocations` | string\[] | `["New York, NY"]` | US cities or areas: `"Austin, TX"`, `"Chicago, IL"`, `"Phoenix, AZ"`. Each term is combined with every location. |
| `searchMaxResults` | integer | `10` | Businesses collected per term + location pair. 1–200. |
| `searchIncludeSponsored` | boolean | `false` | Include sponsored placements, flagged `sponsored: true`. |
| `searchFetchFullDetails` | boolean | `false` | Merge full business details into the same search row. |
| `enrichLeadDetails` | boolean | `false` | Merge website emails and social profiles into the same row. |
| `leadDetailsSiteLookups` | integer | `3` | Extra pages checked per business website when the homepage has no email. 1–6. |
| `enableBusinessDetails` | boolean | `false` | Full profiles for the exact businesses you list. |
| `businessUrls` | string\[] | `[]` | e.g. `https://www.superpages.com/new-york-ny/bpp/fred-smith-plumbing-heating-460765127` |
| `enableReviews` | boolean | `false` | Public reviews and ratings. |
| `reviewBusinessUrls` | string\[] | prefilled example | Business page URLs to collect reviews for. |
| `maxReviewsPerBusiness` | integer | `10` | Reviews per business. 1–100. |
| `enableScrapeByUrl` | boolean | `false` | Process any Superpages URL you paste. |
| `scrapeUrls` | string\[] | prefilled example | Business, search, or city/category URLs. |
| `webhookUrl` | string | `""` | Optional real-time delivery URL. |
| `webhookFormat` | `json` | `slack` | `json` | `slack` produces a message payload. |
| `proxyConfiguration` | object | Residential, US | Residential connections are recommended for the most reliable results. |

#### Example: 200 plumber leads in three metros

```json
{
    "enableBusinessSearch": true,
    "searchTerms": ["plumber"],
    "searchLocations": ["New York, NY", "Chicago, IL", "Phoenix, AZ"],
    "searchMaxResults": 200,
    "searchFetchFullDetails": true,
    "enrichLeadDetails": true
}
```

#### Example: enrich an existing list with emails

```json
{
    "enableBusinessSearch": false,
    "enableBusinessDetails": true,
    "businessUrls": [
        "https://www.superpages.com/new-york-ny/bpp/fred-smith-plumbing-heating-460765127",
        "https://www.superpages.com/new-york-ny/bpp/handyman-at-your-service-465119325"
    ],
    "enrichLeadDetails": true,
    "leadDetailsSiteLookups": 4
}
```

### Output fields

One row per business (plus one row per review when Reviews & Ratings is on). Filter by `featureType`:

| Field | Description |
| --- | --- |
| `featureType` | `business_search`, `business_details`, `business_reviews`, or `scrape_by_url`. |
| `url` | The business page URL on Superpages. |
| `business_id`, `business_name` | Directory ID and business name. |
| `categories`, `primary_category` | All directory categories, plus the first one. |
| `phone`, `extra_phones` | Main phone plus additional published numbers (canonical format, de-duplicated). |
| `website`, `website_domain` | The business's own site and its domain. |
| `emails`, `email` | Public email addresses from the business's own site (filled by **Add lead details**). |
| `street_address`, `city`, `state`, `postal_code`, `country`, `address_full` | Full mailing address. |
| `latitude`, `longitude` | Coordinates (filled by **Enrich with full business details**). |
| `rating`, `review_count` | Public star rating and number of ratings, when the business has them. |
| `years_in_business` | Listing age signal. |
| `claimed` | Whether the business has claimed its listing. |
| `open_status`, `hours` | Current status and published opening hours. |
| `payments` | Accepted payment options. |
| `description` | Business description. |
| `social_links`, `social_urls` | Facebook / Instagram / LinkedIn / X / YouTube / TikTok / Pinterest profiles. |
| `sponsored` | True for sponsored placements. |
| `position`, `search_term`, `search_location`, `page` | Provenance for search rows. |
| `detailsFetched`, `leadEnriched` | Which enrichments ran for this row. |
| `review_id`, `author`, `rating`, `date`, `text`, `provider`, `helpful_count` | Review fields on `business_reviews` rows. |

### Webhooks

Every record is always written to the dataset. If you supply a webhook URL, each new record is additionally POSTed the moment it is saved — ideal for live lead alerts.

**JSON format** — the full record object:

```json
{
    "featureType": "business_search",
    "business_name": "Fred Smith Plumbing & Heating",
    "phone": "(212) 744-1300",
    "website": "https://www.prestonkraus.com",
    "city": "New York",
    "state": "NY",
    "rating": 5,
    "categories": ["Plumbers"],
    "url": "https://www.superpages.com/new-york-ny/bpp/fred-smith-plumbing-heating-460765127"
}
```

**Slack format** — a ready-to-post message:

```json
{ "text": ":office: *Fred Smith Plumbing & Heating*\n*Phone:* (212) 744-1300  •  *Website:* https://...  •  *Category:* Plumbers\n<https://www.superpages.com/...|Open on Superpages>" }
```

Delivery is best-effort: a failing webhook never stops the run or affects dataset writes.

### Use it from AI agents (Apify MCP)

This Actor is available to AI agents through the Apify MCP server, so you can ask questions in natural language and get structured lead data back.

Example prompt for an agent:

> "Find 25 roofing contractors in Austin, TX and 25 in Dallas, TX with their phone numbers, websites, and ratings — then give me a table sorted by rating."

The agent runs this Actor, and the results come back as structured records any downstream tool can consume.

### FAQ

**Do I need a proxy?** Residential connections are recommended. The default configuration already selects a US residential route, and the Actor handles identity rotation for you at scale.

**What happens on a free Apify plan?** Runs are capped at 2 results so you can check data quality. Paid plans export everything your settings ask for.

**How fresh is the data?** Every run collects live records at run time — there is no cached list involved. Run it on a schedule for daily or weekly lead refresh.

**Can I get emails?** Yes — enable **Add lead details** and the Actor looks for public contact channels on each business's own website (emails and social profiles), merged into the same row.

**What if a business has no website?** It is still exported with everything else that is known. Nothing is ever filtered out for being incomplete.

**Can I export one row per business even with enrichment on?** Yes. Enrichment always merges into the same row (`detailsFetched` / `leadEnriched`), never a duplicate row.

**How do I get only reviews?** Turn off Business Search and enable **Reviews & Ratings** with your business URLs.

### Support

Open an issue in the Actor's repository if you need a field added, another metro covered, or a different output shape for your CRM.

# Actor input Schema

## `enableBusinessSearch` (type: `boolean`):

Live keyword + city search across the US Superpages directory — local services, contractors, clinics, retail, and more. On by default and prefilled so you can click Start and get results in seconds.

## `searchTerms` (type: `array`):

What to look for, e.g. "plumber", "roofing contractor", "dentist", "auto repair", "med spa". Required when Business Search is on. Each term is combined with every location below.

## `searchLocations` (type: `array`):

US cities or areas to search, e.g. "New York, NY", "Austin, TX", "Chicago, IL". Required when Business Search is on.

## `searchMaxResults` (type: `integer`):

Maximum businesses collected for each term/location pair (1–200). Default 10 — perfect for instant demo runs.

## `searchIncludeSponsored` (type: `boolean`):

Off by default — organic local businesses only. Turn on to also collect sponsored placements, each flagged with sponsored=true.

## `searchFetchFullDetails` (type: `boolean`):

When on, each search result stays ONE row (featureType business_search, detailsFetched=true) but is enriched with the business's full profile: opening hours, payment options, extra phone numbers, social profiles, coordinates, and full categories. Adds a little extra time per record. Every discovered business is always saved — never filtered out.

## `enrichLeadDetails` (type: `boolean`):

When on, each business keeps ONE row (leadEnriched=true) and gains public contact details from the business's own website — email addresses and social profiles (Facebook, Instagram, LinkedIn, X, YouTube, TikTok). Phone and website from the directory are always kept. Adds a little extra time per record. Every business is saved whether or not extra details are found.

## `leadDetailsSiteLookups` (type: `integer`):

How many additional pages (contact, about, team) to check on a business's own website when the homepage carries no email. 1–6, default 3.

## `enableBusinessDetails` (type: `boolean`):

Fetch the full profile for specific Superpages businesses by URL — description, hours, payment options, extra phones, social profiles, coordinates, and ratings.

## `businessUrls` (type: `array`):

Full Superpages business page URLs, e.g. https://www.superpages.com/new-york-ny/bpp/fred-smith-plumbing-heating-460765127

## `enableReviews` (type: `boolean`):

Collect public customer reviews and star ratings for specific businesses — reviewer name, rating, date, review text, and source.

## `reviewBusinessUrls` (type: `array`):

Superpages business page URLs to collect reviews for, e.g. https://www.superpages.com/new-york-ny/bpp/handyman-at-your-service-465119325

## `maxReviewsPerBusiness` (type: `integer`):

Maximum reviews to collect for each business (1–100). Default 10.

## `enableScrapeByUrl` (type: `boolean`):

Paste any Superpages URL — a business page, a search results page, or a city/category page.

## `scrapeUrls` (type: `array`):

Any Superpages business, search, or city/category URL.

## `webhookUrl` (type: `string`):

Optional. Every record is always saved to the run dataset — this webhook is an ADDITIONAL real-time push. Each new row is also POSTed to this URL (Slack, Discord, Zapier, Make, n8n, or your CRM).

## `webhookFormat` (type: `string`):

json = full record object; slack = Slack-friendly message payload.

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

Residential proxy recommended for the most reliable US local-business results.

## Actor input object example

```json
{
  "enableBusinessSearch": true,
  "searchTerms": [
    "plumber",
    "roofing contractor"
  ],
  "searchLocations": [
    "New York, NY"
  ],
  "searchMaxResults": 10,
  "searchIncludeSponsored": false,
  "searchFetchFullDetails": false,
  "enrichLeadDetails": false,
  "leadDetailsSiteLookups": 3,
  "enableBusinessDetails": false,
  "businessUrls": [],
  "enableReviews": false,
  "reviewBusinessUrls": [
    "https://www.superpages.com/new-york-ny/bpp/handyman-at-your-service-465119325"
  ],
  "maxReviewsPerBusiness": 10,
  "enableScrapeByUrl": false,
  "scrapeUrls": [
    "https://www.superpages.com/new-york-ny/bpp/fred-smith-plumbing-heating-460765127"
  ],
  "webhookUrl": "",
  "webhookFormat": "json",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `allResults` (type: `string`):

Full dataset for this run (every featureType).

## `overview` (type: `string`):

Core lead fields across features: name, phone, website, email, address, rating.

## `search` (type: `string`):

featureType=business_search only. One business = one row; full details and lead details merge into the same row when enabled.

## `details` (type: `string`):

featureType=business_details — full profiles for the businesses you listed by URL.

## `business_reviews` (type: `string`):

featureType=business_reviews — one row per review.

## `scrape_by_url` (type: `string`):

featureType=scrape_by_url — one row per business found on the URL you pasted.

# 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 = {
    "enableBusinessSearch": true,
    "searchTerms": [
        "plumber",
        "roofing contractor"
    ],
    "searchLocations": [
        "New York, NY"
    ],
    "searchMaxResults": 10,
    "searchIncludeSponsored": false,
    "searchFetchFullDetails": false,
    "enrichLeadDetails": false,
    "leadDetailsSiteLookups": 3,
    "enableBusinessDetails": false,
    "businessUrls": [],
    "enableReviews": false,
    "reviewBusinessUrls": [
        "https://www.superpages.com/new-york-ny/bpp/handyman-at-your-service-465119325"
    ],
    "maxReviewsPerBusiness": 10,
    "enableScrapeByUrl": false,
    "scrapeUrls": [
        "https://www.superpages.com/new-york-ny/bpp/fred-smith-plumbing-heating-460765127"
    ],
    "webhookFormat": "json",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("b2b_leads/superpages-real-time-data-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 = {
    "enableBusinessSearch": True,
    "searchTerms": [
        "plumber",
        "roofing contractor",
    ],
    "searchLocations": ["New York, NY"],
    "searchMaxResults": 10,
    "searchIncludeSponsored": False,
    "searchFetchFullDetails": False,
    "enrichLeadDetails": False,
    "leadDetailsSiteLookups": 3,
    "enableBusinessDetails": False,
    "businessUrls": [],
    "enableReviews": False,
    "reviewBusinessUrls": ["https://www.superpages.com/new-york-ny/bpp/handyman-at-your-service-465119325"],
    "maxReviewsPerBusiness": 10,
    "enableScrapeByUrl": False,
    "scrapeUrls": ["https://www.superpages.com/new-york-ny/bpp/fred-smith-plumbing-heating-460765127"],
    "webhookFormat": "json",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("b2b_leads/superpages-real-time-data-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 '{
  "enableBusinessSearch": true,
  "searchTerms": [
    "plumber",
    "roofing contractor"
  ],
  "searchLocations": [
    "New York, NY"
  ],
  "searchMaxResults": 10,
  "searchIncludeSponsored": false,
  "searchFetchFullDetails": false,
  "enrichLeadDetails": false,
  "leadDetailsSiteLookups": 3,
  "enableBusinessDetails": false,
  "businessUrls": [],
  "enableReviews": false,
  "reviewBusinessUrls": [
    "https://www.superpages.com/new-york-ny/bpp/handyman-at-your-service-465119325"
  ],
  "maxReviewsPerBusiness": 10,
  "enableScrapeByUrl": false,
  "scrapeUrls": [
    "https://www.superpages.com/new-york-ny/bpp/fred-smith-plumbing-heating-460765127"
  ],
  "webhookFormat": "json",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call b2b_leads/superpages-real-time-data-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,b2b_leads/superpages-real-time-data-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/SegyYdhcHe31liZyS/builds/UQD7Zfa81kBdG7r5g/openapi.json
