# Instagram Email Scraper: Emails, Phones, WhatsApp (`deepmine/instagram-email-scraper`) Actor

Instagram email scraper: give a list of Instagram usernames and get each profile's emails, phone and WhatsApp numbers from its bio, link-in-bio page, website, YouTube and TikTok, plus followers, engagement, category, links and the Contact button type. No login, no cookies.

- **URL**: https://apify.com/deepmine/instagram-email-scraper.md
- **Developed by:** [DeepMine](https://apify.com/deepmine) (community)
- **Categories:** Social media, Lead generation
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.49 / 1,000 profiles

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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

## Instagram Email Scraper: Emails, Phones, WhatsApp

Instagram email scraper: paste a list of Instagram usernames and get each profile's emails, phone numbers and WhatsApp numbers, from its bio and from the pages it links to (its link-in-bio page, website and contact page, YouTube channel and TikTok profile), with where each one was found, the Contact button's type, followers, engagement, category and links. One row per profile, no login.

| 🏷️ Username | 📬 Emails | ☎️ Phones | 🔎 Found On | 👥 Followers |
|---|---|---|---|---|
| russanddaughters | info@russanddaughters.com | 2124754880 | website | 251,101 |
| milkbarstore | help@milkbarstore.com | 3475779504 | website | 881,110 |
| clairepthomas | hi@clairepthomas.com | - | link page | 1,193,722 |

<sub>Collected 2026-10-07 with the prefilled input (10 New York food businesses and fitness creators). Found On = where the business email was found.</sub>

**$2.19 per 1,000 profiles** on the Starter plan ($2.59 Free, $2.09 Scale, $1.49 Business). The prefilled run (10 profiles) costs at most $0.02 ($0.03 on Free). Emails and phones are included when the profile publishes one, and so are bio, links, followers, engagement and Reels views. No start fee, no minimum.

### What you get

- **Every email address found**, in `emails`: the ones written in the bio first, then the ones on the profile's own pages. `businessEmail` is the best business inbox found and `businessContactSource` says where: `link page`, `website`, `youtube`, `tiktok` or `instagram`. In our test runs on Apify (2026-10-07) 9 of the 10 prefilled profiles and 36 of 68 fitness creators came with at least one email.
- **Phone and WhatsApp numbers**, in `phones` and `whatsappNumbers`: numbers written in the bio, WhatsApp links in the bio, and the tel: and WhatsApp links or listed telephone on the profile's own pages. Businesses publish them far more often than creators (2 of the 4 prefilled food businesses, none of 68 fitness creators).
- **Where it looks**: the bio; the link-in-bio page (Linktree, Beacons, hoo.be, Stan, ShopMy, Carrd and 15 more); the profile's own website and up to two of its contact or about pages; and the YouTube channel and TikTok profile those pages link to. `pagesScanned` lists the pages read and `linkPageLinks` where the link-in-bio page points, so you can check every address.
- **Only the profile's own inboxes**: a website counts only when its name matches the handle or display name, and only addresses on its own domain or a personal inbox (Gmail, Outlook...) are kept. Shops, brand checkouts and link platforms' own inboxes (hello@shopmy.us, info@liketoknow.it) are left out.
- **The Contact button's type and the business address**: `businessContactMethod` (CALL, EMAIL, TEXT, DIRECTION) and the street, city, ZIP and coordinates when the business shows them, plus the story highlight count.
- **The whole profile at no extra cost**: name, full bio, website and every bio link, category, account type, verified and private flags, exact followers, following and posts, average likes and comments, engagement rate, last post date, the views of the latest 12 reels, Threads handle, linked Facebook page and every account flag Instagram shows visitors.
- **One row per profile, in your order**, charged once even if you list it twice. Unknown and age-restricted profiles are listed in the run summary and never charged.
- **No login, no cookies, no account of yours involved.** The Actor reads only what Instagram and the profile's own pages show to any visitor.

Typical uses: turning an influencer or creator shortlist into an outreach sheet, collecting the emails and phones of local businesses you found on Instagram, and enriching a CRM list of Instagram handles.

### Input

```json
{
  "usernames": ["russanddaughters", "@milkbarstore", "https://www.instagram.com/gymdad_jim/"],
  "includeContactDetails": true
}
```

- **📇 Instagram profiles**: usernames, @usernames or profile URLs, one per line (up to 1,000 per run).
- **📬 Search their own pages for contacts**: on by default. Off = bio emails and phones only, a few seconds faster per profile.
- **📈 Include followers and engagement**: on by default, included in the price.
- **Advanced**: Max profiles (caps the run's cost), Include Reels views (on), Include latest posts (off; adds each profile's latest 6 posts), Proxy.

### Output

One row per profile. The dataset's **📇 Contacts** view shows the emails, phones, where they were found, the Contact button, category, website and followers; **📊 Overview**, **🔎 Details**, **📈 Stats** and **🎬 Reels** show the rest. The run's OUTPUT record (🧾 Run summary) counts the profiles with an email and with a phone and lists each input's status (found, not found, age-restricted).

#### Output fields

- `profilePicUrl`: profile picture (150x150). Instagram signs picture links; they stop working after a few days.
- `fullName`: display name.
- `biography`: full bio.
- `biographySnippet`: first 50 characters of the bio.
- `username`: the handle, without @.
- `profileUrl`: https://www.instagram.com/<username>/.
- `businessCategoryName`: the category the profile shows (Digital creator, Athlete, Nonprofit organization...); null when it hides it (most creators do: about a third of rows in our runs of the prefilled input have one).
- `externalUrl`: the profile's website (its first bio link).
- `contactEmail`: an email address written in the bio or name, when there is one (about half of the rows in our runs of the prefilled input).
- `contactPhone`: a phone number written in the bio or name, or a WhatsApp number from the bio links, when there is one; Instagram's business phone comes first when it sends one. Rare for creators.
- `businessContactMethod`: what the profile's Contact button does (CALL, EMAIL, TEXT, DIRECTION), when it has one.
- `businessPhoneNumber`: a business phone from the profile's own website or link-in-bio page (tel: or WhatsApp links, the site's listed telephone), digits only, when there is one. Instagram hides the Contact button's own number from visitors who aren't logged in.
- `businessEmail`: a business email from the profile's own link-in-bio page, website (its contact page too), or the YouTube channel or TikTok profile those pages link to, when one is published there. On a website only addresses on the site's own domain or a personal inbox count, never a shop's or a brand's.
- `businessContactSource`: where `businessEmail` (else `businessPhoneNumber`) was found: `link page`, `website`, `youtube`, `tiktok` or `instagram`.
- `emails`: every email address found, the bio's first, then the business email, then the ones on the profile's own pages. Inboxes of link and shop platforms (Linktree, ShopMy, LTK...) are left out.
- `phones`: every phone number found, the bio's (and its WhatsApp links') first, then the own pages' (digits only).
- `whatsappNumbers`: the WhatsApp numbers (wa.me links) in the bio links and on the profile's own pages, as +<digits>.
- `bioLinks`: every link in the bio, as `{url, title, linkType, lynxUrl, isPinned, imageUrl, linkId, mediaType, mediaAccentColorHex, creationSource}`.
- `linkPageLinks`: where the profile's link-in-bio page (Linktree, Beacons, hoo.be...) sends visitors, up to 20 links.
- `pagesScanned`: the profile's own pages read for contacts, in order.
- `isVerified`: has the blue check.
- `isPrivate`: private account.
- `isBusinessAccount`: a business account (account type business). Instagram sends its own business flag as false to visitors who aren't logged in, so the Actor sets it from the account type; the Business account filter uses the same rule.
- `isProfessionalAccount`: a business or creator account.
- `accountType`: personal, business or creator.
- `followersCount`: exact follower count.
- `followsCount`: accounts it follows.
- `postsCount`: exact number of posts.
- `hasReels`: the profile has reels (Instagram doesn't show visitors a reel count).
- `avgLikes`: average likes on its latest posts (up to 6; posts that hide likes are left out).
- `avgComments`: average comments on its latest posts.
- `engagementRate`: (average likes + average comments) / followers, in percent (1.09 = 1.09%).
- `lastPostAt`: when its newest post was published (UTC).
- `reelsMedianViews`: median views of its latest reels (up to 12, pinned ones included), as the reels tab shows them. These are Instagram's play counts, so they run higher than the older `videoViewCount` other Actors return (2.6 to 7 times higher on the same 8 reels in our check).
- `reelsAvgViews`: average views of those reels.
- `reelsAvgLikes`: average likes on those reels (reels that hide likes left out).
- `reelsAvgComments`: average comments on those reels.
- `reelsViewsToFollowers`: median reel views over followers, in percent.
- `lastReelAt`: when the newest of those reels was posted (UTC; from the reel's id, accurate to about a minute).
- `highlightReelCount`: the number of story highlights.
- `latestPosts`: with **Include latest posts** on: its latest posts (up to 6, pinned ones included), each with id, type (Image, Video, Sidecar), shortCode, url, caption, hashtags, mentions, likesCount, commentsCount, timestamp, displayUrl, dimensionsWidth, dimensionsHeight, isPinned, paidPartnership, sponsors, coauthors, locationName, locationId and childPostsCount (Apify's Instagram Profile Scraper's latestPosts names).
- `latestReels`: its latest reels (up to 12, pinned ones included), each with shortCode, url, playCount (views), likeCount, commentCount, postedAt and isPinned.
- `bioMentions`: usernames the bio links to (@sweat...).
- `bioHashtags`: hashtags the bio links to.
- `pronouns`: pronouns the profile shows.
- `threadsUsername`: Threads handle, when the profile shows its Threads badge.
- `isActiveOnThreads`: the profile shows its Threads badge.
- `linkedFacebookPage`: the Facebook page the profile links, as `{id, name}`, when it shows one.
- `addressStreet`: business street address, only for businesses that show an address (rare; null otherwise).
- `city`: business city, the same way.
- `zipCode`: business ZIP or postal code, the same way.
- `addressLatitude`: the business address's latitude, the same way.
- `addressLongitude`: the business address's longitude, the same way.
- `transparencyLabel`: Instagram's label for state-controlled media and similar accounts, when shown (rare).
- `transparencyProduct`: where Instagram shows that label.
- `isMemorialized`: a memorialized account.
- `isEmbedsDisabled`: the profile turned off embedding its posts on other sites.
- `isUnpublished`: Instagram's unpublished-account flag.
- `hasStoryArchive`: the account keeps a story archive (Instagram sends it only to logged-in users, so usually null).
- `hasProfilePic`: the account has a profile picture (usually null for visitors who aren't logged in).
- `latestStoryAt`: when its newest story went up (UTC), when Instagram shows it (usually null).
- `hideCreatorMarketplaceBadge`: the profile hides its creator marketplace badge.
- `isRegulatedC18`: Instagram marks the account as regulated 18+ content (alcohol, gambling and similar).
- `isCoppaEnforced`: Instagram applies children's-privacy (COPPA) rules to the account (usually null).
- `isCannes`: Instagram's `is_cannes` flag, passed through as sent.
- `hasLongformMedia`: Instagram's `has_longform_media` flag: the account has long-form videos.
- `shouldShowCategory`: the profile shows its category on its page.
- `showAccountTransparencyDetails`: Instagram shows the "About this account" details for it.
- `profilePicGenaiToolInfo`: Instagram's AI-tool info for the profile picture, when it has any.
- `externalUrlLinkshimmed`: the website as Instagram links it (through l.instagram.com).
- `profilePicUrlHD`: full-size profile picture (signed link, expires after a few days).
- `seedUsername`: the profile itself (the column is kept so rows join with the Instagram Related Profiles Actor's).
- `depth`: always 0 here (the profile itself).
- `rank`: the profile's position in your list (1 = first).
- `discoveredFrom`: always null here (the Instagram Related Profiles Actor puts the profile whose suggestions listed it).
- `id`: Instagram's numeric user id.
- `fbid`: Instagram's Facebook-wide id for the account.
- `scrapedAt`: when the run collected it (UTC).

Example row (from the prefilled run on 2026-10-07, latest posts off; latestReels cut to one, picture and redirect links shortened):

```json
{
  "profilePicUrl": "https://scontent-yyz1-1.cdninstagram.com/v/t51.82787-19/565676275_18536200234011065_3872982851407481707_n.jpg?stp=...&oe=...",
  "fullName": "Claire P. Thomas",
  "biography": "Strength coach + Movement connoisseur\nMove well. Build strength. Live fully.⚡️\n⬇️ Come train for life, not the gym",
  "biographySnippet": "Strength coach + Movement connoisseur Move well. B…",
  "username": "clairepthomas",
  "profileUrl": "https://www.instagram.com/clairepthomas/",
  "businessCategoryName": "Fitness Trainer",
  "externalUrl": "https://linktr.ee/clairepthomas",
  "contactEmail": "hi@clairepthomas.com",
  "contactPhone": null,
  "businessContactMethod": "CALL",
  "businessPhoneNumber": null,
  "businessEmail": "hi@clairepthomas.com",
  "businessContactSource": "link page",
  "emails": [
    "hi@clairepthomas.com"
  ],
  "phones": null,
  "whatsappNumbers": null,
  "bioLinks": [
    {
      "url": "https://linktr.ee/clairepthomas",
      "title": null,
      "linkType": "external",
      "lynxUrl": "https://l.instagram.com/?u=https%3A%2F%2Flinktr.ee%2Fclairepthomas&e=...",
      "isPinned": false,
      "imageUrl": null,
      "linkId": "17957283679759516",
      "mediaType": "none",
      "mediaAccentColorHex": null,
      "creationSource": "NONE"
    }
  ],
  "linkPageLinks": [
    "https://www.clairepthomas.com/cpt-fit-app",
    "https://my.playbookapp.io/claire-thomas/programs/comeback-core-challenge/41587",
    "https://fullcirclelife.net",
    "https://docs.google.com/forms/d/e/1FAIpQLSc31xA3c87ZeUAhGRSFwCNC1lI-aeFeoHSwdM-1TM1vVrj8Aw/viewform?usp=preview",
    "https://www.clairepthomas.com/apparel",
    "https://www.facebook.com/groups/1084753391691702/?fref=nf",
    "https://1stphorm.com/cpt"
  ],
  "pagesScanned": [
    "https://linktr.ee/clairepthomas",
    "https://www.clairepthomas.com/apparel",
    "https://www.clairepthomas.com/contact",
    "https://www.clairepthomas.com/cpt-fit-app"
  ],
  "isVerified": true,
  "isPrivate": false,
  "isBusinessAccount": false,
  "isProfessionalAccount": true,
  "accountType": "creator",
  "followersCount": 1193722,
  "followsCount": 1332,
  "postsCount": 1832,
  "hasReels": true,
  "avgLikes": 6133,
  "avgComments": 160,
  "engagementRate": 0.53,
  "lastPostAt": "2026-08-30T18:17:19Z",
  "reelsMedianViews": 95484,
  "reelsAvgViews": 916332,
  "reelsAvgLikes": 43764,
  "reelsAvgComments": 407,
  "reelsViewsToFollowers": 8,
  "lastReelAt": "2026-08-19T17:25:17Z",
  "highlightReelCount": 13,
  "latestPosts": null,
  "latestReels": [
    {
      "shortCode": "C7zEgUkp1kE",
      "url": "https://www.instagram.com/reel/C7zEgUkp1kE/",
      "playCount": 9744439,
      "likeCount": 327998,
      "commentCount": 4337,
      "postedAt": "2024-06-04T14:58:21Z",
      "isPinned": true
    }
  ],
  "bioMentions": null,
  "bioHashtags": null,
  "pronouns": null,
  "threadsUsername": null,
  "isActiveOnThreads": false,
  "linkedFacebookPage": null,
  "addressStreet": null,
  "city": null,
  "zipCode": null,
  "addressLatitude": null,
  "addressLongitude": null,
  "transparencyLabel": null,
  "transparencyProduct": null,
  "isMemorialized": false,
  "isEmbedsDisabled": false,
  "isUnpublished": false,
  "hasStoryArchive": null,
  "hasProfilePic": null,
  "latestStoryAt": null,
  "hideCreatorMarketplaceBadge": false,
  "isRegulatedC18": false,
  "isCoppaEnforced": null,
  "isCannes": false,
  "hasLongformMedia": false,
  "shouldShowCategory": true,
  "showAccountTransparencyDetails": true,
  "profilePicGenaiToolInfo": null,
  "externalUrlLinkshimmed": "https://l.instagram.com/?u=https%3A%2F%2Flinktr.ee%2Fclairepthomas&e=...",
  "profilePicUrlHD": "https://scontent-yyz1-1.cdninstagram.com/v/t51.82787-19/565676275_18536200234011065_3872982851407481707_n.jpg?stp=...&oe=...",
  "seedUsername": "clairepthomas",
  "depth": 0,
  "rank": 6,
  "discoveredFrom": null,
  "id": "462667064",
  "fbid": "17841400331927229",
  "scrapedAt": "2026-10-07T17:51:15Z"
}
```

### Pricing

Pay per result: you pay for each profile delivered, never for usernames that don't exist or that Instagram hides (age-restricted accounts), and never twice for the same profile.

| Plan | Per 1,000 profiles (emails, phones and WhatsApp numbers when published; bio, links, followers, engagement and Reels views included) |
|---|---|
| Free | $2.59 |
| Starter | $2.19 |
| Scale | $2.09 |
| Business | $1.49 |

Set a maximum cost on the run and the Actor stops at or before it. Proxies are included: everything is read through Apify's datacenter proxy.

### Good to know

- **Hidden from visitors who aren't logged in**: the phone number and email behind a business's Contact button. Instagram sends both as null without a login (the button's type and the business address do come through). Some email extractors fill them by logging in on their side; this Actor never logs in, so it finds emails and phones where profiles publish them: the bio, the link-in-bio page, the website, YouTube and TikTok. A profile that publishes its inbox nowhere but behind the Contact button comes without one.
- **Hit rates depend on the list**: in our runs on Apify (2026-10-07), the prefilled list (food businesses and creators who publish their inbox) gave an email for 9 of 10 profiles and a phone for 2; 68 fitness creators gave an email for 36 and a phone for none.
- **Speed**: rows stream into the dataset in your order as each profile's pages are read. In our runs on Apify (2026-10-07, default 256 MB), the first row arrived 0.4 to 1.4 s after the Actor started reading, 5 profiles took 3.5 to 5.3 s in 9 of 10 runs (1.2-1.6 s of the slower ones was Apify loading the Actor onto a new server), the prefilled 10 took about 5.8 s and 68 creators about 32 s.
- **Private accounts** come with their name, bio, bio email and follower count (Instagram shows no posts or reels for them).
- **Not found**: unknown or renamed usernames and age-restricted accounts (alcohol brands, for example) are listed in the run summary and not charged; the rest of the run continues. Five profiles failing in a row stop the run with a clear message (Instagram refusing visitors at that moment) instead of retrying a long list.
- **Need lookalikes too?** The [Instagram Related Profiles](https://apify.com/deepmine/instagram-related-profiles) Actor finds the accounts Instagram suggests next to a profile, with the same columns.

### Feedback

Found a bug or a missing field? Open an issue in the Issues tab. If the Actor saves you time, a short review on its Store page helps others find it.

# Actor input Schema

## `usernames` (type: `array`):

Profiles to get contacts for, one per line: a username (natgeo), @username or profile URL (https://www.instagram.com/natgeo/). One row per profile. You pay per profile delivered; unknown and age-restricted profiles are free.

## `includeContactDetails` (type: `boolean`):

Reads each profile's link-in-bio page, website (and its contact page) and the YouTube or TikTok they link to for emails, phones and WhatsApp numbers. Included in the price; off = bio only, faster.

## `includeStats` (type: `boolean`):

Adds exact follower and post counts, average likes and comments, engagement rate and last post date. Included in the price; off = slightly faster.

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

Stop after this many profiles. You pay per profile, so this caps the run's cost. Profiles come in the order of your list.

## `contactSearchSeconds` (type: `number`):

How long the search for each profile's email and phone may take. Longer reads more of its pages (a shop's events or FAQ page, a creator's YouTube channel) and finds more addresses; shorter is faster.

## `includeReels` (type: `boolean`):

Adds each profile's latest reels (up to 12) with their views, likes and comments, plus median and average reel views, views over followers and the last reel's date. Included in the price: one more quick datacenter request per profile.

## `includeLatestPosts` (type: `boolean`):

Adds each profile's latest posts (up to 6) with caption, hashtags, likes, comments, time, image, location and coauthors. Free: no extra charge; rows get bigger.

## `mode` (type: `string`):

profiles = one row per input profile (this listing's job); related = the accounts Instagram suggests for them instead.

## `includeDetails` (type: `boolean`):

Adds each profile's full bio, bio links, website, category, account type, contact email (when the bio shows one), following count, linked Facebook page and more. Included in the price; turn it off only for a slightly faster list.

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

Apify Proxy (datacenter) is the default and reads everything. Where Instagram refuses a datacenter IP (an age-restricted profile, a retry), the Actor uses a little Apify residential on its own, at no extra cost to you.

## Actor input object example

```json
{
  "usernames": [
    "russanddaughters",
    "milkbarstore",
    "levainbakery",
    "dominiqueansel",
    "gymdad_jim",
    "clairepthomas",
    "evaxpilates",
    "brendaantonn",
    "hollyjobrooks",
    "lizbethponceh"
  ],
  "includeContactDetails": true,
  "includeStats": true,
  "maxResults": 10000,
  "contactSearchSeconds": 4,
  "includeReels": true,
  "includeLatestPosts": false,
  "mode": "profiles",
  "includeDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "usernames": [
        "russanddaughters",
        "milkbarstore",
        "levainbakery",
        "dominiqueansel",
        "gymdad_jim",
        "clairepthomas",
        "evaxpilates",
        "brendaantonn",
        "hollyjobrooks",
        "lizbethponceh"
    ],
    "includeContactDetails": true,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("deepmine/instagram-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 = {
    "usernames": [
        "russanddaughters",
        "milkbarstore",
        "levainbakery",
        "dominiqueansel",
        "gymdad_jim",
        "clairepthomas",
        "evaxpilates",
        "brendaantonn",
        "hollyjobrooks",
        "lizbethponceh",
    ],
    "includeContactDetails": True,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("deepmine/instagram-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 '{
  "usernames": [
    "russanddaughters",
    "milkbarstore",
    "levainbakery",
    "dominiqueansel",
    "gymdad_jim",
    "clairepthomas",
    "evaxpilates",
    "brendaantonn",
    "hollyjobrooks",
    "lizbethponceh"
  ],
  "includeContactDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call deepmine/instagram-email-scraper --silent --output-dataset

```

## MCP server setup

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