# Instagram Profile Scraper (Cheap) (`data_api/instagram-profile-scraper-cheap`) Actor

Instagram profile scraper that pulls follower counts, bio text, post totals, and contact info from any public account, so marketers and researchers get structured data without manual clicking.

- **URL**: https://apify.com/data\_api/instagram-profile-scraper-cheap.md
- **Developed by:** [Data API](https://apify.com/data_api) (community)
- **Categories:** Social media, Lead generation, Automation
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.99 / 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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 Details Scraper

![Instagram Profile Details Scraper](cover.jpg)

Checking Instagram accounts one by one is slow, and the app gives you nothing you can sort or save. This scraper turns a plain list of handles into a clean table of public profile data. Hand it the usernames you care about and it returns follower and following counts, the bio and its link, post totals, the verified badge, account category, profile photo, and a public contact email when one is listed. No login and no browser needed. Run one handle or a few hundred.

### What you get

Each handle becomes one row with the same set of columns every time, so results drop straight into a sheet or database without reshaping. The data falls into three groups:

- **Identity** — `handle`, `displayName`, `bioText`, `accountCategory`, `verifiedBadge`, `privateAccount`
- **Reach** — `followerTotal`, `followingTotal`, `postTotal`
- **Links and contact** — `avatarUrl`, `bioLink`, `accountUrl`, `accountId`, `contactEmail`

Anonymous runs on datacenter proxies return the core public fields. Add a session cookie or use residential proxies to fill in the rest.

### Quick start

1. Click **Try for free** and open the input form.
2. Paste the Instagram handles you want into **Instagram handles**, one per line, without the @.
3. Optional: paste your own `sessionid` cookie into **Session cookie** to unlock full profiles on cheaper proxies.
4. Set a **Profile cap** if you want to limit the run, pick a proxy type, and press **Start**.
5. When it finishes, export to JSON, CSV, Excel, or XML.

![How it works](how-it-works.jpg)

### Use cases

- **Influencer vetting** — line up follower counts, post totals, and bio links across a shortlist before you reach out
- **Lead generation** — pull public contact emails and bio links from creator and brand accounts in one pass
- **Competitor tracking** — watch follower and post counts for a set of rival accounts on a schedule
- **Audience research** — build profile datasets for a niche or category and study what the top accounts have in common
- **Partnership sourcing** — size up potential collaborators by reach and category before a pitch
- **Social audits** — cross-check an Instagram presence against the rest of a brand's marketing footprint

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `profileHandles` | array of strings | Yes | Instagram handles to look up, one per line, with no @. |
| `sessionToken` | string | No | Your Instagram `sessionid` value or full cookie string. Unlocks full profiles on datacenter proxies. Leave blank to run anonymously. |
| `resultsLimit` | integer | No | Most profiles to process per run. Default `50`; raise it up to 1,000. |
| `proxyConfiguration` | object | No | Proxies for requests. Residential returns the richest data; datacenter works but is partial without a session cookie. |

#### Example input

```json
{
    "profileHandles": ["natgeo", "nike"],
    "resultsLimit": 50,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
````

### Output

Every handle produces one row. The same fields appear on each row, so the dataset stays rectangular even when a value is missing or the account is private.

#### Example output

```json
{
    "handle": "natgeo",
    "displayName": "National Geographic",
    "bioText": "Experience the world through the eyes of National Geographic photographers.",
    "followerTotal": 281000000,
    "followingTotal": 165,
    "postTotal": 30142,
    "avatarUrl": "https://instagram.cdn.example.com/v/natgeo_profile.jpg",
    "verifiedBadge": true,
    "privateAccount": false,
    "bioLink": "https://on.natgeo.com/instagram",
    "accountUrl": "https://www.instagram.com/natgeo/",
    "accountId": "787132",
    "accountCategory": "Media/News Company",
    "contactEmail": "",
    "collectedAt": "2026-06-29T12:00:00.000000+00:00",
    "errorMessage": null
}
```

#### Output fields

| Field | Type | Description |
|-------|------|-------------|
| `handle` | string | The account handle, with no @ prefix |
| `displayName` | string | Public name shown at the top of the profile |
| `bioText` | string | Free-text biography written on the profile |
| `followerTotal` | integer | How many accounts follow this profile |
| `followingTotal` | integer | How many accounts this profile follows |
| `postTotal` | integer | Count of posts published on the profile |
| `avatarUrl` | string | Link to the profile photo, in high resolution where offered |
| `verifiedBadge` | boolean | True when the account carries the blue verified checkmark |
| `privateAccount` | boolean | True when the profile is locked to private |
| `bioLink` | string | Outbound website or link-in-bio listed on the profile |
| `accountUrl` | string | Direct link to the Instagram profile page |
| `accountId` | string | Instagram's internal numeric ID for the account |
| `accountCategory` | string | Category tag on the account, such as Musician, Brand, or Public Figure |
| `contactEmail` | string | Public business contact email when the account exposes one |
| `collectedAt` | string | ISO 8601 timestamp marking when the profile was captured |
| `errorMessage` | string | Reason the profile could not be retrieved, when applicable |

### Tips for best results

- **Run a few handles first.** Try 5 to 10 before a big batch so proxy and handle-format issues show up early.
- **Use Residential for full profiles.** Datacenter proxies pull name, photo, and follower count from page meta tags but skip bio, category, and verified status.
- **Or paste a session cookie.** Drop your own `sessionid` into `sessionToken` and even datacenter proxies return complete profiles.
- **Private accounts return less.** A locked profile exposes little public data; the row still lands so your dataset stays complete.
- **Cap test runs with `resultsLimit`.** Keep it low while you confirm the output fits your pipeline, then raise it for the full batch.

### How can I use Instagram profile data?

**How can I use the Instagram Profile Details Scraper to vet influencers in bulk?**
Paste a shortlist of handles and the scraper returns follower and following counts, post totals, the verified badge, category, and bio link for each one. Sort the rows by reach or engagement signals to shortlist the accounts worth a closer look, without opening Instagram dozens of times.

**How can I collect Instagram contact emails for outreach?**
When an account publishes a business contact email, it lands in the `contactEmail` field, paired with the bio link in `bioLink`. Feed in a list of creator or brand handles and you get a contact sheet you can hand straight to a sales or partnerships workflow.

**How can I track competitor Instagram accounts over time?**
Schedule the actor against a fixed set of handles and export each run. Comparing `followerTotal` and `postTotal` across runs shows who is growing, who is posting more, and how your own account stacks up, all in a format you can chart or pipe into a dashboard.

### Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses or private contact information. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### Support

Questions, feature requests, or a field you'd like added? Reach out at <data.apify@proton.me> and we'll get back to you.

# Actor input Schema

## `profileHandles` (type: `array`):

List of Instagram handles to look up, one per line. Drop the @ — just the plain username.

## `sessionToken` (type: `string`):

Optional. Paste your own Instagram 'sessionid' value (or the full cookie string) to unlock complete profiles on datacenter proxies. Leave blank to run anonymously.

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

Highest number of profiles to handle in a single run. Useful for trial runs or keeping spend in check.

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

Residential proxies return the richest data on Instagram. With no session cookie, datacenter proxies pull only partial fields (follower count, name, photo) straight from the page's meta tags.

## Actor input object example

```json
{
  "profileHandles": [
    "natgeo",
    "nike"
  ],
  "resultsLimit": 50,
  "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 = {
    "profileHandles": [
        "natgeo",
        "nasa",
        "spacex"
    ],
    "sessionToken": "",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_api/instagram-profile-scraper-cheap").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 = {
    "profileHandles": [
        "natgeo",
        "nasa",
        "spacex",
    ],
    "sessionToken": "",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("data_api/instagram-profile-scraper-cheap").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 '{
  "profileHandles": [
    "natgeo",
    "nasa",
    "spacex"
  ],
  "sessionToken": "",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call data_api/instagram-profile-scraper-cheap --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Instagram Profile Scraper (Cheap)",
        "description": "Instagram profile scraper that pulls follower counts, bio text, post totals, and contact info from any public account, so marketers and researchers get structured data without manual clicking.",
        "version": "0.0",
        "x-build-id": "FCbheLQIbWMdbzfu1"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/data_api~instagram-profile-scraper-cheap/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-data_api-instagram-profile-scraper-cheap",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/data_api~instagram-profile-scraper-cheap/runs": {
            "post": {
                "operationId": "runs-sync-data_api-instagram-profile-scraper-cheap",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/data_api~instagram-profile-scraper-cheap/run-sync": {
            "post": {
                "operationId": "run-sync-data_api-instagram-profile-scraper-cheap",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "profileHandles"
                ],
                "properties": {
                    "profileHandles": {
                        "title": "Instagram handles",
                        "type": "array",
                        "description": "List of Instagram handles to look up, one per line. Drop the @ — just the plain username.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "sessionToken": {
                        "title": "Session cookie",
                        "type": "string",
                        "description": "Optional. Paste your own Instagram 'sessionid' value (or the full cookie string) to unlock complete profiles on datacenter proxies. Leave blank to run anonymously."
                    },
                    "resultsLimit": {
                        "title": "Profile cap",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Highest number of profiles to handle in a single run. Useful for trial runs or keeping spend in check.",
                        "default": 50
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Residential proxies return the richest data on Instagram. With no session cookie, datacenter proxies pull only partial fields (follower count, name, photo) straight from the page's meta tags."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
