# Instagram Profile Scraper (no cookies) (`mina_safwat/instagram-profile-scraper-no-cookies`) Actor

Scrapes public Instagram profiles — followers, following, bio, website, verification and recent posts — without a login or session cookie.

- **URL**: https://apify.com/mina\_safwat/instagram-profile-scraper-no-cookies.md
- **Developed by:** [Mina](https://apify.com/mina_safwat) (community)
- **Categories:** AI, Automation, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.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.

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

### What does Instagram Profile Scraper do?

**Give it an Instagram username and it returns that account's public profile as structured data** — follower and following counts, the number of posts, the bio, the website link, whether the account is verified or private, the profile picture, and the account's most recent posts.

No Instagram account, login, or cookie is needed. Type a username, press Start, and download the result as JSON, CSV or Excel — or pull it straight from the Apify API.

### Why use Instagram Profile Scraper?

- **Track growth** — record follower counts on a schedule and watch them move over time.
- **Vet influencers** — check real follower numbers, post counts and recent activity before working with someone.
- **Research competitors** — pull the profiles of every account in your niche into one sheet.
- **Build lead lists** — collect bios, websites and categories for a set of accounts at once.
- **Monitor your own accounts** — keep a running history of how your profiles are performing.

### How to use Instagram Profile Scraper

1. Enter one or more **usernames** in the input.
2. Leave **Include recent posts** ticked if you want each profile's latest posts as well.
3. Click **Start**.
4. When the run finishes, open the **Output** tab to preview the data or export it.

#### Which inputs work

Any of these formats is accepted, and you can mix them freely:

```
nasa
@nasa
https://www.instagram.com/nasa/
instagram.com/nasa
```

### Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| **Instagram usernames or profile URLs** (`usernames`) | array | Yes | One or more accounts to scrape. |
| **Include recent posts** (`include_recent_posts`) | boolean | No | Adds each profile's latest posts. On by default. |
| **Max concurrent requests** (`max_concurrency`) | integer | No | How many profiles to fetch at once. Default 1. |
| **Include raw data** (`include_raw`) | boolean | No | Adds the unprocessed profile data to each record, for debugging. Off by default. |

Example input:

```json
{
  "usernames": ["nasa", "@natgeo", "https://www.instagram.com/nike/"],
  "include_recent_posts": true
}
```

### Output

One record per account:

```json
{
  "username": "nasa",
  "user_id": "528817151",
  "full_name": "NASA",
  "biography": "Making the seemingly impossible, possible. ✨",
  "external_url": "https://www.nasa.gov/",
  "followers": 104405085,
  "following": 92,
  "posts_count": 4882,
  "is_verified": true,
  "is_private": false,
  "is_business_account": true,
  "category": "Government Agencies",
  "profile_pic_url": "https://scontent.cdninstagram.com/…",
  "highlight_reel_count": 5,
  "profile_url": "https://www.instagram.com/nasa/",
  "recent_posts": [
    {
      "shortcode": "DcCH2ZygIiP",
      "url": "https://www.instagram.com/p/DcCH2ZygIiP/",
      "caption": "America's newest and most exciting aerospace technology…",
      "like_count": 48213,
      "comment_count": 312,
      "is_video": true,
      "thumbnail": "https://scontent.cdninstagram.com/…",
      "taken_at": 1786580820
    }
  ],
  "is_unavailable": false,
  "error": null
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

#### Data fields

| Field | Description |
| --- | --- |
| `username` | The account's handle. |
| `user_id` | Instagram's own id for the account. |
| `full_name` | The display name. |
| `biography` | The bio text. |
| `external_url` | The website link in the bio. |
| `followers` | Follower count. |
| `following` | How many accounts it follows. |
| `posts_count` | Total posts. |
| `is_verified` | Whether the account has a blue tick. |
| `is_private` | Whether the account is private. |
| `is_business_account` | Whether it is a business account. |
| `category` | The account category, e.g. "Government Agencies". |
| `profile_pic_url` | Profile picture, in the largest size available. |
| `highlight_reel_count` | How many story highlights the account has. |
| `profile_url` | Link to the profile. |
| `recent_posts` | The latest posts, each with caption, likes, comments, thumbnail and date. |
| `is_unavailable` | `true` if the account does not exist or could not be read. |
| `error` | Filled in only if something went wrong with that account. |

### What it cannot return

- **Anything from a private account.** You get the profile itself — name, bio, follower count, private flag — but no posts.
- **Email addresses or phone numbers.** These are not public, even when a business account displays a contact button.
- **Stories, followers lists or who an account follows.** Only the counts are public.
- **Complete post history.** `recent_posts` is the latest handful, not the whole feed. `posts_count` is the true total.

For a small number of accounts, Instagram serves a reduced version of the profile. Those records come back with the counts and bio filled in but `posts_count` empty. This is Instagram's behaviour, not a failure of the run.

### How much does it cost to scrape Instagram profiles?

Very little. Five accounts took twelve seconds and cost well under a cent. Cost scales roughly with how many accounts you submit.

### Tips

- **Batch your accounts into one run** rather than starting a run per account.
- **Turn off Include recent posts** if you only care about follower numbers — it makes runs slightly cheaper.
- **Schedule a daily run** on the same list of accounts to build a growth history you can chart.

### FAQ and support

**Do I need an Instagram account or cookie?** No. Nothing to log in with and nothing to keep alive.

**Can it scrape private accounts?** Only the public part — name, bio, follower count and the private flag. Posts from private accounts are not visible to anyone who is not an approved follower.

**Why does one account have no post count?** Instagram sometimes serves a reduced profile for certain accounts. Everything else on the record is still correct.

**Is scraping Instagram legal?** This Actor collects only publicly available data. You are responsible for how you use it, and you should not collect personal data without a legal basis. If in doubt, take legal advice.

Found a bug, or need a field that is not here? Open an issue on the **Issues** tab.

# Actor input Schema

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

Accepts a username (nasa), an @handle (@nasa), or a full profile link (https://www.instagram.com/nasa/).

## `include_recent_posts` (type: `boolean`):

Adds the profile's most recent posts, each with its caption, likes, comments and thumbnail.

## `max_concurrency` (type: `integer`):

How many profiles to fetch at once. Higher is faster but more likely to be rate limited.

## `include_raw` (type: `boolean`):

Adds the unprocessed profile data to each record, for debugging.

## Actor input object example

```json
{
  "usernames": [
    "nasa",
    "https://www.instagram.com/natgeo/"
  ],
  "include_recent_posts": true,
  "max_concurrency": 1,
  "include_raw": false
}
```

# Actor output Schema

## `results` (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": [
        "nasa",
        "https://www.instagram.com/natgeo/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("mina_safwat/instagram-profile-scraper-no-cookies").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": [
        "nasa",
        "https://www.instagram.com/natgeo/",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("mina_safwat/instagram-profile-scraper-no-cookies").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": [
    "nasa",
    "https://www.instagram.com/natgeo/"
  ]
}' |
apify call mina_safwat/instagram-profile-scraper-no-cookies --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mina_safwat/instagram-profile-scraper-no-cookies"
        }
    }
}

```

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/yTFdiRahAQBnoXxJN/builds/9oTCYYzTki6M2hxf6/openapi.json
