# Instagram Email Phone Scraper - No Cookies (`maximedupre/instagram-b2b-phone-number-scraper`) Actor

Collect public Instagram profile leads from usernames, @handles, or profile URLs. Save public phone numbers, emails, profile metrics, business details, and contact availability in structured rows. No Instagram login or cookies are needed.

- **URL**: https://apify.com/maximedupre/instagram-b2b-phone-number-scraper.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Lead generation, Social media, Business
- **Stats:** 4 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.70 / 1,000 profile leads

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 B2B profile leads from public contact details

Sales teams, agencies, and researchers can submit public Instagram usernames, @handles, or profile URLs and get structured profile leads. The dataset returns public phone numbers and emails when present, plus profile metrics, business context, and contact availability for B2B lead research.

- Build a phone list from public business profiles with **[Instagram Business Phone Number Scraper](https://apify.com/maximedupre/instagram-b2b-phone-number-scraper/examples/instagram-business-phone-number-scraper)**.
- Collect public email addresses from submitted profiles with **[Instagram Email Scraper](https://apify.com/maximedupre/instagram-b2b-phone-number-scraper/examples/instagram-email-scraper)**.
- Review phone and email availability for each profile with **[Instagram Contact Information Scraper](https://apify.com/maximedupre/instagram-b2b-phone-number-scraper/examples/instagram-contact-information-scraper)**.
- Prepare profile context for B2B lead research with **[Instagram Business Lead Scraper](https://apify.com/maximedupre/instagram-b2b-phone-number-scraper/examples/instagram-business-lead-scraper)**.
- Find public contact details for a submitted B2B profile list with **[Instagram B2B Phone Number Scraper](https://apify.com/maximedupre/instagram-b2b-phone-number-scraper/examples/instagram-b2b-phone-number-scraper)**.

#### 📦 What each Instagram lead row contains

Each dataset row describes one submitted public Instagram profile. It includes public identity, profile counts, account flags, business context, public phone numbers and emails, and a separate status for contact availability.

#### ▶️ Check known public Instagram profiles

**Run steps**

1. Open the **Input** tab.
2. Add one public Instagram username, `@handle`, or profile URL per item.
3. Set minimum or maximum followers when you want to filter the profiles you submitted.
4. Start the Actor and open the dataset from the Output panel.

No Instagram login or cookies are needed for public profile information. Private content or information visible only after authentication is not included.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `profiles` | array of strings | Required. Add one or more public Instagram usernames, `@handles`, or profile URLs. |
| `minFollowers` | integer | Optional. Keep submitted profiles with at least this many followers. Leave it empty to skip this filter. |
| `maxFollowers` | integer | Optional. Keep submitted profiles with at most this many followers. Leave it empty to skip this filter. |

**Example input**

This small example is the public input from a successful current-beta run:

```json
{
  "profiles": [
    "@shopify"
  ]
}
```

Follower filters apply only to the profiles you submit. Use both filters to keep a follower-count range, or leave either one empty when you do not need that limit.

#### 🧾 Output

The Output panel links to the collected Instagram profile rows. Optional fields are omitted when the public profile does not provide them. Phone and email arrays can be empty, while `contactAvailability` distinguishes `available`, `none`, and `unavailable` values.

**Dataset link**

| Field | Type | What it does |
| --- | --- | --- |
| `dataset` | link | Opens the collected Instagram profile rows in the default dataset overview. |

**Profile lead row**

| Field | Type | What it does |
| --- | --- | --- |
| `username` | string | Public Instagram username. |
| `fullName` | string | Name shown on the public profile, when available. |
| `biography` | string | Public biography text, when available. |
| `followersCount` | integer | Number of followers shown on the public profile. |
| `followingCount` | integer | Number of accounts followed by the public profile. |
| `postsCount` | integer | Number of posts shown on the public profile. |
| `profileUrl` | URL string | Canonical URL of the public Instagram profile. |
| `externalUrl` | URL string | External website link shown on the public profile, when available. |
| `isVerified` | boolean | Whether Instagram marks the profile as verified. |
| `isPrivate` | boolean | Whether Instagram marks the profile as private. |
| `isBusinessAccount` | boolean | Whether Instagram marks the profile as a business account. |
| `category` | string | Business category shown on the public profile, when available. |
| `businessContactMethod` | string | Business contact method shown on the public profile, when available. |
| `businessLocation` | object | Public business and location details available for the profile, when returned. |
| `businessLocation.address` | string | Public business street address. |
| `businessLocation.city` | string | City shown for the public business location. |
| `businessLocation.coordinates` | object | Public latitude and longitude for the business location. |
| `businessLocation.coordinates.latitude` | number | Latitude of the public business location. |
| `businessLocation.coordinates.longitude` | number | Longitude of the public business location. |
| `phoneNumbers` | array of strings | Public phone numbers found in the profile. The array is empty when none are returned. |
| `emails` | array of objects | Public email entries found in the profile. The array is empty when none are returned. |
| `emails[].address` | string | Public email address found in the profile. |
| `emails[].verification` | object | Email verification details when returned. |
| `emails[].verification.deliverabilityStatus` | string | Deliverability status returned for the email address. |
| `emails[].verification.safeToSend` | boolean | Whether the returned verification marks the address as safe to send to. |
| `contactAvailability` | object | Availability of public phone and email data for the profile. |
| `contactAvailability.phoneNumbers` | string | `available`, `none`, or `unavailable` for public phone data. |
| `contactAvailability.emails` | string | `available`, `none`, or `unavailable` for public email data. |

**Genuine profile row with public contact data**

This complete row comes from a successful current-beta run:

```json
{
  "username": "leratokganyago",
  "fullName": "Lerato Kganyago",
  "biography": "Founder Of FlutterbyLKG Sanitary Pads\nAward Winning TV & Radio Broadcaster Vanessa@flutterbylkg.com. \nBooking No - 071 437-0136.",
  "followersCount": 3027738,
  "followingCount": 590,
  "postsCount": 484,
  "profileUrl": "https://www.instagram.com/leratokganyago/",
  "externalUrl": "https://on.soundcloud.com/HTgsY",
  "isVerified": true,
  "isPrivate": false,
  "isBusinessAccount": false,
  "businessContactMethod": "UNKNOWN",
  "phoneNumbers": [
    "071 437-0136"
  ],
  "emails": [
    {
      "address": "Vanessa@flutterbylkg.com",
      "verification": {
        "deliverabilityStatus": "domain_accepts_mail",
        "safeToSend": false
      }
    }
  ],
  "contactAvailability": {
    "phoneNumbers": "available",
    "emails": "available"
  }
}
```

**Genuine profile row with business location**

This complete row shows the nested location fields returned by another successful current-beta run:

```json
{
  "username": "dior",
  "fullName": "Dior Official",
  "biography": "\"Women, with their intuitive instinct, understood that I dreamed not only of making them more beautiful, but happier too.\" Christian Dior",
  "followersCount": 46622036,
  "followingCount": 9,
  "postsCount": 14646,
  "profileUrl": "https://www.instagram.com/dior/",
  "externalUrl": "http://linkin.bio/dior",
  "isVerified": true,
  "isPrivate": false,
  "isBusinessAccount": true,
  "category": "Home Services",
  "businessContactMethod": "CALL",
  "businessLocation": {
    "address": "30 avenue Montaigne",
    "city": "Paris, France",
    "coordinates": {
      "latitude": 48.86668,
      "longitude": 2.30612
    }
  },
  "phoneNumbers": [],
  "emails": [],
  "contactAvailability": {
    "phoneNumbers": "none",
    "emails": "none"
  }
}
```

#### 💳 Pricing

This Actor uses pay-per-event pricing. The pricing panel shows the current tier price for a processed public Instagram profile lead with any available contact and profile context. Empty contact arrays are represented in the row, and `contactAvailability` shows whether public contact data was available, absent, or unavailable.

#### 🔌 Integrations

Open the dataset from the Output panel, export the rows, or retrieve them through the Apify API for a B2B lead workflow.

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### What happens when a profile has no public phone number or email?

The related array is empty. `contactAvailability` marks the value as `none` when the profile has no returned public contact data, or `unavailable` when the value could not be returned.

##### Can I mix usernames, @handles, and profile URLs?

Yes. Add them together in `profiles`, with one public Instagram target per item.

##### Can I filter the profiles by follower count?

Yes. Set `minFollowers`, `maxFollowers`, or both. The filters apply only to the profiles you submit.

##### Does this Actor access private Instagram content?

No. It uses public profile information and does not collect content that is visible only after authentication.

##### Does the Actor need an Instagram login or cookies?

No. Public profile lookups do not require an Instagram login or cookies.

##### What does email verification tell me?

When verification details are returned, use `deliverabilityStatus` and `safeToSend` as the available status for that email. They do not change the public source data or guarantee a reply.

##### Can I search Instagram by keyword or hashtag?

No. This Actor processes submitted profile targets. It does not provide keyword, hashtag, location, or open-ended account discovery.

### 📝 Changelog

**v0.0** (23-09-2026)

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~instagram-b2b-phone-number-scraper/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- **[Instagram Profile Stats Scraper](https://apify.com/maximedupre/instagram-profile-stats-scraper)**: Review public follower, following, post, bio, and account details when you need profile metrics without contact extraction.
- **[Instagram Email Phone Scraper - No Cookies](https://apify.com/devil_port369-owner/instagram-email-phone-scraper-pay-per-result)**: Compare another public Instagram workflow for email and phone contact data.
- **[Instagram Scraper — Email, Phone & Influencer Lead Finder](https://apify.com/inexhaustible_glass/instagram-lead-finder)**: Explore a broader Instagram lead workflow that also covers influencer research.
- **[Instagram Email Scraper](https://apify.com/easyapi/instagram-email-scraper)**: Focus on public email collection from Instagram accounts.
- **[All Social media Phone Number Scraper](https://apify.com/danny.hub/all-in-social-media-phone-number)**: Collect phone numbers across several social platforms when Instagram is only one source.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `profiles` (type: `array`):

Add one or more public Instagram usernames, @handles, or profile URLs. Use one profile per item.

## `minFollowers` (type: `integer`):

Return only submitted profiles with at least this many followers. Leave blank to skip this filter.

## `maxFollowers` (type: `integer`):

Return only submitted profiles with at most this many followers. Leave blank to skip this filter.

## Actor input object example

```json
{
  "profiles": [
    "@examplebusiness",
    "https://www.instagram.com/examplebusiness/"
  ],
  "minFollowers": 1000,
  "maxFollowers": 100000
}
```

# Actor output Schema

## `dataset` (type: `string`):

Link to the collected Instagram profile rows.

# 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 = {
    "profiles": [
        "@shopify"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/instagram-b2b-phone-number-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 = { "profiles": ["@shopify"] }

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/instagram-b2b-phone-number-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 '{
  "profiles": [
    "@shopify"
  ]
}' |
apify call maximedupre/instagram-b2b-phone-number-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/instagram-b2b-phone-number-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/RlGd50IDEf7sBXADb/builds/irY5VyaZiJgia1oW9/openapi.json
