# Manta Email Scraper (`leads-scraper/manta-email-scraper`) Actor

Manta Email Scraper SD - Manta Email Scraper is a lead generation tool that extracts leads with public contact emails, account names and profile URLs from Manta results by keyword, location and email domain - Manta email extractor.

- **URL**: https://apify.com/leads-scraper/manta-email-scraper.md
- **Developed by:** [Leads Scraper](https://apify.com/leads-scraper) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.49 / 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

### Manta Email Scraper

The Manta Email Scraper pulls publicly indexed contact emails out of Manta, one of the largest small-business directories in the United States. It is aimed squarely at teams selling into owner-operated companies of two to fifty people.

Manta profiles are written by or for the business itself, which is why company identity comes through so cleanly. In our measured run the Manta Email Scraper parsed 10 result blocks and named a business in all 10 of them.

The trade-off is handle resolution: only 5 of those 10 rows resolved to a canonical profile URL. You get the company name and the email either way, which is what most outbound workflows actually need.

#### What the Manta Email Scraper does

The Manta Email Scraper builds Google queries with the `site:` operator against `manta.com`. It parses each result block structurally, locating the `<h3>` title and then the smallest surrounding block.

A domain-filtered regex extracts emails from that block text. Matches are normalised, deduplicated globally, and pushed to your Apify dataset the moment they are found.

The Manta Email Scraper never logs into Manta, never uses a Manta API and never opens the Manta website. There is no browser, no JavaScript rendering, no authentication and no cookies.

#### Why the Manta Email Scraper fits SMB-focused selling

Payroll, bookkeeping, POS and business-banking vendors all share a problem: their buyer has no LinkedIn presence and no marketing team. Manta is one of the few places those companies describe themselves in public.

The Manta Email Scraper converts that self-description into a workable small business email list. Because `keyword` and `description` travel with every row, you can segment by trade before you write a single line of copy.

Regional distributors and franchise development teams use the Manta Email Scraper the same way, mapping how many independent operators sit inside a state before committing budget.

#### Features of the Manta Email Scraper

Everything below is implemented in the Manta Email Scraper today.

| Feature | What it means in practice |
|---|---|
| Google `site:` search over `manta.com` | Targets indexed US small-business profiles |
| Query expansion | Base, quoted and `intitle:` variants plus one query per modifier; base queries run first |
| Domain filtering | Only emails ending in your `customDomains` values are kept |
| Global deduplication | Each email is emitted once per run across every query and page |
| Email normalisation | Handles `name [at] domain [dot] com`, `name (at) domain`, `name @ domain.com`, `domain .com`, zero-width characters and the full-width `＠` |
| Junk filter | Rejects `email@`, `yourname@`, `test@`, `xxx@` and single-character locals |
| Boundary-correct matching | `@gmail.com` does not match inside `@gmail.company` or `@gmail.com.br` |
| Soft-wrap repair | Drops a hit that is only the tail of another email in the same block |
| Structural block parsing | Works from the `<h3>` title, never from Google's CSS class names |
| Whole-page fallback parser | A layout change degrades to "emails without account details", not "no emails" |
| Concurrency control | `asyncio` worker pool with a shared stop signal on `maxEmails` |
| Retries and block detection | Up to 3 attempts per page, exponential backoff, fresh proxy session per request, CAPTCHA and consent pages detected and retried |
| Failed-query requeue | Blocked or failed queries are retried once at the end of the run |
| Resumable state | Key-value store state keyed by an input hash, saved on `PERSIST_STATE`, `MIGRATING` and `ABORTING` |
| Run summary logging | Pages fetched, blocked pages, retries and emails per page |

#### How the Manta Email Scraper works

A run of the Manta Email Scraper always follows six steps.

1. Read your input: keywords, location, email domains and limits.
2. Build queries such as `site:manta.com auto repair shop "@gmail.com" "Columbus, OH"`.
3. Fetch Google result pages through the Apify GOOGLE_SERP proxy with async `aiohttp`.
4. Parse each result block structurally to isolate title, company label and snippet.
5. Extract and normalise emails using a domain-filtered regex.
6. Deduplicate globally and push each lead to the dataset immediately.

The Manta Email Scraper streams rows to the dataset as it finds them, so aborting a long run never loses what has already been collected.

#### Input fields for the Manta Email Scraper

These are the exact inputs the Manta Email Scraper accepts, with its shipped defaults.

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["small business", "contractor"]` | Search terms describing the companies you want |
| `location` | string | `""` | Optional location phrase added to every query |
| `customDomains` | array | `["@gmail.com", "@yahoo.com"]` | Only emails on these domains are kept; `@` optional |
| `maxEmails` | integer 1-10000 | `20` | Stop after this many unique emails |
| `countryCode` | string | `""` | Two-letter country for the search proxy (US, GB, DE...) |
| `expandQueries` | boolean | `true` | Search each keyword x domain pair in several phrasings |
| `queryModifiers` | array | `["email", "contact", "enquiries", "owner", "get a quote"]` | Extra words combined with each keyword when expansion is on |
| `maxPagesPerQuery` | integer 1-50 | `30` | Page cap per query |
| `maxConcurrency` | integer 1-20 | `5` | Parallel queries |

#### Example input for the Manta Email Scraper

```json
{
  "keywords": ["auto repair shop", "machine shop", "commercial cleaning"],
  "location": "Columbus, OH",
  "customDomains": ["@gmail.com", "@yahoo.com", "@aol.com", "@sbcglobal.net"],
  "maxEmails": 500,
  "countryCode": "US",
  "expandQueries": true,
  "queryModifiers": ["email", "contact", "owner"],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

#### Location: the highest-leverage input in the Manta Email Scraper

Manta's coverage is broadest in mid-sized American cities, which is exactly where most SMB software vendors underinvest. The Manta Email Scraper rewards you for going there.

Strong `location` values include `"Columbus, OH"`, `"Dayton, OH"`, `"Greensboro, NC"`, `"Springfield, MO"`, `"Boise, ID"` and `"Knoxville, TN"`. County phrasing such as `"Franklin County"` also works.

Google caps a single query at roughly 300 results, so one city per run beats one state per run. Twelve Ohio cities will outproduce a single `"Ohio"` query by a wide margin.

Stack the datasets afterwards. The Manta Email Scraper deduplicates globally within a single execution, so dedupe across separate runs in your warehouse or spreadsheet.

Used this way, the Manta Email Scraper becomes a repeatable territory-mapping routine rather than a one-off export.

#### Output fields from the Manta Email Scraper

Every dataset item written by the Manta Email Scraper carries all fourteen fields below.

| Field | Meaning |
|---|---|
| `network` | Platform name |
| `keyword` | The keyword that produced the lead |
| `query` | The exact Google query used |
| `title` | Raw result title |
| `accountName` | Account label Google prints |
| `fullName` | Display name parsed from a profile-style title; empty for post captions |
| `username` | URL-safe handle when the platform exposes one; otherwise `null` |
| `profileUrl` | Canonical account URL when a handle is known; otherwise empty |
| `url` | Direct platform link when exposed, else the profile URL |
| `description` | Bio snippet, cleaned of labels and engagement counters |
| `email` | Lower-cased email address |
| `emailDomain` | The matched domain |
| `possiblyTruncated` | `true` when Google's snippet ellipsis touched the email |
| `foundAt` | ISO 8601 UTC timestamp |

#### Example output from the Manta Email Scraper

```json
[
  {
    "network": "Manta",
    "keyword": "auto repair shop",
    "query": "site:manta.com auto repair shop \"@gmail.com\" \"Columbus, OH\"",
    "title": "Buckeye Auto & Tire LLC - Columbus, OH - Manta.com",
    "accountName": "Buckeye Auto & Tire LLC",
    "fullName": "Buckeye Auto & Tire LLC",
    "username": "buckeye-auto-tire-llc",
    "profileUrl": "https://www.manta.com/c/buckeye-auto-tire-llc",
    "url": "https://www.manta.com/c/buckeye-auto-tire-llc",
    "description": "Independent repair shop serving Franklin County since 2009. Estimates: buckeyeautotire@gmail.com",
    "email": "buckeyeautotire@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": false,
    "foundAt": "2026-08-31T12:05:11.630Z"
  },
  {
    "network": "Manta",
    "keyword": "commercial cleaning",
    "query": "site:manta.com commercial cleaning \"@yahoo.com\" \"Columbus, OH\"",
    "title": "Scioto Facility Services - Manta.com",
    "accountName": "Scioto Facility Services",
    "fullName": "Scioto Facility Services",
    "username": null,
    "profileUrl": "",
    "url": "",
    "description": "Nightly janitorial for offices and clinics. Bids to sciotofacility@yahoo.com",
    "email": "sciotofacility@yahoo.com",
    "emailDomain": "@yahoo.com",
    "possiblyTruncated": false,
    "foundAt": "2026-08-31T12:06:48.201Z"
  }
]
```

#### Use cases for the Manta Email Scraper

The Manta Email Scraper is at its best when the target is a small, owner-run American company.

| Use case | Who runs it | Typical setup |
|---|---|---|
| Payroll and bookkeeping software outreach | B2B SaaS | `["auto repair shop", "restaurant"]`, `location: "Dayton, OH"` |
| Regional distributor prospecting | Wholesale supplier | `["machine shop", "fabrication"]`, `location: "Greensboro, NC"` |
| Franchise gap mapping | Franchise development | `["commercial cleaning"]`, `location: "Springfield, MO"` |
| Business insurance lists | Insurance brokerage | `["landscaping", "roofing"]`, `location: "Knoxville, TN"` |
| Local agency retainer pitching | Marketing agency | `["dentist", "law firm"]`, `location: "Boise, ID"` |
| SMB market sizing | Market researcher | One keyword, 20 city runs, compare unique counts |
| Trade-show invite lists | Event organiser | `["contractor"]` across a whole state, city by city |
| CRM enrichment | RevOps team | Match `accountName` against existing accounts |

#### Tuning the Manta Email Scraper for better yield

Use industry language that a small business would write about itself. `"machine shop"`, `"powder coating"` and `"CNC machining"` reach different Manta profiles than `"manufacturing"`.

Widen `customDomains` aggressively. American SMBs still lean on `@gmail.com`, `@yahoo.com`, `@aol.com`, `@sbcglobal.net`, `@comcast.net` and `@hotmail.com`, and each domain is searched separately.

Leave `expandQueries` on so the Manta Email Scraper routes around Google's per-query cap. Base queries always run first, so high-signal results land early.

Set `countryCode` to `US`. Manta is US-centric, and a US vantage point keeps the Manta Email Scraper focused on relevant results.

#### What to expect from a Manta Email Scraper run

Our measured Google run parsed 10 result blocks, identified a business on all 10, resolved 5 profile URLs and produced 10 unique emails. Identity coverage is excellent; handle resolution is only about half.

That pattern is normal for Manta. Google frequently prints the company name without exposing a path Google can attribute as a handle, so `username` comes back `null`.

Plan your workflow around `accountName` and `email` rather than `profileUrl`, and the half-rate on handles stops mattering.

#### Responsible use, GDPR and CAN-SPAM

The Manta Email Scraper only collects addresses that companies have published on a public Manta profile. Sending obligations remain with you, and this is guidance rather than legal advice.

CAN-SPAM requires accurate headers, an honest subject line, a physical postal address and a working opt-out honoured promptly. GDPR and UK GDPR require a lawful basis, a privacy notice and a route to erasure if you also contact European businesses.

A sole trader's `firstname@gmail.com` is personal data even when published commercially. Suppress opt-outs, keep provenance records, and do not resell the raw dataset.

#### Limitations of the Manta Email Scraper

These constraints are real; read them before building a campaign on the Manta Email Scraper.

- `username` and `profileUrl` resolve on only some rows - 5 of 10 in our measured run. Google often prints a company name without an attributable handle, so those fields come back `null` and empty. This is a Google limitation, not a bug.
- Only finds companies whose email is publicly visible in Google's index.
- Google caps a single query at roughly 300 results, which is why query expansion exists.
- `possiblyTruncated: true` means Google's snippet ellipsis touched the address - verify before sending.
- Requires the Apify GOOGLE_SERP proxy; the Manta Email Scraper cannot run without Apify proxy credentials.
- Free Apify plans are capped at 100 emails per run; paid plans are uncapped.
- Results vary with keywords, domains and location, and no volume is guaranteed.
- Revenue bands, employee counts and founding years are not extracted; the output schema is the fourteen fields above.

#### Manta Email Scraper FAQ

#### How many results should I expect from the Manta Email Scraper?

Our measured run parsed 10 blocks, named a business in all 10, and produced 10 unique emails. Totals scale with the number of cities and trades you queue, and no volume is guaranteed.

#### Why is `profileUrl` empty on half my rows?

Google does not always expose an attributable handle for a Manta listing. When it does not, `username` is `null` and `profileUrl` is empty, but `accountName`, `fullName` and `email` are still populated.

#### Does the Manta Email Scraper use the Manta API?

No. It never logs in, never calls a Manta API and never opens the Manta website. Everything comes from publicly indexed Google results.

#### Does it return revenue or employee-count data?

No. The Manta Email Scraper writes the fourteen output fields listed above. Some of that context may appear inside `description`, but it is not parsed separately.

#### Can I target business domains rather than webmail?

Yes. Any value in `customDomains` works, with or without the leading `@`.

#### What does `possiblyTruncated` mean?

Google's snippet ellipsis touched the email, so the address may be cut short. Verify or exclude those rows before an outbound send.

#### Do I need Apify proxy credentials?

Yes. The Manta Email Scraper runs on the Apify GOOGLE_SERP proxy and cannot operate without it.

#### How do I cover an entire state?

Run the Manta Email Scraper one city at a time and merge datasets. It beats Google's per-query cap far more effectively than a single statewide query.

#### Is the free plan enough?

For evaluation, yes - it caps a run at 100 emails. Paid plans remove the cap.

#### Can a run resume after a migration?

Yes. State is kept in the key-value store keyed by an input hash and saved on `PERSIST_STATE`, `MIGRATING` and `ABORTING` events.

#### Which sibling Actors pair best with this one?

Add the [Yellow Pages Email Scraper](https://apify.com/leads-scraper/yellow-pages-email-scraper) for consumer-facing trades, the [Better Business Bureau Email Scraper](https://apify.com/leads-scraper/better-business-bureau-email-scraper) for accredited operators, and the [Bizapedia Email Scraper](https://apify.com/neuro-scraper/bizapedia-email-scraper) when you need the registered entity behind a trading name.

### Related Actors

| Actor | What it collects |
|---|---|
| [Manta Email and Phone Number Scraper](https://apify.com/leads-scraper/manta-email-and-phone-number-scraper) | Emails and phone numbers from Manta |
| [Manta Phone Number Scraper](https://apify.com/leads-scraper/manta-phone-number-scraper) | Public phone numbers from Manta |
| [Angi Email Scraper](https://apify.com/leads-scraper/angi-email-scraper) | Public contact emails from Angi |
| [Bark Email Scraper](https://apify.com/leads-scraper/bark-email-scraper) | Public contact emails from Bark |
| [Better Business Bureau Email Scraper](https://apify.com/leads-scraper/better-business-bureau-email-scraper) | Public contact emails from Better Business Bureau |
| [Bizapedia Email Scraper](https://apify.com/neuro-scraper/bizapedia-email-scraper) | Public contact emails from Bizapedia |
| [Brownbook Email Scraper](https://apify.com/neuro-scraper/brownbook-email-scraper) | Public contact emails from Brownbook |
| [Callupcontact Email Scraper](https://apify.com/neuro-scraper/callupcontact-email-scraper) | Public contact emails from CallUpContact |
| [Capterra Email Scraper](https://apify.com/leads-scraper/capterra-email-scraper) | Public contact emails from Capterra |
| [Clutch Email Scraper](https://apify.com/leads-scraper/clutch-email-scraper) | Public contact emails from Clutch |
| [Crunchbase Email Scraper](https://apify.com/leads-scraper/crunchbase-email-scraper) | Public contact emails from Crunchbase |
| [Cybo Email Scraper](https://apify.com/neuro-scraper/cybo-email-scraper) | Public contact emails from Cybo |
| [Cylex Email Scraper](https://apify.com/neuro-scraper/cylex-email-scraper) | Public contact emails from Cylex |
| [EC21 Email Scraper](https://apify.com/neuro-scraper/ec21-email-scraper) | Public contact emails from EC21 |
| [Europages Email Scraper](https://apify.com/leads-scraper/europages-email-scraper) | Public contact emails from Europages |
| [ExportHub Email Scraper](https://apify.com/neuro-scraper/exporthub-email-scraper) | Public contact emails from ExportHub |
| [FindUsLocal Email Scraper](https://apify.com/neuro-scraper/finduslocal-email-scraper) | Public contact emails from FindUsLocal |
| [Foursquare Email Scraper](https://apify.com/neuro-scraper/foursquare-email-scraper) | Public contact emails from Foursquare |
| [Fyple Email Scraper](https://apify.com/neuro-scraper/fyple-email-scraper) | Public contact emails from Fyple |
| [G2 Email Scraper](https://apify.com/neuro-scraper/g2-email-scraper) | Public contact emails from G2 |
| [Hotfrog Email Scraper](https://apify.com/leads-scraper/hotfrog-email-scraper) | Public contact emails from Hotfrog |
| [Houzz Email Scraper](https://apify.com/leads-scraper/houzz-email-scraper) | Public contact emails from Houzz |
| [Infobel Email Scraper](https://apify.com/neuro-scraper/infobel-email-scraper) | Public contact emails from Infobel |
| [Kompass Email Scraper](https://apify.com/leads-scraper/kompass-email-scraper) | Public contact emails from Kompass |
| [Lacartes Email Scraper](https://apify.com/neuro-scraper/lacartes-email-scraper) | Public contact emails from Lacartes |
| [MapQuest Email Scraper](https://apify.com/neuro-scraper/mapquest-email-scraper) | Public contact emails from MapQuest |
| [N49 Email Scraper](https://apify.com/neuro-scraper/n49-email-scraper) | Public contact emails from N49 |
| [Porch Email Scraper](https://apify.com/neuro-scraper/porch-email-scraper) | Public contact emails from Porch |
| [Scoot Email Scraper](https://apify.com/neuro-scraper/scoot-email-scraper) | Public contact emails from Scoot |
| [Thomasnet Email Scraper](https://apify.com/leads-scraper/thomasnet-email-scraper) | Public contact emails from Thomasnet |
| [Thumbtack Email Scraper](https://apify.com/leads-scraper/thumbtack-email-scraper) | Public contact emails from Thumbtack |
| [Touch Local Email Scraper](https://apify.com/leads-scraper/touch-local-email-scraper) | Public contact emails from Touch Local |
| [TradeIndia Email Scraper](https://apify.com/leads-scraper/tradeindia-email-scraper) | Public contact emails from TradeIndia |
| [Trustpilot Email Scraper](https://apify.com/leads-scraper/trustpilot-email-scraper) | Public contact emails from Trustpilot |
| [Tupalo Email Scraper](https://apify.com/leads-scraper/tupalo-email-scraper) | Public contact emails from Tupalo |
| [Yalwa Email Scraper](https://apify.com/leads-scraper/yalwa-email-scraper) | Public contact emails from Yalwa |
| [Yellow Pages Email Scraper](https://apify.com/leads-scraper/yellow-pages-email-scraper) | Public contact emails from Yellow Pages |
| [Angi Email and Phone Number Scraper](https://apify.com/neuro-scraper/angi-email-and-phone-number-scraper) | Emails and phone numbers from Angi |
| [Bark Email and Phone Number Scraper](https://apify.com/neuro-scraper/bark-email-and-phone-number-scraper) | Emails and phone numbers from Bark |
| [Better Business Bureau Email and Phone Number Scraper](https://apify.com/leads-scraper/better-business-bureau-email-and-phone-number-scraper) | Emails and phone numbers from Better Business Bureau |
| [Bizapedia Email and Phone Number Scraper](https://apify.com/neuro-scraper/bizapedia-email-and-phone-number-scraper) | Emails and phone numbers from Bizapedia |
| [Brownbook Email and Phone Number Scraper](https://apify.com/neuro-scraper/brownbook-email-and-phone-number-scraper) | Emails and phone numbers from Brownbook |

### Leave a review

If the Manta Email Scraper saved you time, please leave a star rating and a short review on the
Actor page.

Reviews are how other buyers judge whether a tool works, and they tell us which features to
build next.

If something did not work, email <neurodata.apify@gmail.com>
instead - bugs get fixed faster than they get complained about.

# Actor input Schema

## `keywords` (type: `array`):

Search terms describing the Manta accounts you want (niche, job title, industry).

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

Optional location phrase added to every query (e.g. "New York").

## `customDomains` (type: `array`):

Only emails ending with one of these domains are collected. With or without the leading @. Each domain is searched separately, so more domains means more results but a longer run - remove some for a faster, narrower search, or add your own (e.g. @company.com).

## `maxEmails` (type: `integer`):

Stop once this many unique emails have been collected.

## `countryCode` (type: `string`):

Two-letter country code for the search proxy (e.g. US, GB, DE). Empty for any.

## `expandQueries` (type: `boolean`):

Search each keyword x domain pair with several phrasings. Recommended - Google caps a single query at ~300 results.

## `queryModifiers` (type: `array`):

Extra words combined with each keyword when Expand queries is on. Tuned for Manta.

## `maxPagesPerQuery` (type: `integer`):

Google rarely returns more than ~30 pages for one query.

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

How many queries run in parallel.

## Actor input object example

```json
{
  "keywords": [
    "small business",
    "contractor"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "maxEmails": 20,
  "countryCode": "",
  "expandQueries": true,
  "queryModifiers": [
    "email",
    "contact",
    "enquiries",
    "owner",
    "get a quote"
  ],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

# Actor output Schema

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

Records produced by Manta Email Scraper, stored in the run's default dataset.

# 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 = {
    "keywords": [
        "small business",
        "contractor"
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com"
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "enquiries",
        "owner",
        "get a quote"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("leads-scraper/manta-email-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 = {
    "keywords": [
        "small business",
        "contractor",
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com",
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "enquiries",
        "owner",
        "get a quote",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("leads-scraper/manta-email-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 '{
  "keywords": [
    "small business",
    "contractor"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "countryCode": "",
  "queryModifiers": [
    "email",
    "contact",
    "enquiries",
    "owner",
    "get a quote"
  ]
}' |
apify call leads-scraper/manta-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,leads-scraper/manta-email-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/Km65cZxp8qA2m1CV2/builds/vVmoxFddzTdOLItpK/openapi.json
