# Manta Scraper | US B2B Leads & Firmographics | NAICS SIC (`ahmed_jasarevic/manta-scraper`) Actor

Scrape US small business leads from Manta.com for B2B lead generation and data enrichment. Extract business name, phone, email, website, address, NAICS/SIC codes, employee count, annual revenue, and year founded. Export targeted marketing lists and firmographic databases as JSON, CSV, or Excel.

- **URL**: https://apify.com/ahmed\_jasarevic/manta-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.90 / 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?

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 Scraper

**Scrape US business listings from [Manta.com](https://www.manta.com) — business name, category, address, phone, website, hours, social links, description, employee count, year founded, and more.**

Manta.com is one of America's longest-running small business directories with over 16 million US company listings. This Actor searches by business type and location, visits every matching profile page, and delivers a clean structured dataset you can filter, export, and analyze immediately.

### Why use Manta Scraper?

| Who | What they scrape Manta for |
|-----|---------------------------|
| **Sales teams** | Build prospecting lists of local businesses in a target city |
| **Lead generation agencies** | Pull verified business contact details for outbound campaigns |
| **Market researchers** | Map competitive density of a business category across a region |
| **Data analysts** | Enrich a CRM with missing firmographic data from public listings |
| **SEO agencies** | Audit local business online presence and NAP consistency |

### How to use Manta Scraper

1. **Go to the Input tab** and enter your search queries. You can:
   - Paste a Manta search URL like `https://www.manta.com/search?search=restaurants&city=New+York&state=New+York&country=United+States`
   - Or provide direct profile URLs like `https://www.manta.com/c/mmgg6nz/starbucks-corporation`
2. **Set max items** — how many business listings you want (free users capped at 10).
3. **Set max pages** — how many search result pages to follow per query.
4. **Click Start** and watch the run progress in the Log tab.
5. **Export your data** from the Output tab as JSON, CSV, Excel, or XML.

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `searchQueries` | array | — | Manta search URLs to start from (required) |
| `directProfileUrls` | array | `[]` | Direct business profile URLs to scrape |
| `maxItems` | integer | `50` | Maximum listings to scrape (0 = unlimited for paid) |
| `maxPages` | integer | `5` | Max search result pages per query |
| `proxyConfiguration` | object | `{}` | (inside `proxyConfiguration`) Manta is behind Cloudflare. This Actor bypasses Cloudflare's bot-block by presenting a genuine Chrome TLS fingerprint via curl-impersonate — no proxy required by default. Optionally supply an Apify proxy if you need one. |

### Output example

```json
{
  "url": "https://www.manta.com/c/mmgg6nz/starbucks-corporation",
  "businessName": "Starbucks Corporation",
  "category": "Restaurants and Bars > Restaurants > Coffee shop",
  "address": "2401 Utah Avenue S Seattle, WA 98134",
  "city": "Seattle",
  "state": "WA",
  "zipCode": "98134",
  "phone": "(206) 447-1575",
  "website": "http://www.starbucks.com",
  "email": null,
  "hours": "Mon-Fri 5:00AM-8:00PM; Sat-Sun 5:00AM-8:00PM",
  "description": "We are a privately held company in Seattle, WA proudly doing business for 41 years.",
  "employeeCount": null,
  "yearFounded": null,
  "annualRevenue": null,
  "sicCode": "5812",
  "naicsCode": null,
  "socialLinks": null,
  "isClaimed": false,
  "scrapedAt": "2026-08-29T07:40:00.000Z"
}
```

### Data fields

| Field | Description |
|-------|-------------|
| `url` | Manta profile URL |
| `businessName` | Company name |
| `category` | Industry breadcrumb (e.g. "Restaurants > Coffee shop") |
| `address` | Full street address |
| `city`, `state`, `zipCode` | Parsed address components |
| `phone` | Business phone number |
| `website` | Company website URL (unwrapped from Manta redirect) |
| `email` | Contact email (if listed) |
| `hours` | Operating hours |
| `description` | About / description text |
| `employeeCount` | Number of employees (if listed) |
| `yearFounded` | Year business was established |
| `annualRevenue` | Annual revenue estimate |
| `sicCode` | SIC industry code |
| `naicsCode` | NAICS industry code |
| `socialLinks` | Object with twitter, facebook, linkedin, instagram, youtube URLs |
| `isClaimed` | Whether the business has claimed their Manta listing |

### Pricing / Cost estimation

- **Free tier**: 10 business listings per run
- **Paid tier**: Unlimited listings per run
- Each profile page visit counts as one Apify compute unit
- CheerioCrawler is lightweight (plain HTTP), so runs are fast and cheap
- Proxy usage through Apify is optional

### Tips

- **Use specific search terms** — "HVAC contractor" works better than "contractor"
- **Combine city + state** for best results — Manta's search is location-sensitive
- **Direct profile URLs** skip search pagination entirely — fastest option
- **No proxy needed by default** — Manta's Cloudflare bot-block blocks on the TLS fingerprint, not the IP. This Actor uses curl-impersonate to present a genuine Chrome TLS 1.3 + HTTP/2 fingerprint, which passes Cloudflare's check without a proxy. An Apify proxy is optional if you need one.
- **Lower concurrency** if you're getting rate-limited

### Strategy notes

This Actor uses **CheerioCrawler** (plain HTTP, no browser). Recon found Manta is a **server-rendered site** — it is **not** Next.js (no `__NEXT_DATA__`) and exposes **no internal search API** (the only `/api/` calls are an image CDN and an error logger). All profile data is present in the raw HTML, including a `LocalBusiness` JSON-LD block (name, address, geo, SIC, employees, website). Search result pages are server-rendered cards with simple `&pg=N` pagination.

**Important:** Manta is behind **Cloudflare** bot protection. Cloudflare blocks on the TLS handshake fingerprint rather than the IP address. Plain Node HTTP is fingerprinted as non-browser, so this Actor uses curl-impersonate to present a genuine Chrome TLS 1.3 + HTTP/2 fingerprint — which passes Cloudflare's check without a proxy. No Apify Unblocker or proxy is needed by default.

Profile extraction uses the JSON-LD block as the primary source with HTML selectors as fallback; the Detailed Information table supplies opening date, annual revenue, SIC/NAICS codes, and employee count. This keeps it fast and cheap compared to a browser-based approach.

### FAQ

**Does this handle pagination?**
Yes — it follows search result pages up to your `maxPages` limit.

**What if a profile is blocked?**
The Actor retries up to 3 times with exponential backoff. If still blocked, it logs the error and moves on.

**Can I scrape by state or zip code?**
Yes — use Manta's search URL format with `state=` and `city=` parameters.

**Is this legal?**
This Actor scrapes publicly available business listing data. Always review Manta's Terms of Service and comply with applicable data protection regulations.

### Support

Found a bug or need a feature? Open an issue on the Issues tab. For custom scraping solutions, reach out via the Apify platform.

# Actor input Schema

## `searchQueries` (type: `array`):

Search queries to find businesses. Each item can include keyword, city, and state.

## `directProfileUrls` (type: `array`):

Direct Manta business profile URLs to scrape (e.g. https://www.manta.com/c/mmgg6nz/starbucks-corporation).

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

Maximum number of business listings to scrape. Set 0 for unlimited (paid only).

## `maxPages` (type: `integer`):

Maximum number of search result pages to follow per query.

## `maxConcurrency` (type: `integer`):

How many pages to fetch in parallel for speed. Each parallel request uses its own independent browser session (cookie jar), so raising this scales throughput while keeping Cloudflare from rate-limiting the burst. Higher values are faster but more likely to trigger Manta's anti-bot rate limits.

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

Manta is behind Cloudflare. This Actor bypasses Cloudflare's bot-block by presenting a genuine Chrome TLS fingerprint via curl-impersonate (no proxy required). Optionally supply an Apify proxy here if you need one.

## Actor input object example

```json
{
  "searchQueries": [
    {
      "url": "https://www.manta.com/search?search=restaurants&city=New+York&state=New+York&country=United+States"
    }
  ],
  "directProfileUrls": [],
  "maxItems": 50,
  "maxPages": 5,
  "maxConcurrency": 4,
  "proxyConfiguration": {}
}
```

# 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 = {
    "searchQueries": [
        {
            "url": "https://www.manta.com/search?search=restaurants&city=New+York&state=New+York&country=United+States"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/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 = { "searchQueries": [{ "url": "https://www.manta.com/search?search=restaurants&city=New+York&state=New+York&country=United+States" }] }

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/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 '{
  "searchQueries": [
    {
      "url": "https://www.manta.com/search?search=restaurants&city=New+York&state=New+York&country=United+States"
    }
  ]
}' |
apify call ahmed_jasarevic/manta-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ahmed_jasarevic/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/Vo8hDossKsUq6U45d/builds/0yJlnwtRuewPfhQla/openapi.json
