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

Fetch usernames, full names, bios, follower and following counts, post totals, profile photos, verification status, and external links. Supports Apify Proxy, automatic retries, checkpoint resume, and batch processing.

- **URL**: https://apify.com/datapilot/instagram-profile-scraper.md
- **Developed by:** [Data Pilot](https://apify.com/datapilot) (community)
- **Categories:** Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 scraped results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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 is a powerful Apify Actor designed to discover, track, and collect public **Instagram Profile** data directly from Instagram's own web profile API. This tool provides comprehensive **Instagram Profile** intelligence including follower count, following count, post count, biography, verification status, and profile picture for any public **Instagram Profile**. Whether you're building an influencer dashboard, tracking competitor accounts, or conducting social media research, the Instagram Profile Scraper delivers actionable **Instagram Profile** insights efficiently.

With direct Instagram API integration, checkpoint-based resume support, rate-limit-aware retries, and reliable Apify Dataset delivery, the Instagram Profile Scraper ensures comprehensive **Instagram Profile** coverage across large username lists. It focuses on key **Instagram Profile** signals including followers, following, posts, and account metadata, making it an essential tool for social media research and influencer intelligence.

***

### 📋 Table of Contents

- [Features](#-features)
- [Data Source](#-data-source)
- [How It Works](#-how-it-works)
- [Input](#-input)
- [Output](#-output)
- [Technical Stack](#-technical-stack)
- [Data Fields](#-data-fields-explained)
- [Use Cases](#-use-cases)
- [Quick Start](#-quick-start)
- [Configuration](#-configuration)
- [Performance](#-performance)
- [Billing](#-billing)
- [Important Notes](#-important-notes)
- [Changelog](#-changelog)
- [Support](#-support--feedback)
- [License & Legal](#-license--legal)

***

### 🔥 Features

- **Instagram Profile API Integration** – Direct integration with Instagram's `web_profile_info` endpoint for accurate **Instagram Profile** data.
- **Batch Username Processing** – Scrape any number of **Instagram Profile** usernames in a single run.
- **Checkpoint & Resume Support** – Automatically saves progress so an interrupted run can resume without re-scraping completed **Instagram Profile** entries.
- **Rate-Limit Awareness** – Detects HTTP 429 responses and backs off automatically to protect **Instagram Profile** access.
- **Auth-Error Retry Logic** – Retries on transient 401/403 responses before marking an **Instagram Profile** as failed.
- **Configurable Request Delay** – Adjustable pacing between **Instagram Profile** requests to reduce blocking.
- **Residential Proxy Support** – Apify residential proxy for reliable, uninterrupted **Instagram Profile** access.
- **Rich Profile Metadata** – Captures full name, biography, external URL, follower/following/post counts, privacy status, verification badge, and profile picture.
- **Real-Time Dataset Push** – Pushes each **Instagram Profile** record to Apify Dataset as soon as it's scraped.
- **Detailed Logging** – Comprehensive per-username **Instagram Profile** progress and status logging.
- **Automatic Checkpoint Cleanup** – Clears the checkpoint file once every **Instagram Profile** in the run has been processed.

***

### 📊 Data Source

#### **Instagram Web Profile API**

- **Authority**: Instagram's own public web front-end API
- **Endpoint**: `instagram.com/api/v1/users/web_profile_info/?username={username}`
- **Coverage**: Any public **Instagram Profile** accessible without login
- **Data**: Follower/following/post counts, biography, verification, and profile picture
- **Access**: Public endpoint accessed via browser-impersonated requests
- **Update Frequency**: Reflects each **Instagram Profile**'s current live state at time of run

***

### ⚙️ How It Works

The Instagram Profile Scraper accepts a list of usernames and queries Instagram's `web_profile_info` endpoint for each one, impersonating a Chrome browser session to retrieve accurate **Instagram Profile** data. A checkpoint file tracks completed and failed usernames so a run can be resumed later without redoing work. Rate-limit and auth-error responses trigger automatic backoff and retry before a username is marked as failed. Each successfully retrieved **Instagram Profile** record is pushed to the Apify Dataset immediately.

**Key Processing Steps:**

1. **Input Parsing** – Accept a list of usernames, proxy configuration, and request delay
2. **Checkpoint Loading** – Resume from previously completed/failed **Instagram Profile** entries if enabled
3. **Pending List Build** – Filter out usernames already marked done or failed
4. **Proxy Setup** – Configure Apify residential proxy
5. **Session Init** – Create a Chrome-impersonated HTTP session for **Instagram Profile** requests
6. **Username Loop** – Iterate through each pending **Instagram Profile** username
7. **Profile Fetch** – Query Instagram's web profile API with retry/backoff logic
8. **Field Extraction** – Parse follower/following/post counts and other metadata
9. **Dataset Push** – Push each **Instagram Profile** record immediately after a successful fetch
10. **Checkpoint Save** – Persist progress after every username
11. **Rate Limiting** – Apply configurable delay between requests
12. **Checkpoint Cleanup** – Clear the checkpoint once the full run completes

**Key Benefits:**

- Pull **Instagram Profile** data for any public account without manual lookups
- Resume large batch jobs safely after interruptions or crashes
- Monitor influencer and competitor **Instagram Profile** metrics over time
- Feed social media dashboards, research pipelines, or marketing tools
- Automate recurring **Instagram Profile** checks as follower counts change

***

### 📥 Input

The Actor accepts the following input parameters:

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `usernames` | array | *(required)* | List of Instagram usernames to scrape (with or without `@`). |
| `proxyConfiguration` | object | `{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}` | Apify Proxy configuration. |
| `delayBetweenRequests` | number | `1.5` | Delay in seconds between **Instagram Profile** requests. |
| `resumeFromCheckpoint` | boolean | `true` | Whether to resume from a previous checkpoint if one exists. |

**Example Input:**

```json
{
  "usernames": ["instagram", "natgeo", "nasa"],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  },
  "delayBetweenRequests": 1.5,
  "resumeFromCheckpoint": true
}
```

**Scrape a Single Instagram Profile:**

```json
{
  "usernames": ["natgeo"]
}
```

**Scrape a Large List with Longer Delay:**

```json
{
  "usernames": ["accountone", "accounttwo", "accountthree"],
  "delayBetweenRequests": 3
}
```

***

### 📤 Output

The Actor pushes **Instagram Profile** records with the following structure:

| Field | Type | Description |
|-------|------|-------------|
| `username` | string | The Instagram username scraped |
| `id` | string | Instagram's internal numeric user ID |
| `full_name` | string | Display name on the **Instagram Profile** |
| `biography` | string | The profile's bio text |
| `external_url` | string | External link listed on the **Instagram Profile** |
| `followers_count` | integer | Number of followers |
| `following_count` | integer | Number of accounts followed |
| `posts_count` | integer | Number of posts on the **Instagram Profile** |
| `is_private` | boolean | Whether the **Instagram Profile** is private |
| `is_verified` | boolean | Whether the **Instagram Profile** has a verified badge |
| `profile_pic_url` | string | URL of the highest-resolution profile picture available |
| `scraped_at` | string | ISO 8601 timestamp of when the record was scraped |

**Example Instagram Profile Record:**

```json
{
  "username": "natgeo",
  "id": "787132",
  "full_name": "National Geographic",
  "biography": "Experience the world through the eyes of National Geographic photographers.",
  "external_url": "https://on.natgeo.com/2mfHZbW",
  "followers_count": 280000000,
  "following_count": 150,
  "posts_count": 30500,
  "is_private": false,
  "is_verified": true,
  "profile_pic_url": "https://scontent.cdninstagram.com/...",
  "scraped_at": "2026-08-05T09:00:00+00:00"
}
```

***

### 🧰 Technical Stack

- **HTTP Client:** `curl_cffi` with Chrome TLS fingerprint impersonation for reliable **Instagram Profile** access
- **API:** Instagram's `web_profile_info` public web endpoint (JSON format)
- **JSON Parsing:** Standard `json` handling via response parsing
- **Date Handling:** `datetime` with timezone-aware UTC timestamps
- **Async:** `asyncio` for non-blocking, multi-username processing
- **Checkpointing:** Local JSON checkpoint file for resumable **Instagram Profile** runs
- **Proxy:** Apify Proxy with `RESIDENTIAL` configuration
- **Logging:** Apify Actor logging system
- **Platform:** Apify Actor serverless environment

***

### 📊 Data Fields Explained

#### **Identity**

- **username / id**: The handle and internal ID identifying the **Instagram Profile**
- **full\_name**: The public display name shown on the profile

#### **Engagement Metrics**

- **followers\_count / following\_count / posts\_count**: Core **Instagram Profile** growth and activity metrics

#### **Profile Details**

- **biography / external\_url**: Bio text and linked website
- **is\_private / is\_verified**: Account privacy and verification status
- **profile\_pic\_url**: Direct link to the profile picture

***

### 🎯 Use Cases

- **Influencer Research** – Evaluate follower counts and engagement signals before a partnership
- **Competitor Tracking** – Monitor a competitor's **Instagram Profile** growth over time
- **Social Media Auditing** – Verify account authenticity, privacy, and verification status
- **Marketing Analytics** – Feed **Instagram Profile** metrics into campaign dashboards
- **Lead Generation** – Identify public accounts matching a target audience
- **Academic Research** – Study public **Instagram Profile** trends at scale
- **Brand Monitoring** – Track how partner or affiliate accounts present themselves
- **OSINT Research** – Gather publicly available **Instagram Profile** metadata for investigations

***

### 🚀 Quick Start

#### **1. Prepare Input**

Go to Apify Console and enter:

```json
{
  "usernames": ["nasa", "natgeo"]
}
```

#### **2. Run the Actor**

Click **Start**. The Actor will:

- Load any existing checkpoint and skip already-completed usernames
- Fetch each **Instagram Profile** via Instagram's web API
- Retry automatically on rate limits or auth errors
- Push all results to the Dataset

#### **3. Monitor Progress**

Console shows:

```
Processing 2 pending username(s)...
[1/2] Fetching profile: @nasa
 -> Successfully scraped @nasa
[2/2] Fetching profile: @natgeo
 -> Successfully scraped @natgeo
Done! Scraping completed and checkpoint cleared.
```

#### **4. View & Download Results**

- **Results Tab**: All **Instagram Profile** records
- **Export**: JSON, CSV, Excel, or HTML
- **Filter**: By follower count, verification status, or privacy
- **API Access**: Available via the Apify API

***

### ⚙️ Configuration

Single Instagram Profile:

```json
{
  "usernames": ["nasa"]
}
```

Large batch with resume enabled:

```json
{
  "usernames": ["acc1", "acc2", "acc3", "acc4"],
  "resumeFromCheckpoint": true,
  "delayBetweenRequests": 2
}
```

Fresh run ignoring any prior checkpoint:

```json
{
  "usernames": ["nasa", "natgeo"],
  "resumeFromCheckpoint": false
}
```

***

### 📈 Performance

#### **Processing Speed**

- One request per **Instagram Profile** username, with configurable delay between requests
- Automatic backoff on rate limits (10s × attempt number) to protect long-term access
- Scales linearly with the number of usernames submitted

#### **Resource Usage**

- Memory: Low, proportional to the number of pending usernames
- Network: One request per **Instagram Profile**, plus retries on transient errors
- Proxy: One residential proxy session per run
- Storage: Small local checkpoint file for resumable runs

***

### 💰 Billing

#### **Batch Billing**

- **Billing Model:** Per-record Dataset push (not metered PPE)
- **Typical Cost:** Proportional to total **Instagram Profile** records successfully scraped
- **Efficiency:** Checkpointing avoids re-billing for usernames already completed in a prior run

***

### ⚠️ Important Notes

#### **Legal & Compliance**

- **Fair Use**: Respects Instagram's public endpoint and applies rate-limit backoff automatically
- **Public Data Only**: Retrieves only publicly visible **Instagram Profile** information
- **Privacy**: Collecting profile data may be subject to privacy regulations and Instagram's Terms of Service — use only for legitimate purposes
- **Legal**: Not legal advice — consult qualified professionals before using this data for compliance-sensitive decisions

#### **Data Quality**

- **Freshness**: Reflects each **Instagram Profile**'s live state at time of run
- **Completeness**: Private accounts may return limited or no data
- **Accuracy**: Sourced directly from Instagram's own web API
- **Verification**: Cross-check high-stakes figures against the live Instagram app or website

#### **Best Practices**

- Always configure a residential proxy for the most reliable **Instagram Profile** access
- Keep `resumeFromCheckpoint` enabled for large username lists to avoid duplicate work
- Increase `delayBetweenRequests` if you encounter frequent rate limiting
- Re-run periodically to track changes in follower counts or bio content
- Process usernames in smaller batches for very large lists to reduce run risk

***

### 📦 Changelog

#### v1.0.0 (August 2026)

**Initial Release:**

- Instagram web profile API integration
- Batch username processing
- Checkpoint-based resume support
- Rate-limit and auth-error retry logic
- Configurable request delay
- Apify residential proxy support
- Real-time Dataset push
- Automatic checkpoint cleanup
- Asyncio + curl\_cffi architecture

***

### 🧑‍💻 Support & Feedback

- **Issues:** Submit via Apify console with the username(s) used
- **Documentation:** Check the Actor details page
- **Community:** Apify forum discussions
- **Feature Requests:** Suggest additional **Instagram Profile** fields to extract
- **Bug Reports:** Include the username, expected result, and error details

***

### 📄 License & Legal

**Terms of Use:**

- Use for legitimate research, marketing, and analytics purposes
- Respect Instagram's Terms of Service
- Do not use for unsolicited contact, harassment, or unlawful surveillance
- Use **Instagram Profile** data responsibly and in compliance with applicable privacy laws

**Disclaimer:**
Instagram Profile Scraper is provided as-is for research and analytics purposes. Users are responsible for compliance with Instagram's ToS and all applicable laws. This is not legal advice.

***

### 🎉 Get Started Today

**Deploy now for Instagram Profile research!**

Use for:

- 📸 Influencer & Creator Research
- 🔍 Competitor Account Tracking
- 💡 Social Media Analytics
- 📈 Follower Growth Monitoring
- 🎯 Brand & Marketing Intelligence

**Perfect for:**

- Social Media Marketers
- Influencer Agencies
- Growth & Analytics Teams
- OSINT Researchers

***

**Last Updated:** August 2026
**Version:** 1.0.0
**Status:** Production Ready
**Platform:** Apify Actor
**Architecture:** Async/Await
**Data Source:** Instagram Web Profile API

***

### 📚 Related Tools

- TikTok Profile Scraper
- Twitter/X Profile Collector
- YouTube Channel Stats Extractor

***

### ⚖️ Instagram Profile Excellence

This Actor is optimized for **Instagram Profile** research with:

- ✅ Checkpoint-based resumable scraping
- ✅ Rate-limit-aware retry logic
- ✅ Rich follower/engagement metadata
- ✅ Direct Instagram web API integration
- ✅ Real-time Dataset push
- ✅ Production-ready code

# Actor input Schema

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

Enter Instagram usernames (one per line or comma-separated).

## `delayBetweenRequests` (type: `number`):

Wait time between profile requests to prevent IP blocks.

## `resumeFromCheckpoint` (type: `boolean`):

Resume scraping from previously saved progress.

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

Select proxy settings. RESIDENTIAL proxy is highly recommended.

## Actor input object example

```json
{
  "usernames": [
    "kenziebshaw"
  ],
  "delayBetweenRequests": 1.5,
  "resumeFromCheckpoint": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

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

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

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

```

## MCP server setup

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