# Manta Business Directory Scraper (`scrapeworks/manta-business-directory-scraper`) Actor

Scrape US small-business listings from the Manta.com directory in bulk: company name, star rating, reviews, full address, phone, website and profile URL. Paste category or category+location browse URLs and it paginates deep, returning thousands of clean rows per run.

- **URL**: https://apify.com/scrapeworks/manta-business-directory-scraper.md
- **Developed by:** [Nicolas van Arkens](https://apify.com/scrapeworks) (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 $4.00 / 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/platform/actors/running/actors-in-store#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

## Manta Business Directory Scraper

**Scrape US small-business listings from [Manta.com](https://www.manta.com) in bulk** —
company name, star rating, review count, full street address, city, state, phone,
website and the Manta profile URL — as clean, structured rows ready for a spreadsheet,
CRM or lead list.

Manta is one of the largest US small-business directories (millions of company
listings organized by industry and location). This actor turns any Manta category or
category-plus-location "browse" page into a downloadable dataset, paginating deep so a
single run pulls **thousands of businesses**.

***

### What you get (output fields)

Each row is one business:

| Field | Description |
|---|---|
| `name` | Business / company name |
| `profileUrl` | Full Manta profile URL (`https://www.manta.com/c/...`) |
| `companyId` | Manta's internal company id (stable key for de-duping) |
| `profileSlug` | The slug portion of the profile URL |
| `rating` | Star rating (0–5), if the business has reviews |
| `reviewCount` | Number of reviews, if any |
| `streetAddress` | Street address |
| `city` | City |
| `state` | State (2-letter) |
| `phone` | Phone number |
| `website` | The business's own website (decoded from Manta's redirect link) |
| `logoUrl` | Company logo / photo image URL, if present |
| `category` | The Manta category the listing was found under |
| `sourceUrl` | The Manta browse URL this row came from |
| `resultPage` | The result page number the row was on |
| `scrapedAt` | ISO-8601 timestamp of the scrape |

Fields that a particular listing doesn't publish (e.g. an unclaimed business with no
website or reviews) come back `null` — you are only billed for a business that was
returned, never for empty fields.

***

### How to use it

Manta organizes its directory into **category / location browse pages**, for example:

- A whole category: `https://www.manta.com/mb_33_A6_000/professional_services`
- A category in one state: `https://www.manta.com/mb_43_A6_44/professional_services/texas`
- Other top categories: `restaurants_and_bars`, `healthcare`, `consumer_services`,
  `information_technology`, `industrial_machinery`, and hundreds of sub-categories.

To get the exact page you want: **open manta.com, browse to the category and the
state/city you care about, and copy the page URL from your browser.** Paste one or
more of those URLs into **`startUrls`**. That's it — the actor paginates each URL deep
automatically.

> **Note:** Manta's *search box* (`/search?...`) builds its results with JavaScript,
> so a `/search` URL returns nothing here. Use a **category / location browse URL**
> (a `/mb_.../<category>` or `/mb_.../<category>/<state>` page), not a search URL.

#### Example input

```json
{
  "startUrls": [
    "https://www.manta.com/mb_43_A6_44/professional_services/texas",
    "https://www.manta.com/mb_33_C4_000/restaurants_and_bars"
  ],
  "maxResultsPerUrl": 5000,
  "maxPagesPerUrl": 100,
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US" }
}
```

#### Example output row

```json
{
  "name": "Paragon Payroll, Inc.",
  "profileUrl": "https://www.manta.com/c/mt1j9gy/paragon-payroll-inc-",
  "companyId": "mt1j9gy",
  "profileSlug": "paragon-payroll-inc-",
  "rating": null,
  "reviewCount": null,
  "streetAddress": "1805 Owen Ct",
  "city": "Mansfield",
  "state": "TX",
  "phone": "(866) 444-4615",
  "website": "http://www.paragonpayroll.com",
  "logoUrl": "https://images.manta-r3.com/api/claim-this-profile/image-mgr/view/20160330baGS9Dgjzn",
  "category": "Professional Services",
  "sourceUrl": "https://www.manta.com/mb_43_A6_44/professional_services/texas",
  "resultPage": 1,
  "scrapedAt": "2026-07-19T00:00:00+00:00"
}
```

***

### Input options

| Option | What it does |
|---|---|
| `startUrls` | One or more Manta category / location browse URLs. Each is paginated deep. |
| `maxResultsPerUrl` | Max businesses per start URL (default 5000). |
| `maxPagesPerUrl` | Hard page cap per start URL (default 100 ≈ 3,500–4,500 businesses). |
| `maxResults` | Optional overall cap across all start URLs combined. |
| `proxyConfiguration` | Proxy used to reach Manta. Default: Apify Residential (US), recommended. |

Manta serves roughly **35–45 businesses per page** and its listings run into the
hundreds of pages for a big category-plus-state, so a handful of start URLs easily
returns thousands of rows. Businesses are de-duplicated per start URL by their Manta id.

***

### Use cases

- **Lead lists & prospecting** — build targeted B2B lists by industry and location
  (name, phone, website, address) for outbound sales.
- **Local market research** — map every business in a category across a state or metro.
- **Data enrichment** — match and enrich your CRM against Manta's directory.
- **Directory / aggregator building** — seed your own vertical directory with structured
  company data.

***

### FAQ

**Do I need a Manta login or API key?** No. The actor reads Manta's public directory
pages.

**Can I search by keyword like "plumbers in Austin"?** Use Manta's own browse pages:
open manta.com, browse (or search) to the category + location you want, then copy that
page's URL into `startUrls`. Manta's `/search` box is JavaScript-rendered, so paste a
category/location browse URL rather than a raw search URL.

**Do I need the proxy?** Manta blocks on TLS *fingerprint*, not IP, so the actor
presents a real Chrome TLS fingerprint and fetches **directly** first — the proxy is an
automatic fallback used only if a direct request is ever blocked. The default (Apify
Residential, US) is a safe fallback; leave it in place for the most reliable results.

**How many businesses can I get?** Thousands per run. Volume comes from supplying more
start URLs (more categories and more states/cities) and from deep pagination.

**How am I billed?** Pay per result — one charge per business returned. Listings that
are blocked or empty are never charged.

# Actor input Schema

## `startUrls` (type: `array`):

One or more manta.com listing pages to scrape. Each is a category or category+location 'browse' page, e.g. https://www.manta.com/mb\_33\_A6\_000/professional\_services (a whole category), or https://www.manta.com/mb\_43\_A6\_44/professional\_services/texas (that category in one state). To get the exact URL you want: open manta.com, browse to the category and state/city you care about, and copy the page URL from your browser. Every URL is paginated DEEP automatically (Manta serves ~35-45 businesses per page and pages run into the hundreds), so a few URLs return thousands of rows. Results are billed per business, so more URLs = more rows. NOTE: Manta's /search box is JavaScript-rendered and returns nothing here - use a category/location browse URL, not a search URL.

## `maxResultsPerUrl` (type: `integer`):

Maximum businesses to return for EACH start URL. The actor paginates automatically (~35-45 businesses per page). Set high to pull a whole category/state; lower it to sample.

## `maxPagesPerUrl` (type: `integer`):

Hard limit on how many result pages to fetch per start URL (a safety cap on top of Max results per start URL). Manta serves ~35-45 businesses per page, so 100 pages is roughly 3,500-4,500 businesses.

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

Optional overall cap across ALL start URLs combined. Leave empty for no overall cap (each URL is still bounded by Max results / Max pages per URL). Useful to cap total billed rows for a run.

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

Fallback proxy for reaching manta.com. The actor fetches DIRECTLY first (Manta blocks on TLS fingerprint, not IP, so a real browser fingerprint gets through without a proxy) and only routes through this proxy - rotating exits - if a direct request is blocked. The default (Apify Residential, US) is a safe fallback; leave it in place.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.manta.com/mb_43_A6_44/professional_services/texas",
    "https://www.manta.com/mb_33_C4_000/restaurants_and_bars",
    "https://www.manta.com/mb_33_D0_000/healthcare"
  ],
  "maxResultsPerUrl": 5000,
  "maxPagesPerUrl": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# 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 = {
    "startUrls": [
        "https://www.manta.com/mb_33_A6_000/professional_services"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapeworks/manta-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 = {
    "startUrls": ["https://www.manta.com/mb_33_A6_000/professional_services"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapeworks/manta-business-directory-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    "https://www.manta.com/mb_33_A6_000/professional_services"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call scrapeworks/manta-business-directory-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapeworks/manta-business-directory-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/0Gqb08fdY10vYbgLD/builds/8KQg9WoldsCTP3V55/openapi.json
