# Local Business Directory Scraper - Superpages (Thryv) (`jungle_synthesizer/superpages-thryv-local-business-directory-scraper`) Actor

Scrape Superpages (Thryv) business listings by category and location. Returns name, phone, address, website, rating, review count, years in business, and category tags for US local businesses.

- **URL**: https://apify.com/jungle\_synthesizer/superpages-thryv-local-business-directory-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.40 / 1,000 record scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Local Business Directory Scraper — Superpages (Thryv)

Scrape business listings from [Superpages](https://www.superpages.com), the Thryv/Dex Media national directory of US local businesses. Returns name, phone, address, website, star rating, review count, years in business, and full category tags for every business matching a category and location you choose.

***

### Superpages Scraper Features

- Searches by business category and city/state, the same way Superpages' own search form works
- Extracts phone, full street address, and website for every listing
- Returns star rating and review count where the business has either
- Flags sponsored placements separately from organic listings (`is_ad`)
- Pulls the full secondary-category list per business, not just the headline trade
- Follows result pagination automatically, up to the item cap you set
- Ships years-in-business when Superpages reports it — useful for filtering out brand-new listings

***

### Who Uses Superpages Business Data?

- **Lead gen agencies** — build prospecting lists by trade and territory without touching a search form by hand
- **Local SEO and marketing shops** — audit a market's competitive landscape, category by category
- **Franchise and roll-up buyers** — scan a metro for acquisition targets in a given trade
- **Sales teams** — feed fresh, phone-and-address-complete leads straight into a CRM
- **Market researchers** — measure business density and review activity across cities, or compare one trade against another

***

### How the Superpages Scraper Works

1. Give it a business category, a city, and a state.
2. It walks Superpages' search results for that category/location pair, page by page, until it hits your item cap.
3. For each listing, it opens the business's own detail page to pull the clean fields — rating, review count, full category list, and the business's own website — that the search results page doesn't show.
4. You get one JSON record per business, ready to export or pipe into whatever comes next.

***

### Input

```json
{
  "category": "plumber",
  "city": "Houston",
  "state": "TX",
  "maxItems": 50
}
```

| Field          | Type    | Default | Description |
|----------------|---------|---------|-------------|
| `category`     | string  | —       | Search term for the business category or trade (e.g. `plumber`, `dentist`, `restaurants`). Required. |
| `city`         | string  | —       | City to search within (e.g. `Houston`). Required. |
| `state`        | string  | —       | Two-letter US state code (e.g. `TX`). Required. |
| `maxItems`     | integer | 50      | Maximum number of business listings to return. |
| `resumeCursor` | string  | —       | Cursor from a previous run's Output, to continue a crawl that stopped early. Leave empty for a fresh run. |

#### Resuming a large crawl

Every run emits a `resumeCursor` in its Output. If a large crawl stops before it finishes — because it hit `maxItems`, your spend cap (`maxTotalChargeUsd`), or was aborted — start a new run with **the same input** plus that `resumeCursor` to continue from where it left off. The crawl resumes from the queued work the previous run didn't reach.

- You are **not re-charged** for records the earlier run already delivered.
- Resume within your account's run-retention window — on the free tier, roughly your 10 most recent runs. Once the source run is pruned, its `resumeCursor` is no longer valid.
- `resumeCursor` is opaque — supply it unmodified.

***

### Superpages Scraper Output Fields

```json
{
  "business_name": "Abacus Plumbing and Air Conditioning",
  "primary_category": "Plumbers",
  "categories": "Plumbers, Building Contractors, Home Repair & Maintenance, Plumbing-Drain & Sewer Cleaning, Water Heater Repair",
  "phone": "832-397-6966",
  "address": "15851 Vickery Dr",
  "city": "Houston",
  "state": "TX",
  "zip": "77032",
  "website": "http://www.abacusplumbing.net",
  "rating": 5,
  "review_count": 2,
  "years_in_business": "23 Years",
  "snippet": "My shower kept leaking, even when it was turned off. The Plumber from Abacus Plumbing arrived on time...",
  "is_ad": false,
  "listing_url": "https://www.superpages.com/houston-tx/bpp/abacus-plumbing-and-air-conditioning-480127716"
}
```

| Field               | Type    | Description                                                          |
|---------------------|---------|----------------------------------------------------------------------|
| `business_name`     | string  | The business's listed name                                           |
| `primary_category`  | string  | The business's headline trade/category                               |
| `categories`        | string  | Full comma-separated list of categories the business is tagged under |
| `phone`             | string  | Listed phone number                                                  |
| `address`           | string  | Street address                                                       |
| `city`              | string  | City                                                                 |
| `state`             | string  | Two-letter state code                                                |
| `zip`               | string  | ZIP code                                                             |
| `website`           | string  | The business's own website, where listed                             |
| `rating`            | number  | Average star rating (0-5), where the business has reviews            |
| `review_count`      | integer | Number of reviews behind the rating                                  |
| `years_in_business` | string  | Years in business, where Superpages reports it                       |
| `snippet`           | string  | A short review excerpt, where available                              |
| `is_ad`             | boolean | `true` if the listing is a paid/sponsored placement                  |
| `listing_url`       | string  | The business's Superpages profile URL                                |

Some fields — rating, review count, years in business, and the review snippet — are only as complete as Superpages' own listing. A business with no reviews returns `null` for `rating` and `review_count` rather than a fabricated zero.

***

### FAQ

#### How do I scrape Superpages business listings?

Give the Superpages Scraper a category, a city, and a state, and it returns every matching listing up to your `maxItems` cap — no account or login needed.

#### What data can I get from Superpages?

Name, phone, full address, website, star rating, review count, years in business, and the full category list for each business, plus whether the listing is a paid placement.

#### Can I filter by location?

Yes. `city` and `state` together scope the search to one metro area — the same scope Superpages' own search form uses.

#### Does this include sponsored listings?

Yes, both are returned, but every record carries an `is_ad` flag so you can separate organic results from paid placements.

#### How much does the Superpages Scraper cost to run?

Pricing follows Apify's standard Pay-Per-Event model — see the Pricing tab on this actor's page for current rates.

***

### Need More Features?

Need a different field, a bulk multi-category mode, or a different source entirely? [File an issue](https://console.apify.com/actors/issues) or get in touch.

### Why Use This Superpages Scraper?

- **Full detail, not just the search card** — every record is enriched from the business's own listing page, not scraped off the thin search-results summary
- **Honest about sponsorship** — `is_ad` tells you which rows are paid placements, which most directory scrapers don't bother to surface
- **Built for bulk prospecting** — point it at a trade and a metro, set your item cap, and let it run

# Actor input Schema

## `sp_intended_usage` (type: `string`):

What will this data feed? E.g. lead lists, KYB checks, price tracking.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

We'll personally help with your use case. No spam.

## `resumeCursor` (type: `string`):

Leave empty for a fresh crawl. To CONTINUE a previous run where it stopped — without paying again for records you already received — paste the `resumeCursor` value from that run's Output (the run's OUTPUT key). Resume promptly: the previous run's data expires with your account's retention window (free tier: your ~10 most recent runs).

## `maxItems` (type: `integer`):

Maximum number of business listings to scrape.

## `category` (type: `string`):

Search term for the business category or trade (e.g. plumber, dentist, restaurants).

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

City to search within (e.g. Houston).

## `state` (type: `string`):

US state to search within.

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "maxItems": 10,
  "category": "plumber",
  "city": "Houston",
  "state": "TX"
}
```

# Actor output Schema

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

No description

# 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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "maxItems": 10,
    "category": "plumber",
    "city": "Houston",
    "state": "TX"
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/superpages-thryv-local-business-directory-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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "maxItems": 10,
    "category": "plumber",
    "city": "Houston",
    "state": "TX",
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/superpages-thryv-local-business-directory-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 '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "maxItems": 10,
  "category": "plumber",
  "city": "Houston",
  "state": "TX"
}' |
apify call jungle_synthesizer/superpages-thryv-local-business-directory-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jungle_synthesizer/superpages-thryv-local-business-directory-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/1D1gwVhjKof0kEY8v/builds/tw32YxHqmamNddmWr/openapi.json
