# Instagram Profile Scraper - Bio, Followers, Email & Posts (`zaver.api/instagram-profile-scraper`) Actor

Scrape any public Instagram profile in bulk - bio, follower and following counts, posts, category, verification, links, and public email, phone and WhatsApp - optionally with latest posts. No login. $1.49 per 1,000 profiles, cheaper than the $1.60+ alternatives. Export CSV, JSON, Excel.

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

## Pricing

from $0.99 / 1,000 per posts

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/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 Profile Scraper — Followers, Bio, Email & Category in Bulk

**Look up hundreds of public Instagram profiles in one run.** Paste a list of
usernames and export follower and following counts, bio text, business category,
public email, external links and verified status to CSV, Excel or JSON. No login,
no API key, no Business account.

Built for bulk: this is the Actor you point at a shortlist of 500 creators when you
need real numbers instead of a media kit.

### What data does the Instagram Profile Scraper extract?

#### Audience size fields

| Field | Description |
|---|---|
| `followers` | Exact follower count, not the rounded figure the app shows |
| `following` | How many accounts the profile follows |
| `posts_count` | Total posts published |

#### Contact fields

| Field | Description |
|---|---|
| `public_email` | Contact email business accounts expose |
| `email` | Same address, normalised for convenience |
| `bio_links` | Array of links in the bio, including link-in-bio services |
| `external_url` | Primary website link |
| `has_contact` | Whether any contact detail was found |

#### Identity fields

| Field | Description |
|---|---|
| `username` | Handle |
| `user_id` | Numeric Instagram ID, stable if the handle changes |
| `full_name` | Display name |
| `biography` | Full bio text |
| `profile_pic_url` | Avatar image URL |
| `is_verified` | Blue-check status |
| `is_business` | Whether it is a business or creator account |
| `is_private` | Private accounts return this flag and no content |

#### Optional latest posts

Set `includeLatestPosts` and each profile also returns its most recent posts, up to
`latestPostsLimit`. Useful for computing an engagement rate from real likes rather
than relying on follower count alone.

### Why use this Instagram profile scraper

#### Exact follower counts

Instagram's interface rounds large numbers to `104M`. This returns `104358184` — which
matters when you are tracking growth week over week.

#### Contact details at no extra cost

`public_email` comes back in the same lookup as the profile data. No second call, no
enrichment step, no extra charge.

#### Bulk by design

The input is a list of usernames, not a single URL. Pass 500 and get 500 rows.

#### Export to CSV, Excel or JSON

Download as **CSV, Excel, JSON, XML or JSONL**, or pull through the Apify API into a
CRM, a spreadsheet, or your own pipeline.

### How to use it

1. Open the Actor in Apify Console.
2. Paste usernames into **usernames** — bare handles or full profile URLs both work.
   Use **Bulk edit** to paste a long list at once.
3. Optionally enable **includeLatestPosts** and set **latestPostsLimit**.
4. **Save & Start**, then download from **Storage**.

### Input example

```json
{
  "usernames": ["nasa", "natgeo", "https://www.instagram.com/nike/"],
  "includeLatestPosts": true,
  "latestPostsLimit": 12
}
```

### Output example

```json
{
  "source": "nasa",
  "url": "https://www.instagram.com/nasa/",
  "username": "nasa",
  "user_id": "528817151",
  "full_name": "NASA",
  "biography": "Making the seemingly impossible, possible. ✨",
  "external_url": "https://www.nasa.gov",
  "public_email": "public-inquiries@hq.nasa.gov",
  "email": "public-inquiries@hq.nasa.gov",
  "bio_links": ["https://www.nasa.gov"],
  "has_contact": true,
  "is_business": true,
  "is_verified": true,
  "is_private": false,
  "followers": 104358184,
  "following": 91,
  "posts_count": 4917,
  "profile_pic_url": "https://scontent…jpg"
}
```

### Pricing

**$0.00149 per profile scraped.** Latest posts, when enabled, are billed separately at
**$0.00099 per post**. Same rates on every Apify plan, including the free one.

| What you run | Cost |
|---|---|
| 1,000 profiles | $1.49 |
| 1,000 profiles + 12 latest posts each | $1.49 + $11.88 = $13.37 |
| 10,000 profiles | $14.90 |

Not billed: usernames that do not exist, and profiles that fail to resolve. Leaving
`includeLatestPosts` off means no post charges at all.

### Use cases

#### Influencer vetting before you pay

Check the follower count a creator quoted, whether the account is verified, and
whether it is a business profile — across a whole shortlist in one run.

#### Build a contact list from a creator shortlist

`public_email` and `bio_links` turn a list of handles into an outreach list without a
separate enrichment tool.

#### Track follower growth over time

Schedule it weekly against the same list. Each run appends a dataset, so comparing
runs gives you a growth curve per account.

#### Compute engagement rate from real data

Enable `includeLatestPosts` and divide average likes plus comments by `followers` —
the standard formula, computed from figures you can audit rather than a third-party
score.

#### Qualify leads before outreach

`is_business`, `followers` and `biography` let you filter a large list down to the
accounts worth contacting.

### FAQ

**How do I get an Instagram follower count in bulk?**
Paste your usernames into the `usernames` field and run it. Each row returns exact
`followers`, `following` and `posts_count`. Hundreds of profiles in a single run.

**Can I scrape Instagram profiles without an API key?**
Yes. Nothing to register or connect. Instagram's official Graph API requires app
review, a Business account and a linked Facebook Page, and only covers accounts you
own. This reads public profiles directly.

**How does an Instagram profile scraper find email addresses?**
Business and creator accounts can publish a public contact email, which Instagram
exposes on the profile. This Actor returns it as `public_email`. Accounts that have
not published one return `has_contact: false` — typically a little over half of
creator accounts do publish one.

**How much does it cost to scrape 10,000 Instagram profiles?**
$14.90 — a flat $0.00149 per profile on every plan, including the free tier. Latest
posts, if enabled, are billed separately at $0.00099 each.

**Can I calculate an Instagram engagement rate with this Actor?**
Yes. Enable `includeLatestPosts`, then compute (average likes + average comments) ÷
followers × 100. Because the raw per-post figures are returned, you can verify the
number rather than trusting a score.

**Does it work on private Instagram accounts?**
Partially. A private account returns profile-level fields such as follower count and
bio with `is_private: true`, but no posts. Private accounts are still counted as a
profile result.

**Can I scrape Instagram bio links and link-in-bio pages?**
Yes. `bio_links` returns every link on the profile and `external_url` the primary one,
including Linktree and similar services.

**Can I schedule bulk Instagram profile exports?**
Yes, with Apify's scheduler. Each run appends a new dataset, which is what makes
week-over-week follower tracking possible.

**Is it legal to scrape Instagram profiles?**
This Actor collects only publicly available data and never accesses private content.
Public data can still be personal data under GDPR and similar regulations — including
email addresses — so only collect and store what you have a legitimate reason to
process. See Apify's guidance on the legality of web scraping.

### Integrations

Connect to **Make, Zapier, n8n, Slack, Google Sheets, Google Drive, Airbyte** and
GitHub, or use webhooks on run completion. Official **Node.js** and **Python** SDKs
are available, and the Apify MCP server lets an AI agent call this Actor directly.

### Related Instagram scrapers

- [Instagram Scraper](https://apify.com/zaver.api/instagram-scraper) — all-in-one: posts, reels, comments, profiles, hashtags, places and search
- [Instagram Email & Contact Extractor](https://apify.com/zaver.api/instagram-email-contact-extractor) — contact-first: email, phone and links, billed only when a contact is found
- [Instagram Post Scraper](https://apify.com/zaver.api/instagram-post-scraper) — posts and carousels from profiles, hashtags or locations
- [Instagram Followers Scraper](https://apify.com/zaver.api/instagram-followers-scraper) — export the follower or following list of any profile
- [Instagram Hashtag Scraper](https://apify.com/zaver.api/instagram-hashtag-scraper) — discover creators and leads by topic

***

Built and maintained by **Zaver**. For bugs, feature requests or custom data needs,
open an issue on this Actor.

# Actor input Schema

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

Instagram usernames or profile URLs to scrape, one per line. Example: <code>nasa</code>, <code>@natgeo</code>, <code>https://www.instagram.com/nike/</code>.

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

Embed each profile's most recent posts (caption, likes, comments, views, media links) in the row. Adds one lookup per profile, billed as an add-on (see pricing).

## `latestPostsLimit` (type: `integer`):

How many recent posts to embed when 'Include latest posts' is on (max 50).

## Actor input object example

```json
{
  "usernames": [
    "nasa",
    "natgeo"
  ],
  "includeLatestPosts": false,
  "latestPostsLimit": 12
}
```

# Actor output Schema

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

One dataset item per profile with bio, counts, category, contacts and links.

## `resultsCsv` (type: `string`):

The same records as a CSV download, ready for Excel, Sheets or a CRM.

## `runSummary` (type: `string`):

Counts for the run: profiles scraped, emails found, errors.

# 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"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("zaver.api/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",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("zaver.api/instagram-profile-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": [
    "nasa",
    "natgeo"
  ]
}' |
apify call zaver.api/instagram-profile-scraper --silent --output-dataset

```

## MCP server setup

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