# Instagram Scraper - Posts, Profiles, Likes, No Login (`renzomacar/instagram-scraper`) Actor

Scrape Instagram profiles and posts without login. Get followers, bio, verification, likes, comments, captions, hashtags and media URLs.

- **URL**: https://apify.com/renzomacar/instagram-scraper.md
- **Developed by:** [Renzo Madueno](https://apify.com/renzomacar) (community)
- **Categories:** Social media, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## 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.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.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/platform/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 Scraper - Posts, Profiles, Likes, No Login

Scrape **Instagram profiles and posts without logging in**. Give it a username or a profile URL and get back clean, structured JSON: followers, bio, verification status, and the account's recent posts with likes, comments, captions, hashtags, media URLs, and timestamps.

No Instagram account, cookies, or session token required. The scraper uses a real browser with residential proxies, so it reads the same public data any visitor sees on instagram.com — just structured and ready for export to JSON, CSV, Excel, or your own database via API.

### What this Instagram scraper does

- **Profile data** — username, full name, biography, follower count, following count, total posts, verified badge, business category, external website link, and high-resolution profile picture.
- **Recent posts** — for each profile it returns the account's most recent public posts (typically 12 to ~50 depending on the account), each with full engagement metrics.
- **Per-post detail** — post ID, shortcode, direct URL, media type (image / video / carousel), caption text, hashtags, @mentions, like count, comment count, video view count, posted-at timestamp, display image URL, all media URLs (including every image in a carousel), and the video file URL for Reels and video posts.
- **Bulk input** — pass many usernames or profile URLs in one run.
- **Two output rows per target** — one `profile` row with the account stats and one `post` row per post, so you can filter the dataset by `dataType`.

### Why use this instead of the official Instagram API

The Instagram Graph API only works for accounts you own or manage, requires app review, a Facebook Business account, and access tokens. This Instagram scraper needs none of that. Point it at any **public** profile and get data instantly. Perfect for influencer research, competitor analysis, social media monitoring, lead generation, and content trend tracking.

### How to use it

1. Open the **Input** tab.
2. Add one or more **Usernames** (without the `@`) — for example `nasa`, `natgeo`, `nike`.
3. (Optional) Or paste full **Profile URLs** like `https://www.instagram.com/nasa/`.
4. Set **Max posts per profile** (default 30).
5. Click **Start**. Results appear in the **Dataset** tab and can be exported as JSON, CSV, Excel, XML, or RSS.

#### Example input

```json
{
  "usernames": ["nasa", "natgeo"],
  "maxPostsPerProfile": 30,
  "proxyCountry": "US"
}
````

#### Example output (profile row)

```json
{
  "dataType": "profile",
  "username": "nasa",
  "fullName": "NASA",
  "biography": "Making the seemingly impossible, possible. ✨",
  "followersCount": 104403330,
  "followers": "104.4M",
  "followingCount": 91,
  "postsCount": 4816,
  "isVerified": true,
  "isBusinessAccount": true,
  "businessCategory": "Government Agencies",
  "externalUrl": "https://www.nasa.gov/",
  "profilePicUrl": "https://...",
  "profileUrl": "https://www.instagram.com/nasa/"
}
```

#### Example output (post row)

```json
{
  "dataType": "post",
  "username": "nasa",
  "shortcode": "DZYvGYIv1nr",
  "url": "https://www.instagram.com/p/DZYvGYIv1nr/",
  "mediaType": "video",
  "caption": "Get ready for Earth joy! ...",
  "hashtags": ["NASA", "Artemis", "ICYMI"],
  "mentions": ["NASAChandraXray"],
  "likesCount": 180756,
  "likes": "180.8K",
  "commentsCount": 3653,
  "comments": "3.7K",
  "videoViewCount": 1043639,
  "timestamp": "2026-06-10T01:14:13.000Z",
  "displayUrl": "https://...",
  "mediaUrls": ["https://...mp4", "https://...jpg"],
  "isVideo": true,
  "videoUrl": "https://...mp4"
}
```

### Pricing

This actor uses **pay per event** pricing:

- **$0.005** per actor start
- **$0.003** per result (each profile row and each post row)

A run that scrapes one profile with 30 posts costs about **$0.005 + 31 × $0.003 ≈ $0.10**, plus the platform's residential proxy usage. You only pay for data you actually get back.

### Residential proxies are required

Instagram aggressively rate-limits datacenter IP addresses. This scraper defaults to **Apify Residential proxies**, which is what makes anonymous (no-login) extraction reliable. You can choose the proxy country in the input. If residential proxies are unavailable on your plan, the run will likely be rate-limited.

### Tips for best results

- Keep **Max concurrent pages** at 1–2 to avoid rate limits.
- Use a **proxy country** close to your target audience for the most consistent results.
- Private accounts return only the profile row (their posts are not public).
- Re-run on a schedule to track follower growth and new posts over time.

### Frequently asked questions

**Do I need an Instagram account or login?**
No. This scraper reads only public data and never logs in. No cookies, password, or session token needed.

**Can it scrape an Instagram profile's followers, bio, and post count?**
Yes. Every run returns a profile row with follower count, following count, total posts, bio, verification status, business category, and external URL.

**How many posts can it scrape per profile?**
Without login, Instagram exposes roughly 12 to 50 of the most recent posts per public profile. The scraper returns as many as it can up to your `maxPostsPerProfile` limit.

**Does it scrape likes and comments counts?**
Yes. Each post includes both the raw number (`likesCount`, `commentsCount`) and a human-readable string (`likes`, `comments`). Video posts also include `videoViewCount`.

**Does it handle carousels, Reels, and videos?**
Yes. Carousels return every image/video URL in `mediaUrls`. Reels and video posts include the direct `videoUrl` and `videoViewCount`. The `mediaType` field tells you `image`, `video`, or `carousel`.

**Can I scrape multiple Instagram accounts at once?**
Yes. Add as many usernames or profile URLs as you want in a single run.

**Can I scrape Instagram hashtags?**
This actor focuses on profiles and their posts, which is the most reliable no-login data source. Instagram blocks anonymous hashtag feeds behind a login wall, so a profile scraper returns far more complete data without authentication.

**Is scraping public Instagram data legal?**
This tool collects only publicly available data. You are responsible for complying with Instagram's terms, applicable laws (such as GDPR/CCPA), and using the data ethically. Do not scrape private data or personal data without a lawful basis.

**What can I do with the data?**
Influencer marketing research, competitor and brand monitoring, content and hashtag trend analysis, audience growth tracking, lead generation, and feeding dashboards or AI/LLM pipelines.

### Output formats

Export your dataset as **JSON, CSV, Excel, XML, or RSS**, or pull it programmatically through the Apify API and integrations (Make, Zapier, n8n, Google Sheets, and more).

# Actor input Schema

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

Instagram usernames to scrape (without @). Example: nasa

## `profileUrls` (type: `array`):

Full Instagram profile URLs (e.g. https://www.instagram.com/nasa/). An alternative to Usernames.

## `maxPostsPerProfile` (type: `integer`):

Maximum posts to extract per profile. Without login Instagram returns roughly 12-50 recent posts depending on the account.

## `includeProfileItem` (type: `boolean`):

Output one extra row per profile containing the profile-level fields (followers, bio, etc.).

## `maxConcurrency` (type: `integer`):

Profiles to process in parallel. Keep low (1-2) to avoid rate limits.

## `proxyCountry` (type: `string`):

Two-letter country code for the residential proxy (e.g. US, GB, DE). Residential IPs are required — Instagram rate-limits datacenter IPs.

## Actor input object example

```json
{
  "usernames": [
    "nasa"
  ],
  "maxPostsPerProfile": 30,
  "includeProfileItem": true,
  "maxConcurrency": 1,
  "proxyCountry": "US"
}
```

# Actor output Schema

## `results` (type: `string`):

All result items as JSON.

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

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

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

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Instagram Scraper - Posts, Profiles, Likes, No Login",
        "description": "Scrape Instagram profiles and posts without login. Get followers, bio, verification, likes, comments, captions, hashtags and media URLs.",
        "version": "0.1",
        "x-build-id": "itXtEeLjhN0uRlkXY"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/renzomacar~instagram-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-renzomacar-instagram-scraper",
                "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/renzomacar~instagram-scraper/runs": {
            "post": {
                "operationId": "runs-sync-renzomacar-instagram-scraper",
                "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/renzomacar~instagram-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-renzomacar-instagram-scraper",
                "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",
                "properties": {
                    "usernames": {
                        "title": "Usernames",
                        "type": "array",
                        "description": "Instagram usernames to scrape (without @). Example: nasa",
                        "items": {
                            "type": "string"
                        }
                    },
                    "profileUrls": {
                        "title": "Profile URLs",
                        "type": "array",
                        "description": "Full Instagram profile URLs (e.g. https://www.instagram.com/nasa/). An alternative to Usernames.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxPostsPerProfile": {
                        "title": "Max posts per profile",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Maximum posts to extract per profile. Without login Instagram returns roughly 12-50 recent posts depending on the account.",
                        "default": 30
                    },
                    "includeProfileItem": {
                        "title": "Include profile row",
                        "type": "boolean",
                        "description": "Output one extra row per profile containing the profile-level fields (followers, bio, etc.).",
                        "default": true
                    },
                    "maxConcurrency": {
                        "title": "Max concurrent pages",
                        "minimum": 1,
                        "maximum": 3,
                        "type": "integer",
                        "description": "Profiles to process in parallel. Keep low (1-2) to avoid rate limits.",
                        "default": 1
                    },
                    "proxyCountry": {
                        "title": "Residential proxy country",
                        "type": "string",
                        "description": "Two-letter country code for the residential proxy (e.g. US, GB, DE). Residential IPs are required — Instagram rate-limits datacenter IPs.",
                        "default": "US"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
