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

Bulk-scrape Instagram profiles. Get follower, following and post counts, bios, bio links, website URLs, verification and business-account flags, and HD profile pictures. Contact email and phone are not included. No Instagram API key, no login, no cookies.

- **URL**: https://apify.com/goat255/instagram-profile-scraper.md
- **Developed by:** [Goutam Soni](https://apify.com/goat255) (community)
- **Categories:** Social media, Lead generation, Automation
- **Features:** Limited permissions
- **Stats:** 476 total users, 49 monthly users, 99.8% runs succeeded, 3 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.00 / 1,000 profile scrapeds

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 Profile Scraper - Bulk Extract Bios, Followers & Profile Data

Scrape Instagram profiles in bulk. Get follower, following and post counts, bios, bio links, website URLs, verification and business-account flags, profile pictures (HD where available) and the latest reel time - without an Instagram API key, login, or cookies.

https://www.youtube.com/watch?v=OxAjgiX37fg

### What this Instagram profile scraper does

Pass a list of Instagram usernames, @handles, or profile URLs and the actor returns one clean JSON record per profile. Multi-source failover and residential proxies keep runs going when one source is busy.

**What it does not include:** contact email and phone numbers. The sources this actor reads do not carry them, so those columns are always empty. Business category and street address are filled only for the few accounts that publish them (about 1 in 8 and 1 in 30 profiles in recent runs).

Perfect for **influencer research, CRM enrichment, follower tracking, competitor analysis, and market research** on Instagram at scale.

### Why use this Instagram profile scraper

- **No API key, no login, no cookies** - works on every public Instagram profile.
- **Follower, following and post counts** on every public profile.
- **HD profile pictures** - a 150x150 URL always, and the 1080x1080 URL when the source returns it (most profiles).
- **Bulk by username** - one call to scrape one or many profiles in parallel.
- **Multi-source failover** - upstream rate-limited? The actor falls back to another source automatically.
- **Residential proxies** built in with per-request rotation.
- **Clean structured JSON** - no junk fields, ready for direct CRM/spreadsheet import.

### What data you get per Instagram profile

| Field | Type | Description |
|---|---|---|
| `username` | string | Instagram handle |
| `id` | string | Numeric user ID |
| `fullName` | string | Display name |
| `biography` | string | Profile bio text |
| `bioLinks` | string\[] | URLs in bio |
| `profilePicUrl` | string | Profile picture (150x150) |
| `profilePicUrlHd` | string | HD profile picture (1080x1080) |
| `followerCount` | integer | Number of followers |
| `followingCount` | integer | Number following |
| `mediaCount` | integer | Total posts on profile |
| `isVerified` | boolean | Verified badge |
| `isPrivate` | boolean | Private account flag |
| `isBusiness` | boolean | Business/creator account |
| `category` | string | Business category, only when the account publishes one (about 1 in 8 profiles) |
| `externalUrl` | string | Website URL |
| `address` | string | Business street address, rarely published (about 1 in 30 profiles) |
| `city` | string | City, rarely published |
| `zip` | string | ZIP / postal code, rarely published |
| `hasReels` | boolean | Has Instagram Reels |
| `latestReelTimestamp` | integer | Latest reel (unix epoch), when the account has posted one |

These columns stay in every row so existing integrations keep working, but they are **always empty** because no source the actor reads carries them: `publicEmail`, `publicPhone`, `contactPhone`, `businessContactMethod`, `pronouns`, `threadsUrl`, `hasGuides`, `hasVideos`, `hasHighlightReels`. Use the Stories & Highlights Scraper to detect highlights.

### How to use the Instagram Profile Scraper

1. Click **Try for free** on the actor page.
2. Enter Instagram **usernames** in the `usernames` input. URLs, @handles, and plain usernames are all accepted and deduplicated.
3. Tune `concurrency` (default 5) and `delayBetweenRequests` (default 1s) for your speed/safety tradeoff.
4. Click **Save & start**. Download in JSON / CSV / Excel / XML / HTML or stream via API.

### Top use cases

- **Influencer marketing** - vet candidates by follower count, verification, account type and engagement signals.
- **CRM enrichment** - add verified Instagram handles, follower counts and website links to your records.
- **Competitor follower growth tracking** - snapshot follower counts on a schedule and compare over time.
- **Market research** - map businesses by `bioLinks`, `externalUrl` and follower scale across niches.
- **Sales prospecting** - qualify business accounts by follower scale, website and bio links.

### Integrations

#### Apify API

```bash
curl "https://api.apify.com/v2/datasets/{DATASET_ID}/items?format=json"
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("goat255/instagram-profile-scraper").call(run_input={
    "usernames": ["example_user_1", "example_user_2", "example_user_3"],
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['username']}: {item['followerCount']} followers")
    if item.get("externalUrl"):
        print(f"  Website: {item['externalUrl']}")
```

#### JavaScript / Node.js

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('goat255/instagram-profile-scraper').call({
    usernames: ['example_user_1', 'example_user_2', 'example_user_3'],
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(item => {
    console.log(`${item.username}: ${item.followerCount} followers`);
    if (item.externalUrl) console.log(`  Website: ${item.externalUrl}`);
});
```

#### No-code integrations

Stream results to Google Sheets, Slack, Zapier, Make, Amazon S3, HubSpot, or any webhook via [Apify Integrations](https://docs.apify.com/platform/integrations).

### Pricing

Pay-per-event. No subscription.

| Event | Price |
|---|---|
| Profile scraped (primary) | $0.005 |

Apify's $5 platform free credit applies on first use - ~1,000 free profiles to start.

### FAQ

#### Do I need an Instagram API key or login?

No. This scraper works on every public Instagram profile with no auth required.

#### Can it scrape private Instagram accounts?

Profile metadata is returned (username, follower count, bio if public, verification), but post-level data is gated by Instagram. Use the [Instagram Posts Scraper](https://apify.com/goat255/instagram-posts-scraper) for post-level scraping on public accounts.

#### Does it return email addresses and phone numbers?

No. The sources this actor reads do not carry contact email or phone, so `publicEmail`, `publicPhone` and `contactPhone` are always empty. The website link in `externalUrl` and the links in `bioLinks` are filled whenever the account has them.

#### How accurate are the follower counts?

They are the counts the sources report at the time of the run.

#### Can I scrape Instagram by category or location?

This actor takes usernames as input. To discover profiles by category or location first, scrape a hashtag/location feed elsewhere, then feed the usernames here for full profile data.

#### What about rate limits?

Multi-source failover plus rotating residential proxies handle Instagram's rate limits automatically.

#### Can I export to Google Sheets / CSV / Excel?

Yes - JSON, CSV, Excel, XML, HTML formats all supported, plus native integrations.

### Related Apify actors

- 📝 [Instagram Posts Scraper](https://apify.com/goat255/instagram-posts-scraper) - bulk export posts, captions, likes, comments, media.
- 📷 [Instagram Stories & Highlights Scraper](https://apify.com/goat255/instagram-stories-highlights-scraper) - active stories and full highlight reels.
- 🧰 [Instagram Full Profile Scraper](https://apify.com/goat255/instagram-full-profile-scraper) - profile + posts + stories + highlights in one call.

### Support

Open an issue on the actor page if a field's missing or behaving oddly. Reviews are read and replied to.

### Privacy

To improve our actors we collect anonymized usage telemetry (run stats and input patterns). No personal account data is collected.

# Actor input Schema

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

List of Instagram usernames or profile URLs to scrape. You can mix formats: usernames (acmecompany), @handles (@acmecompany), or full URLs (https://instagram.com/acmecompany).

## `concurrency` (type: `integer`):

Maximum number of profiles scraped in parallel. Higher values are faster but use more resources.

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

Seconds to wait between requests. Lower values are faster but increase the chance of rate limiting.

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

Required. Instagram blocks datacenter addresses, so this Actor cannot return anything with the proxy switched off and will stop the run immediately with no results charged. Leave Apify Proxy enabled with the RESIDENTIAL group, which is the default below.

## Actor input object example

```json
{
  "usernames": [
    "acmecompany"
  ],
  "concurrency": 5,
  "delayBetweenRequests": 1,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `profiles` (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": [
        "acmecompany"
    ]
};

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

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

```

## MCP server setup

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