# Manta Business Directory Scraper: Companies, Contacts & Revenue (`parseforge/manta-scraper`) Actor

Scrape US business listings from Manta.com. Export company name, address, phone, website, category, employees, annual revenue estimate as CSV, Excel, JSON, or XML.

- **URL**: https://apify.com/parseforge/manta-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Lead generation, E-commerce, Business
- **Features:** Limited permissions
- **Stats:** 24 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $10.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner-v4.webp)](https://apify.com/parseforge?fpr=vmoqkp)

### Manta Business Directory Scraper

**Scrape US business listings from Manta.com by keyword and location, up to a million per run.** Every listing returns the business name, address, phone, website, and category. No login or API key. Export to CSV, JSON, Excel, or XML.

Manta.com is a directory of millions of small US businesses, but browsing it manually page by page is slow. This Actor searches by business type and city, reads every matching listing, and delivers a clean dataset you can filter and analyze immediately.

| Who uses it | What they scrape Manta for |
|---|---|
| Sales teams | Build a prospecting list of local businesses in a target city. |
| Market researchers | Map the competitive density of a business category across a region. |
| Lead generation agencies | Pull verified business contact details for outbound campaigns. |
| Data analysts | Enrich a CRM with missing firmographic data from public listings. |

### What it does

This Actor collects Manta business listings by search keyword and location, and returns each one as a flat row.

- 🔍 **Keyword search:** Enter any business type like 'restaurant', 'plumber', or 'dentist'.
- 📍 **Location filter:** Narrow results to a city, state, or zip code such as 'Chicago, IL'.
- 📊 **Scalable volume:** Set a maximum from 1 to 1,000,000 businesses per run.
- 📋 **Structured output:** Each row is a flat record with name, address, phone, website, and category.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

### What you can do with Manta data

**📋 Build a local sales list.**

A sales rep searches 'HVAC contractor' in 'Phoenix, AZ', sets maxItems to 200, and exports a CSV of names and phone numbers for cold outreach.

**🗺️ Analyze market saturation.**

A consultant runs 'coffee shop' across five cities, collects 500 listings per city, and compares category counts to advise a franchise buyer.

**📇 Enrich a business database.**

A data team matches company names from their CRM against Manta listings scraped by keyword and appends missing addresses and websites.

**📈 Monitor a category over time.**

A marketing agency scrapes 'gym' in 'Austin, TX' weekly, tracks new and removed listings, and reports churn to a fitness chain client.

### Why choose this scraper

|  | What you get |
|---|---|
| **No API registration** | Reads the public directory directly with zero OAuth or app setup. |
| **Fixed schema** | Every listing lands in the same columns, ready for spreadsheets or a database. |
| **Location targeting** | Pull every plumber in Dallas or every salon in Miami in one run. |

### How it compares

No other Store actor targets Manta the same way, so the honest comparison is with the alternatives teams actually weigh.

| | Manta Business Directory Scraper | Build it in-house | By hand |
|---|---|---|---|
| Setup | Run it now, zero config | Days of engineering | None, but hours per pull |
| When Manta changes | Maintained for you | You fix it | You re-learn the page |
| Proxies, retries, anti-bot | Built in | Your problem | Browser only |
| Output | Fixed JSON schema, CSV/Excel export | Whatever you build | Copy-paste |
| Cost | Pay per result | Engineering time | Analyst hours |

### Configure the run

Drive the Actor with a business keyword and a location, and set a maximum number of listings so only the volume you need reaches your dataset. The Input tab lists every parameter.

A first run with the defaults:

```json
{
  "search": "restaurant",
  "location": "New York",
  "maxItems": 10
}
```

A larger pull:

```json
{
  "search": "restaurant",
  "location": "New York",
  "maxItems": 200
}
```

### Pricing

Pay-per-result: **$0.015 per result** collected. You pay only for the results written to your dataset.

| Results collected | Approximate cost |
|---|---|
| 100 results | $1.50 |
| 1,000 results | $15.00 |
| 10,000 results | $150.00 |

New Apify accounts start with $5 in free credit.

### Free users

Free-plan runs return up to 10 results as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to collect up to 1,000,000 results per run.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [Manta Business Directory Scraper](https://apify.com/parseforge/manta-scraper?fpr=vmoqkp).
3. Set your inputs and any filters, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) (`run-sync-get-dataset-items`) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent live access to Manta through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/manta-scraper"
```

Then prompt it in plain language to run the scraper and read back the results.

### Troubleshooting

**Why am I getting no results?**

Check that your keyword and location match real listings on Manta.com. Try a broader keyword like 'restaurant' and a major city like 'New York'. Also verify the location is spelled correctly.

**The run stopped before reaching my maxItems.**

Manta may have fewer listings for your search than the number you set. The Actor stops when it runs out of result pages. Try a broader keyword or remove the location filter.

**Some listings are missing a phone number or website.**

This is expected. The Actor can only return data that the business owner published on their Manta profile. Empty fields mean the information was not provided.

**The Actor is running slowly.**

Large maxItems values take longer because the Actor respects the website's response time. Reduce the maximum or run during off-peak hours if speed is critical.

**I get an error about the input schema.**

Ensure 'maxItems' is a whole number between 1 and 1,000,000. The 'search' and 'location' fields should be plain text strings.

### FAQ

| Question | Answer |
|---|---|
| Do I need a Manta account or API key? | No. The Actor reads the public directory pages, so no login, API key, or registration is required. |
| What data fields does each row contain? | Each row includes the business name, street address, phone number, website URL, and category as shown on Manta. The exact field list is visible in a sample output on the Actor's page. |
| Can I search without a location? | The location input is optional. If you leave it empty, the Actor searches across all locations, but results may be less targeted. |
| How many listings can I scrape in one run? | You set the maximum with the 'Maximum businesses' field, from 1 up to 1,000,000. The run stops when it hits your limit or exhausts the search results. |
| What search terms work best? | Use the business category or type as it appears on Manta, such as 'restaurant', 'attorney', or 'auto repair'. Specific business names also work if they are listed. |
| Can I scrape by a direct Manta URL instead of a search? | This Actor is built for keyword and location search. For a list of specific URLs, you would need a different approach. |
| Is the phone number and website always available? | The Actor returns whatever is publicly listed on the Manta profile. Some businesses may not have a phone or website published. |
| What output formats are supported? | You can export your dataset in CSV, JSON, Excel, or XML from the Apify platform. |
| Does this Actor handle pagination automatically? | Yes. It follows the search result pages on Manta until it reaches your requested maximum or the last page. |
| Can I run this on a schedule? | Yes. Apify supports scheduled runs, so you can scrape Manta daily or weekly to track changes. |

### Related actors

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

🆘 **Need help?** Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ **Disclaimer.** This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Manta Media, Inc. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

# Actor input Schema

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

Business type or keyword to search for (e.g. restaurant, plumber, dentist).

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

City, state, or zip code to search in (e.g. New York, NY or Chicago, IL).

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

How many businesses to collect per run.

## Actor input object example

```json
{
  "search": "restaurant",
  "location": "New York",
  "maxItems": 10
}
```

# 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 = {
    "search": "restaurant",
    "location": "New York",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/manta-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 = {
    "search": "restaurant",
    "location": "New York",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/manta-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 '{
  "search": "restaurant",
  "location": "New York",
  "maxItems": 10
}' |
apify call parseforge/manta-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/manta-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/RiVkFay25R5ONbbYa/builds/3I1cebIesmtPUVA6n/openapi.json
