# 📸 Instagram Profile Scraper — Email, Phone & Bio Leads (`gocreative.ai/instagram-profile-scraper`) Actor

Scrape any Instagram profile by username or URL: email, phone, business location, bio, links, socials, engagement, followers, posts, verification & recent posts. No login, no API key. Bulk lead gen at $2.25/1,000 profiles, cheaper than the official scraper.

- **URL**: https://apify.com/gocreative.ai/instagram-profile-scraper.md
- **Developed by:** [GoCreative AI](https://apify.com/gocreative.ai) (community)
- **Categories:** Social media, Lead generation, Business
- **Stats:** 29 total users, 18 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.25 / 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.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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 Profile Scraper — Email, Phone & Bio Leads (No Login)

**Give it Instagram usernames or profile URLs and get back clean, structured profile data — including the email and phone from the bio, business location, follower stats and computed engagement. No login, no cookies, no API key. Bulk lead generation at a flat $2.25 per 1,000 profiles — you only pay for profiles that scrape successfully.**

*instagram profile scraper · scrape instagram profiles · instagram email scraper · instagram email extractor · instagram bio scraper · instagram phone number scraper · instagram lead generator · influencer email finder · instagram lead generation · bulk instagram scraper · instagram contact scraper · instagram data extractor*

![Instagram Profile Scraper — before: paste usernames; after: table with email, phone, engagement per profile](https://api.apify.com/v2/key-value-stores/uBTlEeeYXuzTRrJew/records/listing-hero.png)

***

### What is Instagram Profile Scraper?

Instagram Profile Scraper extracts publicly available data from any Instagram profile — no session, no login, no account required. Point it at a list of usernames and it returns a complete, enriched lead row for each one: **email, phone, bio text, classified social links, business location, follower/following counts, post count, verified status, business category, and a computed engagement rate.**

Contacts are parsed from both the bio text and Instagram's dedicated business contact fields, including obfuscated formats like `name [at] domain [dot] com`. Every result is charged pay-per-event — you're **never** billed for blocked IPs, private accounts, or not-found handles.

### What Instagram profile data can I extract?

| Field | Description |
|---|---|
| `username`, `full_name`, `user_id` | Core identity |
| `email` + `email_source` | Best email found, with source (`business_email` · `public_email` · `bio`). Parses bio text including obfuscated `name [at] domain [dot] com` forms and `mailto:` links |
| `business_email`, `public_email` | Raw Instagram contact-email fields kept separately |
| `phone` + `phone_normalized` + `phone_source` | Business/public phone, E.164-normalized, plus source |
| `location` | Business address → `city`, `region`, `country`, `zip`, `street`, `latitude`, `longitude` |
| `external_url` + `bio_links` + `links` | Link-in-bio unwrapped from Instagram's `l.instagram.com` redirector |
| `socials` | Classified social handles: Twitter/X, YouTube, TikTok, Facebook, LinkedIn, Linktree, WhatsApp, Telegram, Snapchat, Pinterest, Threads, Twitch, Spotify |
| `engagement` | Computed: avg likes, avg comments, **engagement rate (%)** — great for influencer vetting |
| `followers`, `following`, `posts_count` | Audience & activity counts |
| `is_verified`, `is_business`, `is_private` | Trust and account-type flags for lead scoring |
| `business_category`, `category_name` | Niche / segmentation label |
| `recent_posts[]` | Up to 12 latest posts with likes, comments, is\_video, view\_count, and caption |

Export everything to **CSV, Excel, JSON or via the Apify API** straight from the run.

***

### How do I scrape Instagram profiles? (step-by-step tutorial)

**Step 1 — paste usernames in:**

![Input: paste Instagram usernames or profile URLs into the actor](https://api.apify.com/v2/key-value-stores/uBTlEeeYXuzTRrJew/records/input-dark.png)

**Step 2 — get clean lead data out** (export as CSV, JSON, or Excel):

![Output: username, followers, email, phone, engagement, verified](https://api.apify.com/v2/key-value-stores/uBTlEeeYXuzTRrJew/records/output-v2.png)

1. Paste any mix of **usernames** (`nasa`), **@handles** (`@natgeo`), or **full profile URLs** into the `usernames` field. One per line. Duplicates are auto-removed.
2. Set `resultsLimit` (0–12) to control how many recent posts return per profile.
3. Leave **Proxy type** on **Auto** (recommended). Run it.
4. Download your results as CSV, Excel or JSON — or pull via the Apify API.

**Example input:**

```json
{
  "usernames": ["nasa", "https://www.instagram.com/natgeo/", "@mkbhd"],
  "resultsLimit": 12,
  "proxyType": "auto"
}
```

***

### What does the Instagram profile data output look like?

Each profile returns one enriched lead row. Here's a real trimmed example (full output adds bio links, location lat/long, socials, and recent posts):

```json
{
  "username": "joes.coffee.bar",
  "full_name": "Joe's Coffee Bar",
  "email": "joe@joescoffee.com",
  "phone": "+15125550143",
  "location": { "city": "Austin", "region": "TX", "country": "United States" },
  "followers": 18432,
  "following": 941,
  "posts_count": 312,
  "engagement": { "avg_likes": 642, "engagement_rate": 3.2 },
  "is_verified": false,
  "is_business": true,
  "business_category": "Coffee Shop",
  "external_url": "https://joescoffee.com",
  "socials": { "tiktok": "https://www.tiktok.com/@joescoffee" }
}
```

Private accounts return `"is_private": true` with their full public bio + contact data (just empty `recent_posts`). Not-found handles return a clear `"not_found": true` flag — **neither is silently skipped, neither is charged**.

***

### How much does it cost to scrape Instagram profiles?

**$2.25 per 1,000 profiles** (pay-per-result). You are only charged for profiles successfully returned — blocked inputs, private accounts, and not-found handles are flagged and **not charged**.

Apify's free plan includes **$5 of monthly compute**, enough for roughly **2,200 profiles per month at zero cost**.

| Profiles | Estimated cost |
|---|---|
| 1,000 | ~$2.25 |
| 10,000 | ~$22.50 |
| 100,000 | ~$225 |

The price includes proxy cost (rotating IP pool) — no surprise add-ons.

***

### Why use this Instagram profile scraper? How is it different?

- **Most complete contact layer.** Email + phone + business location + classified social profiles + computed engagement — in one call. Most scrapers return follower counts and stop there.
- **Smart email extraction.** Pulls from the Instagram business field, the public-email field, AND the bio text (including obfuscated `name [at] domain [dot] com` forms and `mailto:` links) — higher contact-fill rate than single-source scrapers.
- **Engagement computed, not guessed.** Engagement rate (%) and tier (nano/micro/macro/mega) calculated from real post data — vet influencer quality at a glance without a separate API.
- **Reliable and no login.** Rotating proxies (cheap datacenter first, residential fallback) with a fresh IP per request — no cookies and no session to break.
- **Cheaper, pay-per-result.** A flat **$2.25/1k** — you're never charged for blocked or not-found handles.

***

### Is scraping Instagram profiles legal?

This actor collects only **publicly available** information visible to any visitor without logging in, and it does not bypass any authentication or access controls. The legal landscape has been shaped by US court decisions (including *HiQ v. LinkedIn*) confirming that scraping publicly accessible data is generally permissible.

**You are responsible for lawful use:** comply with GDPR/CCPA when storing personal data, and comply with anti-spam rules (CAN-SPAM, GDPR consent) for any outreach. Do not use scraped data for harassment or unlawful purposes. When in doubt, seek legal advice.

***

### Other Instagram scrapers in this family

- **[📸 Instagram Post Scraper](https://apify.com/colinballin/instagram-post-scraper)** — scrape a profile's recent posts with likes, comments, captions, and contact extraction.
- **[🎬 Instagram Reels Scraper](https://apify.com/colinballin/instagram-reels-scraper)** — pull reels with view counts, audio track, duration, and engagement.
- **[💬 Instagram Comments Scraper](https://apify.com/colinballin/instagram-comments-scraper)** — extract comments from any post or reel.
- **[🎵 TikTok Profile Scraper](https://apify.com/colinballin/tiktok-profile-scraper)** — the same enriched contact + engagement extraction for TikTok.

***

### Frequently asked questions

**Do I need an Instagram login, cookies, or API key?**
No. The actor uses Instagram's public profile endpoints accessed via rotating proxies — you never log in and there is no session to break.

**Where does the email come from?**
Only from **public** data on the profile: the business/professional contact email that the account owner chose to display, and any email written in the public bio (including obfuscated forms). We **cannot** retrieve private emails that aren't publicly visible — no scraper can. Contact fields are populated for accounts that publish them (typically business and creator profiles) and are `null` otherwise.

**Will it work on private accounts?**
Yes — a private account still returns its full public profile and any business contact data; only `recent_posts` comes back empty. Use the `is_private` flag to filter.

**How fast does it run?**
Pure HTTP (no browser) running requests concurrently — typically **800–1,200 profiles per minute** on the default datacenter proxy setting.

**Can I control the proxy type / cost?**
Yes. Default is **Auto** (cheap datacenter first, residential fallback for reliability). Force **Residential** for maximum reliability or **Datacenter** for the lowest cost.

**Can I call it in real time?**
Yes — the actor supports Standby mode (real-time API): call the actor endpoint with your username as input and get the profile as JSON in seconds.

**I'm getting fewer emails than expected.**
Email coverage is genuinely highest for small-business and creator profiles (the ones who publish a contact email). Large personal accounts often don't. You can increase coverage by switching `proxyType` to `"residential"` which reduces blocks.

**Support**
Open an issue on the actor page or message `colinballin` on Apify. Response within 24 hours.

# Actor input Schema

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

One per line. Bare handles, @handles, or full profile URLs all work — e.g. \["nasa", "https://www.instagram.com/natgeo/", "@mkbhd"]. Duplicates are removed automatically.

## `resultsLimit` (type: `integer`):

How many recent posts to return per profile (0–12 from the public API). Set 0 for profile + contact data only (fastest).

## `proxyType` (type: `string`):

Auto (recommended) tries cheap datacenter first and falls back to residential — high success at low cost. Residential = force most-reliable. Datacenter = cheapest, but Instagram may block more at high volume.

## Actor input object example

```json
{
  "usernames": [
    "nasa",
    "natgeo",
    "nike"
  ],
  "resultsLimit": 12,
  "proxyType": "auto"
}
```

# Actor output Schema

# 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": [
        "nasa",
        "natgeo",
        "nike"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("gocreative.ai/instagram-profile-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": [
        "nasa",
        "natgeo",
        "nike",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("gocreative.ai/instagram-profile-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [
    "nasa",
    "natgeo",
    "nike"
  ]
}' |
apify call gocreative.ai/instagram-profile-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=gocreative.ai/instagram-profile-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Gzgh1OIefRfu2LkWt/builds/kOyBZ3K75iQ441V5u/openapi.json
