# Instagram Followers Scraper | $0.5/1K on Starter (`publicsignallabs/instagram-followers`) Actor

Extract unlimited public Instagram followers across resumable paid runs for $0.50 per 1,000 rows on Starter, with lower Scale and Business rates. No login, cookies, browser, or proxy setup. Export to JSON, CSV, or Excel.

- **URL**: https://apify.com/publicsignallabs/instagram-followers.md
- **Developed by:** [Public Signal Labs](https://apify.com/publicsignallabs) (community)
- **Categories:** Social media, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.45 / 1,000 followers

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

## Instagram Followers Scraper | $0.5/1K on Starter

Extract unlimited public Instagram followers across resumable paid runs for $0.50 per 1,000 rows on Starter, with lower Scale and Business rates. No login, cookies, browser, or proxy setup. Export to JSON, CSV, or Excel.

### What this Actor does

- Accepts one or more public Instagram account handles
- Extracts unlimited follower records across resumable paid runs, with up to 20,000 per account in each run
- Returns structured rows ready for JSON, CSV, Excel, XML, or API workflows
- Works without Instagram login credentials, cookies, session IDs, browsers, or proxy configuration
- Returns a continuation token after each unfinished paid extraction so you can resume it, including exports of 1M+ rows when the source account has enough public followers

Use it for public audience research, creator discovery, competitor audience analysis, and repeatable data pipelines.

### Quick start

1. Enter one or more plain Instagram handles without `@` or profile URLs.
2. Choose the maximum number of followers to return per account.
3. Run the Actor, then open or export the default dataset.

```json
{
  "Account": ["mrbeast"],
  "resultsLimit": 200
}
```

### Input

| Field | Rules |
| --- | --- |
| `Account` | Required list of plain Instagram handles. Do not include `@`, profile URLs, or numeric IDs. Paying users may submit multiple unique accounts; FREE users may submit exactly one. |
| `resultsLimit` | Required integer per account from 25 through 20,000 for each run. The default and Store prefill are 200. Paid extractions can continue across runs; FREE runs are capped at 1,000. |
| `continuationToken` | Optional short-lived secret token returned by a previous paid run. Requires exactly one `Account` matching the account bound into the token. Use it to continue that extraction from its latest checkpoint, including large exports split across multiple runs. |

### Dataset rows

Every charged dataset item has exactly this shape:

```json
{
  "username_scrape": "mrbeast",
  "id": "123456789",
  "full_name": "Example Person",
  "is_private": false,
  "is_verified": false,
  "profile_pic_url": "https://...",
  "username": "example_person"
}
```

| Field | Meaning |
| --- | --- |
| `profile_pic_url` | External profile-picture URL; it may expire |
| `username` | Extracted follower's Instagram handle |
| `id` | Extracted follower's Instagram user ID, always represented as a string |
| `full_name` | Extracted follower's public display name |
| `is_private` | Whether the extracted follower account is private |
| `is_verified` | Whether the extracted follower account is verified |
| `username_scrape` | Source account whose follower list was requested |

The default dataset contains follower rows only. Follower ordering is controlled by Instagram and may change between runs. Profile-picture URLs are external and can expire.

### Run summary

Run status, source failures, counts, and continuation tokens are stored in the default key-value store's `OUTPUT` record rather than mixed into the dataset:

```json
{
  "status": "SUCCEEDED",
  "isPaying": true,
  "requestedAccounts": 1,
  "resultsLimitPerAccount": 200,
  "deliveredCount": 200,
  "chargedCount": 200,
  "sources": [
    {
      "inputIndex": 0,
      "account": "mrbeast",
      "status": "succeeded",
      "deliveredCount": 200,
      "chargedCount": 200
    }
  ],
  "continuations": [
    {
      "inputIndex": 0,
      "account": "mrbeast",
      "hasNextPage": true,
      "nextContinuationToken": "<secret token for a paid continuation>"
    }
  ]
}
```

`status` can be `SUCCEEDED`, `PARTIAL`, `FAILED`, or `CHARGE_LIMIT_REACHED`. Inspect each source entry even when the run itself completes. A non-PII run and charging summary is stored separately as `AUDIT`.

### Unlimited paid exports with continuation tokens

Paid exports can continue across as many resumable runs as needed. Each run can request up to 20,000 followers per account. To continue the extraction, read `nextContinuationToken` from the account's entry in `OUTPUT.continuations`, then start a new run with the same single handle.

Use a continuation token whenever you want to resume the same extraction, not only after reaching 20,000 followers. For large exports, use batches of about 1,000 followers and pass the newest token into each subsequent run. Smaller checkpoints reduce the amount of work that may need to be retried if a run is interrupted.

```json
{
  "Account": ["mrbeast"],
  "resultsLimit": 1000,
  "continuationToken": "<token from OUTPUT>"
}
```

A continuation may require the current page to be processed again when the prior segment stopped partway through that page. Already delivered rows are skipped and not charged twice.

### FREE boundary

FREE runs are limited to one account and an effective maximum of 1,000 results. They cannot submit or receive continuation tokens. These checks run before extraction begins. The public schema keeps the 20,000 maximum so paying users can request larger segments.

### Limitations

This Actor:

- Reads follower lists from public Instagram accounts only
- Does not bypass private-account access controls
- Does not enrich follower records with emails, phone numbers, posts, or engagement metrics
- Cannot guarantee follower order or stable profile-picture URLs
- May return fewer rows when Instagram reports no more followers or when a run reaches its spending limit

### API and CLI use

Call the Actor through the standard Apify Actor Runs API. Read follower data from the run's default dataset and reconciliation metadata from the `OUTPUT` and `AUDIT` key-value-store records. Dataset rows are the billable unit.

With the current Apify CLI:

```bash
apify actors call publicsignallabs/instagram-followers \
  --input '{"Account":["mrbeast"],"resultsLimit":200}' \
  --output-dataset
```

The same Actor can be called with the Apify JavaScript or Python clients, REST API, schedules, webhooks, and platform integrations.

### Responsible use

Only collect and use public data where you have a lawful purpose. Respect privacy, platform rules, and applicable data-protection law. Minimize retained personal data, secure exported datasets, and delete records when they are no longer needed.

This Actor is unofficial and is not affiliated with or endorsed by Instagram or Meta.

### FAQ

#### Does it require an Instagram account?

No. The Actor does not require Instagram login credentials, cookies, or a session ID.

#### Do I need to configure proxies or manage blocked sessions?

No. The Actor exposes no proxy, cookie, browser, or session configuration. It handles temporary failures with bounded retries and reports each source outcome in `OUTPUT`.

#### Are paid follower exports unlimited?

Yes. Paid exports can continue across as many runs as needed. Request up to 20,000 followers in each run, then pass the returned `nextContinuationToken` into a new run for the same single account. For large exports, batches of about 1,000 followers are recommended so progress is checkpointed frequently. Always use the newest token returned by the previous run.

#### Can it extract followers from private source accounts?

No. It works with follower lists available from public source accounts and does not bypass access controls.

#### Can one run process multiple accounts?

Yes for paying users. FREE runs accept exactly one source account.

#### How do I export the results?

Open the run's default dataset in Apify Console and choose JSON, CSV, Excel, XML, or another supported dataset export format. Programmatic workflows can read the same dataset through the API.

### Support

Use the **Issues** tab on this Actor's Apify Store page. Include the run ID, expected result, and observed result. Never include continuation tokens, API tokens, cookies, or other credentials.

# Actor input Schema

## `Account` (type: `array`):

Plain Instagram handles only, without @, profile URLs, or numeric IDs. Paying users may enter multiple accounts; FREE users may enter exactly one.

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

Followers returned per account in this run. Range: 25–20,000 for paying users. Use a continuationToken to resume the extraction across runs. FREE runs are capped at 1,000 even when a larger value is submitted.

## `continuationToken` (type: `string`):

Optional short-lived token from an earlier paid run. Use it with the same single Account to continue the extraction from its latest checkpoint, including large exports split across multiple runs. Not available on FREE. For large exports, batches of about 1,000 are recommended.

## Actor input object example

```json
{
  "Account": [
    "mrbeast"
  ],
  "resultsLimit": 200
}
```

# Actor output Schema

## `followers` (type: `string`):

Charged follower rows from the default dataset, ready for preview or export.

## `summary` (type: `string`):

Run status, delivered and charged counts, source outcomes, and continuation tokens.

## `audit` (type: `string`):

Non-PII aggregate request, retry, row, duplicate, and charge reconciliation metrics.

# 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 = {
    "Account": [
        "mrbeast"
    ],
    "resultsLimit": 200
};

// Run the Actor and wait for it to finish
const run = await client.actor("publicsignallabs/instagram-followers").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 = {
    "Account": ["mrbeast"],
    "resultsLimit": 200,
}

# Run the Actor and wait for it to finish
run = client.actor("publicsignallabs/instagram-followers").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 '{
  "Account": [
    "mrbeast"
  ],
  "resultsLimit": 200
}' |
apify call publicsignallabs/instagram-followers --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,publicsignallabs/instagram-followers"
        }
    }
}

```

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/ZABY5Bl5hgH1anuVh/builds/tRnuNxkdtlntphars/openapi.json
