# Instagram Emails Scraper (`leads-scraper/ig-fixed-email-scraper`) Actor

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

- **URL**: https://apify.com/leads-scraper/ig-fixed-email-scraper.md
- **Developed by:** [Leads Scraper](https://apify.com/leads-scraper) (community)
- **Categories:**
- **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?

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

## Instagram Email Scraper

### Instagram Email Scraper - Extract Public Emails from Instagram Bios by Keyword

The Instagram Email Scraper finds publicly published email addresses that Instagram
accounts put in their own bios, and returns them as clean, ready-to-use rows. Give the
Instagram Email Scraper a keyword such as `photographer`, `founder` or `wedding planner`,
and it returns the accounts in that niche whose bio carries a contact address.

This Instagram Email Scraper never logs in, never touches private data and never guesses an
address. Every email it returns was published by the account holder on a public profile and
indexed by Google. If an account did not publish an address, the Instagram Email Scraper
does not invent one.

***

### Key Features

| Feature | What it does |
|---|---|
| Keyword-driven search | Start the Instagram Email Scraper from a niche or job title, not from a list of handles |
| 12 email providers | Gmail, Yahoo, Outlook, Hotmail, iCloud, AOL, Proton, Live, GMX, Mail.com, Yandex and Zoho are each searched separately |
| Query expansion | Each keyword x domain pair runs as base, quoted, `intitle:` and one variant per modifier |
| Domain filtering | Only emails on the domains you list are kept |
| Obfuscation handling | Understands `name [at] domain [dot] com`, `name (at) domain`, `name @ domain.com`, zero-width characters and the full-width at sign |
| Junk filter | Rejects placeholders such as `email@`, `yourname@`, `test@`, `xxx@` and single-character locals |
| Boundary-correct matching | `@gmail.com` never matches inside `@gmail.company` or `@gmail.com.br` |
| Global deduplication | One row per unique email across every query and every page |
| Concurrency | An `asyncio` worker pool runs several queries in parallel with a shared stop signal |
| Retry logic | Up to 3 attempts per page, exponential backoff, a fresh proxy session per request |
| Block detection | CAPTCHA, "unusual traffic" and consent pages are detected and retried, never counted as empty |
| Resumable state | Progress lives in the key-value store, keyed by a hash of your input |
| Fallback parser | If Google's markup changes, a run degrades to "emails without account details", not "no emails" |
| Live dataset writes | Each lead is pushed to the dataset the moment it is found |
| Location targeting | An optional location phrase is appended to every query |

The Instagram Email Scraper parser locates each `<h3>` title and then the smallest
surrounding block. It does **not** rely on Google's CSS class names, which is why the
Instagram Email Scraper survives most search-layout changes.

***

### How the Instagram Email Scraper Works

1. You supply keywords, and optionally a location and a list of email domains.
2. The Instagram Email Scraper builds a set of public search queries - one per keyword and
   provider, plus expanded phrasings.
3. Each query is run through a search proxy and the result pages are parsed by the Instagram
   Email Scraper.
4. Addresses are extracted from the result block that belongs to the account, so the email
   and the profile in a row always belong together. This block-level matching is why the
   Instagram Email Scraper does not attach one person's address to another person's handle.
5. Obfuscated forms (`name [at] gmail [dot] com`) are normalised, and placeholder addresses
   (`youremail@gmail.com`, `name@example.com`) are discarded.
6. Rows stream into the dataset as they are found - the first results appear within seconds
   rather than at the end of the run.

### What Data Does It Extract?

The Instagram Email Scraper returns only fields that are genuinely present in public search
results. Fields a public result does not carry are left empty rather than filled with a
guess.

The Instagram Email Scraper captures the handle and canonical profile URL whenever the
public result exposes an `instagram.com/handle` path. On explore, tag and reel pages Google
often prints only a display name - in that case `username` is `null` and `profileUrl` is
empty. That is a search-engine limitation, not a defect: the email, the bio snippet and the
account label are still returned.

***

### Input Schema for the Instagram Email Scraper

| Input | Type | Default | What it does |
|---|---|---|---|
| `keywords` | array | `["manager", "founder"]` | Niches, job titles or industries to search. Required. |
| `location` | string | empty | Optional city or country added to every query. |
| `customDomains` | array | 12 providers | Only addresses on these domains are collected. |
| `maxEmails` | integer | `20` | Stop once this many unique emails are collected. |
| `countryCode` | string | empty | Two-letter country for the search proxy, e.g. `US`. |
| `expandQueries` | boolean | `true` | Search each keyword in several phrasings. Recommended. |
| `queryModifiers` | array | email, contact, business, booking, collab | Extra words paired with each keyword. |
| `maxPagesPerQuery` | integer | `30` | How deep to page each query. |
| `maxConcurrency` | integer | `5` | How many queries run in parallel. |

#### JSON input example

```json
{
  "keywords": ["wedding photographer", "event planner"],
  "location": "Chicago",
  "customDomains": ["@gmail.com", "@outlook.com", "@icloud.com"],
  "maxEmails": 200,
  "expandQueries": true
}
```

### Output Schema and Structured Data Fields

Every item the Instagram Email Scraper writes carries all 14 fields below, so your CSV, XLSX
or JSON export always has identical columns.

| Field | Meaning |
|---|---|
| `network` | Platform name |
| `keyword` | The keyword that produced the lead |
| `query` | The exact search query used |
| `title` | Raw result title |
| `accountName` | Account label printed in the result (handle or display name) |
| `fullName` | Display name parsed from a profile-style title; empty for post captions |
| `username` | URL-safe handle when the result 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 or caption snippet, cleaned of labels and engagement counters |
| `email` | Lower-cased email address |
| `emailDomain` | The matched domain, e.g. `@gmail.com` |
| `possiblyTruncated` | `true` when the snippet ellipsis touched the email - verify before sending |
| `foundAt` | ISO 8601 UTC timestamp |

#### JSON output example

```json
[
  {
    "network": "Instagram",
    "keyword": "wedding photographer",
    "query": "site:instagram.com wedding photographer \"booking\" \"@gmail.com\" \"Chicago\"",
    "title": "Elena Marsh (@elenamarshphoto) • Instagram photos and videos",
    "accountName": "elenamarshphoto",
    "fullName": "Elena Marsh",
    "username": "elenamarshphoto",
    "profileUrl": "https://www.instagram.com/elenamarshphoto/",
    "url": "https://www.instagram.com/elenamarshphoto/",
    "description": "Chicago wedding + elopement photographer. Bookings 2026 open.",
    "email": "elena.marsh.photo@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": false,
    "foundAt": "2026-09-09T11:41:07Z"
  },
  {
    "network": "Instagram",
    "keyword": "pilates studio",
    "query": "site:instagram.com pilates studio \"business inquiries\" \"@gmail.com\"",
    "title": "#pilatesstudio • Instagram photos and videos",
    "accountName": "Instagram",
    "fullName": "",
    "username": null,
    "profileUrl": "",
    "url": "https://www.instagram.com/explore/tags/pilatesstudio/",
    "description": "business inquiries: hello.corepilates@gmail.com ...",
    "email": "hello.corepilates@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": true,
    "foundAt": "2026-09-09T11:41:52Z"
  }
]
```

The second row is the honest case: a tag page rather than a profile, so no handle exists to
build a `profileUrl` from, and the snippet ellipsis touched the address.

***

### How to Use the Instagram Email Scraper in Five Steps

1. Open the Instagram Email Scraper on Apify and click **Try for free**.
2. Enter two or three keywords that describe your target niche.
3. Optionally set a location, and trim `customDomains` if you want a faster, narrower run.
4. Set `maxEmails` to the number of leads you actually need - you are charged per result.
5. Run it, then export the dataset to CSV or Excel, or pull it through the API.

### Instagram Email Scraper Use Cases

| Use case | Who it is for | How the Instagram Email Scraper helps |
|---|---|---|
| Influencer marketing | Brands and agencies | Build an Instagram influencer contact list per niche before outreach |
| Local service prospecting | SMMA and web agencies | Combine `salon`, `dentist` or `gym` with a `location` for citywide lists |
| UGC creator sourcing | DTC e-commerce | Find creators already advertising `collab` and `dm` addresses |
| Wedding and events sales | Venues, planners, rentals | Reach photographers, florists and MUAs who publish booking emails |
| Real estate outreach | Brokerages and proptech | Collect agent emails per metro area |
| Coach and consultant outreach | B2B SaaS founders | Target `business coach`, `nutritionist`, `career coach` bios |
| Talent scouting | Management agencies | Discover unsigned creators publishing contact details |
| CRM enrichment | RevOps teams | Feed structured data straight into an existing pipeline |

***

### Why Use This Actor for Instagram Contact Discovery

Most tools ask you for a list of accounts and then check each one. The Instagram Email
Scraper works the other way round: it searches for pages that already contain an address, so
one request returns many contactable accounts instead of one profile that probably has none.
That is why the Instagram Email Scraper is fast and inexpensive on large niches.

The Instagram Email Scraper also refuses to pad results. Addresses that are placeholders,
UI text or clearly not contact routes are dropped before they reach your dataset, because a
list you cannot email is worth nothing.

### Pricing

The Instagram Email Scraper is **pay per result** - you pay for rows returned, nothing else.

| Apify plan | Price per 1,000 results |
|---|---|
| Free | $2.99 |
| Bronze | $2.89 |
| Silver | $2.69 |
| Gold and above | $2.49 |

Platform usage (compute and proxy) is billed to the account running the Instagram Email
Scraper, so the per-result price is the only charge from this Actor.

Free-plan accounts can collect up to **30 results per run**, which is enough to judge
quality before committing.

### Limitations

Worth knowing before you run the Instagram Email Scraper:

- It returns only addresses that are **already public**. Accounts that never published one
  cannot be found by any tool that respects privacy.
- Yield depends on the niche. Service businesses publish contact addresses far more often
  than personal accounts do.
- `username` and `profileUrl` are populated only when the public result exposes them. Some
  results show the text without a usable link.
- A single query is capped by the search engine at roughly 300 results, which is why query
  expansion and multiple keywords matter.
- Very large runs take longer - each additional email domain is a separate search.

### Related Actors

The Instagram Email Scraper shares its engine and output schema with every Actor below, all
part of the Social, Creator & Community family. Cross-network campaigns are the norm - most
Instagram-first businesses also maintain TikTok, Facebook and YouTube.

| Actor | What it collects |
|---|---|
| [Instagram Profile Email Scraper](https://apify.com/leads-scraper/instagram-profile-email-scraper) | Emails plus bio, follower counts and links, starting from usernames or profile URLs |
| [Facebook Email Scraper](https://apify.com/leads-scraper/facebook-email-scraper) | Public contact emails from Facebook pages and profiles |
| [TikTok Email Scraper](https://apify.com/leads-scraper/tiktok-email-scraper) | Creator collab and booking emails from TikTok results |
| [YouTube Email Scraper](https://apify.com/leads-scraper/youtube-email-scraper) | Business-inquiry emails from YouTube channel pages |
| [X Email Scraper](https://apify.com/leads-scraper/x-email-scraper) | Founder and freelancer emails from X and Twitter profiles |
| [LinkedIn Email Scraper](https://apify.com/leads-scraper/linkedin-email-scraper) | Professional contact emails from public LinkedIn profiles |
| [Pinterest Email Scraper](https://apify.com/leads-scraper/pinterest-email-scraper) | Emails from Pinterest creator and brand profiles |
| [Snapchat Email Scraper](https://apify.com/leads-scraper/snapchat-email-scraper) | Public emails from Snapchat public profile pages |
| [Reddit Email Scraper](https://apify.com/leads-scraper/reddit-email-scraper) | Emails posted publicly in Reddit threads and subreddits |
| [Threads Email Scraper](https://apify.com/leads-scraper/threads-email-scraper) | Contact emails from Threads profiles and posts |
| [Tumblr Email Scraper](https://apify.com/leads-scraper/tumblr-email-scraper) | Emails from Tumblr blogs and about pages |
| [Telegram Email Scraper](https://apify.com/leads-scraper/telegram-email-scraper) | Emails from public Telegram channels and groups |
| [Discord Email Scraper](https://apify.com/leads-scraper/discord-email-scraper) | Emails from public Discord server listings |
| [Twitch Email Scraper](https://apify.com/leads-scraper/twitch-email-scraper) | Business emails from Twitch streamer pages |
| [Vimeo Email Scraper](https://apify.com/leads-scraper/vimeo-email-scraper) | Contact emails from Vimeo creator and studio pages |
| [Dailymotion Email Scraper](https://apify.com/leads-scraper/dailymotion-email-scraper) | Emails from Dailymotion channel pages |
| [Likee Email Scraper](https://apify.com/leads-scraper/likee-email-scraper) | Emails from Likee short-video creator profiles |
| [Rumble Email Scraper](https://apify.com/leads-scraper/rumble-email-scraper) | Emails from Rumble channel pages |
| [Kick Email Scraper](https://apify.com/leads-scraper/kick-email-scraper) | Streamer contact emails from Kick profiles |
| [Quora Email Scraper](https://apify.com/leads-scraper/quora-email-scraper) | Emails from Quora answers and profile bios |
| [Medium Email Scraper](https://apify.com/leads-scraper/medium-email-scraper) | Writer contact emails from Medium profiles and posts |
| [Substack Email Scraper](https://apify.com/leads-scraper/substack-email-scraper) | Newsletter author emails from Substack publications |
| [Patreon Email Scraper](https://apify.com/leads-scraper/patreon-email-scraper) | Creator contact emails from Patreon pages |
| [Behance Email Scraper](https://apify.com/leads-scraper/behance-email-scraper) | Designer emails from Behance portfolios |
| [Dribbble Email Scraper](https://apify.com/leads-scraper/dribbble-email-scraper) | Designer and studio emails from Dribbble profiles |
| [DeviantArt Email Scraper](https://apify.com/leads-scraper/deviantart-email-scraper) | Artist commission emails from DeviantArt profiles |
| [SoundCloud Email Scraper](https://apify.com/leads-scraper/soundcloud-email-scraper) | Artist and label emails from SoundCloud profiles |
| [Mixcloud Email Scraper](https://apify.com/leads-scraper/mixcloud-email-scraper) | DJ and podcaster emails from Mixcloud profiles |
| [Goodreads Email Scraper](https://apify.com/leads-scraper/goodreads-email-scraper) | Author contact emails from Goodreads profiles |
| [Clubhouse Email Scraper](https://apify.com/leads-scraper/clubhouse-email-scraper) | Emails from Clubhouse profile bios |
| [Mastodon Email Scraper](https://apify.com/leads-scraper/mastodon-email-scraper) | Emails from Mastodon instance profiles |
| [Bluesky Email Scraper](https://apify.com/leads-scraper/bluesky-email-scraper) | Emails from Bluesky profile descriptions |
| [Zhihu Email Scraper](https://apify.com/leads-scraper/zhihu-email-scraper) | Emails from Zhihu answers and profiles |
| [VK Email Scraper](https://apify.com/leads-scraper/vk-email-scraper) | Emails from VK public pages and profiles |
| [Weibo Email Scraper](https://apify.com/leads-scraper/weibo-email-scraper) | Emails from Weibo public profiles and posts |
| [LINE Email Scraper](https://apify.com/leads-scraper/line-email-scraper) | Emails from public LINE account pages |
| [KakaoTalk Email Scraper](https://apify.com/leads-scraper/kakaotalk-email-scraper) | Emails from public KakaoTalk channel pages |
| [WeChat Email Scraper](https://apify.com/leads-scraper/wechat-email-scraper) | Emails from public WeChat account pages |
| [Bigo Live Email Scraper](https://apify.com/leads-scraper/bigo-live-email-scraper) | Host contact emails from Bigo Live profiles |
| [Lemon8 Email Scraper](https://apify.com/leads-scraper/lemon8-email-scraper) | Creator emails from Lemon8 profiles and posts |
| [Airbnb Email Scraper](https://apify.com/leads-scraper/airbnb-email-scraper) | Host contact emails from Airbnb listings |
| [Shopify Store Email Scraper](https://apify.com/leads-scraper/shopify-store-email-scraper) | Merchant emails from Shopify storefronts |

### Example: Building a Citywide Wedding Vendor List

Set `keywords` to `["wedding photographer", "wedding planner", "florist"]`, `location` to
`"Austin"` and `maxEmails` to `300`. The Instagram Email Scraper searches each keyword
across all 12 providers, expands the phrasings, and returns Austin wedding vendors with
published booking addresses - typically a few hundred rows in a single run, exportable
straight to CSV for your outreach tool.

### Instagram Email Scraper FAQ

**Does the Instagram Email Scraper need my Instagram login?**
No. It never logs in and never asks for credentials.

**Is this legal?**
The Instagram Email Scraper collects only addresses that account holders published publicly
and that are already indexed by a search engine. You remain responsible for how you contact
people, including GDPR, CAN-SPAM and local rules.

**Why did I get fewer results than `maxEmails`?**
`maxEmails` is a ceiling, not a promise. If a niche has fewer published addresses, the
Instagram Email Scraper returns what exists rather than padding the list. Widen the
keywords, add domains, or drop the location to find more.

**Can I search a specific country?**
Yes - set `location` to the city or country, and `countryCode` to route the Instagram Email
Scraper through that market.

**How do I get more results per run?**
Keep `expandQueries` on, use several related keywords, and leave all 12 email domains in
place. Those three settings decide how much of a niche the Instagram Email Scraper sees.

**Can I run the Instagram Email Scraper on a schedule?**
Yes. Add it to an Apify Schedule and the Instagram Email Scraper will run daily or weekly,
appending fresh leads to a dataset without any manual work.

**Does the Instagram Email Scraper return duplicates?**
No. Addresses are deduplicated within a run, and a resumed run continues from the addresses
it already has.

**What does `possiblyTruncated` mean?**
The search engine sometimes shortens the text it displays. When that happens the flag is set
so you know the snippet was cut, not the address.

### Support

Questions, a niche that needs tuning, or a custom variant of the Instagram Email Scraper?

**<neurodata.apify@gmail.com>**

# Actor input Schema

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

A list of keywords or queries to search for (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 @.

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

Stop once this many unique emails have been collected. A higher limit allows more results but does not guarantee them.

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

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

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

Search each keyword × domain pair with several phrasings (quoted, intitle, plus the modifiers below). Strongly recommended - Google caps a single query at ~300 results.

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

Extra words combined with each keyword when Expand queries is on. Bios that mention these words tend to list an email.

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

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

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

How many Google queries run in parallel.

## Actor input object example

```json
{
  "keywords": [
    "manager",
    "founder"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com",
    "@outlook.com",
    "@hotmail.com",
    "@icloud.com",
    "@aol.com",
    "@protonmail.com",
    "@live.com",
    "@gmx.com",
    "@mail.com",
    "@yandex.com",
    "@zoho.com"
  ],
  "maxEmails": 20,
  "countryCode": "",
  "expandQueries": true,
  "queryModifiers": [
    "email",
    "contact",
    "business",
    "booking",
    "collab"
  ],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

# Actor output Schema

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

Records produced by Instagram Email Scraper - Fast, Advanced and Cheapest, 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": [
        "manager",
        "founder"
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com",
        "@outlook.com",
        "@hotmail.com",
        "@icloud.com",
        "@aol.com",
        "@protonmail.com",
        "@live.com",
        "@gmx.com",
        "@mail.com",
        "@yandex.com",
        "@zoho.com"
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "business",
        "booking",
        "collab"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("leads-scraper/ig-fixed-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": [
        "manager",
        "founder",
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com",
        "@outlook.com",
        "@hotmail.com",
        "@icloud.com",
        "@aol.com",
        "@protonmail.com",
        "@live.com",
        "@gmx.com",
        "@mail.com",
        "@yandex.com",
        "@zoho.com",
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "business",
        "booking",
        "collab",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("leads-scraper/ig-fixed-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": [
    "manager",
    "founder"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com",
    "@outlook.com",
    "@hotmail.com",
    "@icloud.com",
    "@aol.com",
    "@protonmail.com",
    "@live.com",
    "@gmx.com",
    "@mail.com",
    "@yandex.com",
    "@zoho.com"
  ],
  "countryCode": "",
  "queryModifiers": [
    "email",
    "contact",
    "business",
    "booking",
    "collab"
  ]
}' |
apify call leads-scraper/ig-fixed-email-scraper --silent --output-dataset

```

## MCP server setup

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