# Instagram Profile Scraper (`parseforge/instagram-profile-scraper`) Actor

Scrape Instagram profile information from public accounts. Input usernames, @handles, or profile URLs and get follower counts, biography, verification status, and website in a flat row per profile.

- **URL**: https://apify.com/parseforge/instagram-profile-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Social media, Lead generation, Automation
- **Stats:** 173 total users, 19 monthly users, 83.8% runs succeeded, 0 bookmarks
- **User rating**: 1.25 out of 5 stars

## Pricing

from $3.00 / 1,000 results

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?

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

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner.jpg)](https://apify.com/parseforge?fpr=vmoqkp)

### Instagram Profile Scraper

**Scrape Instagram profile data from any public account, up to a million per run.** Get follower counts, biography, verification status, website, and full name. No login or API key. Export to CSV, JSON, Excel, or XML.

Instagram's official API requires a business account, app review, and strict rate limits. This reads public profile pages directly, extracting structured data from any list of usernames, @handles, or profile URLs. You get a clean dataset of profile information without posts, reels, or stories.

| Who uses it | What they scrape Instagram for |
|---|---|
| Influencer marketing managers | Qualifying creator partnerships by audience size and bio keywords |
| Brand analysts | Tracking competitor follower growth and profile changes over time |
| Lead generation specialists | Building prospect lists from Instagram bios that mention specific interests |
| Academic researchers | Studying public figure verification patterns and profile completeness |

### What it does

This Actor collects Instagram profile information for a list of usernames and returns each profile as a flat row with follower counts, biography, verification status, and more.

- 👥 **Bulk username input:** Paste up to a million usernames, @handles, or profile URLs in one run.
- 📊 **Core profile metrics:** Follower count, following count, post count, full name, and biography.
- ✅ **Verification status:** See whether each account carries the blue verified badge.
- 🔗 **Bio links:** Every link the profile lists in its bio, not just the first one.
- 📁 **Flat row output:** Every profile lands as one row in your dataset, ready for spreadsheets.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

#### Every field in a row

| Field | What it is |
|---|---|
| `username`, `fullName`, `id`, `fbid`, `url` | The handle, display name, Instagram's numeric profile id, the Meta-wide id, and the profile URL |
| `followerCount`, `followsCount`, `postsCount` | Followers and following are exact. The post count is exact up to 9,999 and rounded above that, which is all Instagram publishes logged out; `postsCountIsRounded` tells you which row is which |
| `biography`, `bioLinks`, `externalUrl`, `externalUrlShimmed` | The bio text and every link listed in it |
| `isVerified`, `isPrivate`, `isMemorialized` | Blue badge, private account, memorialized account |
| `hasClips`, `highlightReelCount`, `showTextPostAppBadge` | Whether the account posts reels, how many story highlights it keeps, whether it links a Threads profile |
| `profilePicUrl`, `pronouns`, `inputUrl`, `scrapedAt` | Avatar URL, listed pronouns, the input line this row came from, and the capture timestamp |

Those are the fields Instagram serves to a logged-out visitor. Business category, business email and business phone are **not** among them: Instagram stopped serving them without a login, and this Actor returns no column rather than an always-empty one.

### What you can do with Instagram data

**📈 Track competitor growth.**

A brand analyst runs a list of 50 competitor usernames weekly to monitor follower count changes and decide when to adjust campaign spend.

**🔍 Find influencer partners.**

An agency scrapes profiles from a niche hashtag, filters by follower range and bio keywords, and shortlists creators for an outreach campaign.

**🧹 Clean a CRM list.**

A sales team feeds Instagram handles from their database through the scraper to enrich records with current follower counts and website URLs.

**📋 Audit verification status.**

A researcher collects 10,000 public figure profiles to analyze what share carry the verified badge across different categories.

### Why choose this scraper

|  | What you get |
|---|---|
| **No API registration** | Reads public profile pages directly with no app setup or OAuth flow |
| **Bulk scraping** | Handles up to a million profiles in a single run |
| **Flexible input** | Accepts plain usernames, @handles, or full instagram.com URLs |
| **Fixed schema** | Every profile returns the same fields so your pipeline never breaks |
| **No empty columns** | Only the fields Instagram actually serves logged out, so nothing arrives permanently blank |

### How it compares

This Actor focuses exclusively on profile metadata, while the other Instagram scrapers also handle posts, reels, and comments.

| Feature | ParseForge | Instagram Scraper | Instagram Reel Scraper |
|---|---|---|---|
| Profile metadata only | Yes | Not listed | Not listed |
| Bulk username input | Yes, up to 1M per run | Not listed | Not listed |
| Verification status | Yes | Not listed | Not listed |
| Post and reel content | No, profile data only | Yes | Yes |
| Reel video download | No | Not listed | Yes |

### Configure the run

Drive the Actor from a list of usernames, @handles, or profile URLs, and set a maximum number of profiles to collect per run. The Input tab lists every parameter.

Instagram stops serving profile data to an IP after a handful of lookups and returns a login wall instead, so the run needs proxies to get through a list of any size. The residential proxy is on by default and you can leave it alone: it is the setting that lets a run finish. Measured on 7 September 2026, the same ten handles returned 10 of 10 profiles through the residential pool and 2 of 10 with the proxy switched off.

A first run with the defaults:

```json
{
  "usernames": [
    "instagram",
    "cristiano",
    "leomessi",
    "therock",
    "beyonce",
    "playstation",
    "xbox",
    "ea",
    "fifa",
    "uefa"
  ],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

A larger pull:

```json
{
  "usernames": [
    "instagram",
    "cristiano",
    "leomessi",
    "therock",
    "beyonce",
    "playstation",
    "xbox",
    "ea",
    "fifa",
    "uefa"
  ],
  "maxItems": 200,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

### Pricing

Pay-per-event, with two events:

| Event | Free plan | Paid plans |
|---|---|---|
| Each profile returned | $0.0035 | from $0.003 |
| Actor start, once per run | $0.40 | from $0.375 |

Rows that could not be resolved are written to your dataset with an `error` field so you can see what happened to them, and they are **never charged**. If a run returns no profiles at all, it ends as a failed run with zero result charges; the once-per-run Actor start event is still billed, as it is on any run that starts.

| Results collected | Approximate cost |
|---|---|
| 100 results | $0.75 |
| 1,000 results | $3.90 |
| 10,000 results | $35.40 |

New Apify accounts start with $5 in free credit.

### Free users

Free-plan runs return up to 10 results as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to collect up to 1,000,000 results per run.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [Instagram Profile Scraper](https://apify.com/parseforge/instagram-profile-scraper?fpr=vmoqkp).
3. Set your inputs and any filters, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) (`run-sync-get-dataset-items`) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent live access to Instagram through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

```bash
claude mcp add --transport http apify "https://mcp.apify.com/?tools=parseforge/instagram-profile-scraper"
```

Then prompt it in plain language to run the scraper and read back the results.

### Troubleshooting

**Why am I getting no results for some usernames?**

Those rows arrive with an `error` field telling you which of two things happened. *Unavailable* means the handle does not resolve to a public profile — check the spelling and confirm it loads in a logged-out browser. *Blocked* means Instagram refused the request even after retries from fresh IPs; re-run those handles, and make sure the residential proxy is enabled. Either way you are not charged for those rows.

**Why is the follower count different from what I see in the app?**

Follower counts change constantly. The Actor captures the count at the moment of scraping. A small discrepancy is normal for active accounts.

**The run is taking a long time. Is that expected?**

A run fetches one page per handle and works ten at a time, so a list of ten profiles finishes in well under a minute. Lists of thousands take proportionally longer. If a run is close to its timeout it stops collecting 25 seconds early and writes what it has, so you get a finished dataset instead of a killed run.

**Why do I get an error when I paste profile URLs?**

Ensure each URL is on its own line and starts with 'instagram.com/' or 'www.instagram.com/'. The Actor also accepts plain usernames and @handles, which are more reliable.

**Can I scrape email addresses from bios?**

The Actor captures the full bio text. If a profile includes an email address in its bio, it will appear in the biography field of your output.

### FAQ

| Question | Answer |
|---|---|
| Does this scraper collect Instagram posts or reels? | No. This Actor scrapes profile information only: bio, follower counts, verification status, website, and similar metadata. For posts and reels, use the Instagram Scraper or Instagram Reel Scraper actors. |
| Do I need an Instagram account or login? | No login is required. The Actor reads public profile pages directly. Private accounts cannot be scraped. |
| How many profiles can I scrape in one run? | You can set the maximum up to one million profiles per run. The Actor works through your list a few profiles at a time — the pace is deliberately moderate, because hammering Instagram is what gets a run blocked. |
| Do I need to configure proxies? | No. The residential proxy is enabled by default and that is the recommended setting. Instagram rate-limits each exit IP after a handful of lookups, so a run without proxies will not get through a list of any length. |
| What input formats does the username field accept? | Plain usernames like 'nike', @handles like '@nike', and full profile URLs like 'instagram.com/nike' all work. The Actor normalizes them automatically. |
| Can I scrape private Instagram profiles? | No. Only public profiles are accessible. Private accounts will return limited or no data. |
| Does this Actor scrape Instagram Stories? | No. Stories are ephemeral content and are not included. This Actor focuses on static profile information. |
| What export formats are supported? | You can export your dataset as CSV, JSON, Excel, or XML from the Apify platform. |
| Is this Actor compliant with Instagram's terms? | The Actor reads publicly available web pages. You are responsible for using the data in compliance with applicable laws and Instagram's terms of service. |
| Can I schedule this scraper to run automatically? | Yes. Apify supports scheduled runs so you can collect profile data daily, weekly, or on any cron schedule. |
| What is the difference between this and the Instagram Scraper actor? | This Actor scrapes only profile metadata. The Instagram Scraper also collects posts, reels, hashtags, places, and comments. Choose this one when you only need profile information. |

### Related actors

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

🆘 **Need help?** Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ **Disclaimer.** This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Meta Platforms, Inc. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

# Actor input Schema

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

📝 Instagram usernames to scrape. Accepts @handles, usernames, or profile URLs (e.g., @nike, cristiano, instagram.com/therock)

## `maxItems` (type: `integer`):

How many profiles to collect per run. Free-plan accounts are capped at 10.

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

Instagram stops serving profile data to an IP after a handful of lookups and answers with a login wall instead, so residential proxies are what make a run finish. Measured 07/09/2026: 10 of 10 profiles through the residential pool, 2 of 10 with the proxy off. Leave this on.

## Actor input object example

```json
{
  "usernames": [
    "instagram",
    "cristiano",
    "leomessi",
    "therock",
    "beyonce",
    "playstation",
    "xbox",
    "ea",
    "fifa",
    "uefa"
  ],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `overview` (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": [
        "instagram",
        "cristiano",
        "leomessi",
        "therock",
        "beyonce",
        "playstation",
        "xbox",
        "ea",
        "fifa",
        "uefa"
    ],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/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": [
        "instagram",
        "cristiano",
        "leomessi",
        "therock",
        "beyonce",
        "playstation",
        "xbox",
        "ea",
        "fifa",
        "uefa",
    ],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/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": [
    "instagram",
    "cristiano",
    "leomessi",
    "therock",
    "beyonce",
    "playstation",
    "xbox",
    "ea",
    "fifa",
    "uefa"
  ],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call parseforge/instagram-profile-scraper --silent --output-dataset

```

## MCP server setup

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