# Instagram Scraper - Posts, Reels, Profiles, Hashtags & Comments (`zaver.api/instagram-scraper`) Actor

Scrape Instagram at scale - posts, carousels, reels, comments, mentions, and profile, hashtag & place details, plus keyword search - from any profile, post, hashtag or location URL. No login. Cheaper than the alternatives at $1.49/1,000 results. Export CSV, JSON, Excel.

- **URL**: https://apify.com/zaver.api/instagram-scraper.md
- **Developed by:** [Zaver](https://apify.com/zaver.api) (community)
- **Categories:** Social media, Marketing
- **Features:** Limited permissions
- **Stats:** 24 total users, 8 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.49 / 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/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 Scraper — Posts, Reels, Profiles, Hashtags & Comments

**Instagram Scraper** is an all-in-one tool to **scrape Instagram** data at scale — **without logging in**. Extract **Instagram posts, reels, carousels, comments, mentions, profiles, hashtags and places**, or **search** Instagram by keyword, and download everything as **CSV, JSON or Excel**. Point it at any profile, post, reel, hashtag or location and get clean, structured data in seconds.

One actor replaces a stack of single-purpose scrapers — an **Instagram profile scraper**, **post scraper**, **reel scraper**, **comment scraper**, **hashtag scraper** and **Instagram search scraper** — at a flat **$1.49 per 1,000 results**, below the usual $1.50–$2.70. No cookies, no API tokens, no Instagram Business account.

> ⭐ No login required · deep pagination · pay only for results · export to CSV/JSON/Excel · works over the Apify API, MCP, or scheduler.

### What can this Instagram Scraper do?

- 📸 **Scrape Instagram posts & carousels** — from a profile, a hashtag, a location, or a single post URL, with caption, hashtags, mentions, likes, comments, views, timestamp, author and media links.
- 🎬 **Scrape Instagram reels** — from any profile or hashtag, with plays, likes, comments and video links.
- 💬 **Scrape Instagram comments** — from any post or reel, with comment text, author, likes, timestamp and reply counts.
- 🏷️ **Scrape mentions & tagged posts** — every post a profile is tagged in, for brand-mention monitoring.
- 👤 **Scrape Instagram profiles** — bio, follower and following counts, posts count, category, external link, public email/phone and verification status.
- \#️⃣ **Scrape hashtag details** — post volume and metadata for any hashtag.
- 📍 **Scrape places / locations** — name, address, coordinates and category.
- 🔎 **Search Instagram** — discover profiles, hashtags or places by keyword.

### Modes at a glance

| `resultsType` | Works on | You get |
|---|---|---|
| `posts` | profile · hashtag · location · post URL | posts & carousels + engagement + media |
| `reels` | profile · hashtag | reels/clips + plays + engagement |
| `comments` | post/reel URL | comments + author + likes + replies |
| `mentions` | profile | posts the profile is tagged in |
| `details` | profile · hashtag · place · post | full details for that entity |
| **search** (`search` + `searchType`) | keyword | discovered profiles / hashtags / places |

### Why choose this Instagram Scraper

- 💸 **Lower price** — flat **$1.49 / 1,000 results**, cheaper than every tier of the popular alternatives. A 100,000-result export costs **$149**.
- 🧩 **All-in-one** — profiles, posts, reels, comments, mentions, hashtags, places and search in a single actor and a single output schema.
- 🔓 **No login, no API key, no Business account** — just paste URLs, usernames or `#hashtags`.
- 📦 **Deep export** — paginates as far as Instagram serves each feed; set the limit high and let it run.
- ⚡ **Pay per result** — you're billed only for items delivered; private or failed targets cost nothing.
- 🔌 **Automate it** — run from the Apify Console, the **API**, the **MCP server**, scheduled tasks, or integrations like Make and Zapier.

### How to use it (step by step)

1. Add what you want to scrape to **`directUrls`** — profile URLs or usernames, post/reel URLs, hashtag URLs or `#tags`, or location URLs.
2. Pick **`resultsType`** — `posts`, `reels`, `comments`, `mentions`, or `details`.
3. Set **`resultsLimit`** (results per source) and, optionally, **`onlyPostsNewerThan`**.
4. Or switch to discovery: fill **`search`** with keywords and pick **`searchType`** (`hashtag`, `profile`, `place`).
5. Run, then download the dataset as **CSV, JSON, or Excel** — or pull it from the API.

### Input examples

**Scrape a profile's posts (newest month only):**

```json
{
  "directUrls": ["https://www.instagram.com/nasa/"],
  "resultsType": "posts",
  "resultsLimit": 200,
  "onlyPostsNewerThan": "1 month"
}
```

**Scrape reels from a hashtag:**

```json
{ "directUrls": ["#travel"], "resultsType": "reels", "resultsLimit": 100 }
```

**Scrape comments from a post or reel:**

```json
{ "directUrls": ["https://www.instagram.com/p/CODE/"], "resultsType": "comments", "resultsLimit": 500 }
```

**Scrape full profile details (bulk):**

```json
{ "directUrls": ["nasa", "natgeo", "nike"], "resultsType": "details" }
```

**Search Instagram for hashtags:**

```json
{ "search": ["coffee", "specialtycoffee"], "searchType": "hashtag", "searchLimit": 25 }
```

### Output examples

**Post**

```json
{
  "type": "post",
  "url": "https://www.instagram.com/p/CxYz.../",
  "media_type": "reel",
  "caption": "Sunrise over the Dolomites …",
  "hashtags": ["dolomites", "sunrise"],
  "mentions": ["ig_europe"],
  "likes": 8421,
  "comments_count": 133,
  "views": 210544,
  "taken_at": "2026-09-01T06:12:00+00:00",
  "username": "wanderlust",
  "is_verified": true
}
```

**Comment**

```json
{ "type": "comment", "text": "Incredible shot!", "username": "traveler", "likes": 12, "reply_count": 1, "created_at": "2026-09-01T09:20:00+00:00" }
```

**Profile**

```json
{
  "type": "profile",
  "username": "nasa",
  "full_name": "NASA",
  "followers": 98000000,
  "following": 78,
  "posts_count": 4200,
  "category": "Government organization",
  "public_email": null,
  "is_verified": true
}
```

**Hashtag** → `{ "type": "hashtag", "name": "travel", "media_count": 712000000 }`
**Place** → `{ "type": "place", "name": "Central Park", "lat": 40.78, "lng": -73.96, "address": "New York, NY" }`

Every row carries a **`type`** field, so a mixed run is trivial to split by post / comment / profile / hashtag / place.

### Pricing

Pay-per-result, the same simple model as the popular alternatives — just cheaper:

| Event | Price |
|---|---|
| `result-scraped` | **$1.49 / 1,000 results** ($0.00149 each) |

- 10,000 results → **$14.90**
- 100,000 results → **$149.00**

Only successful results are billed; private, deleted or not-found targets return an error row and cost nothing. No platform usage fees.

### Use cases

- **Marketing & competitor research** — track competitors' posts, reels and engagement over time.
- **Influencer discovery & vetting** — pull profile stats and recent content before you reach out.
- **Lead generation** — collect public business emails, phones and links from profiles.
- **Social listening & brand monitoring** — watch mentions, tagged posts and hashtag activity.
- **Content & trend analysis** — analyze hashtags, captions and top-performing formats.
- **Data science & archiving** — export structured Instagram datasets for analysis or backup.

### FAQ

**Do I need an Instagram login or password?** No. It scrapes only public data — no login, cookies, or Business account.

**How many results can I get per run?** As many as Instagram serves for that target; set `resultsLimit` high for a deep export.

**Which formats can I export?** CSV, JSON, Excel, and via the Apify API/dataset.

**Can I automate or schedule it?** Yes — run it from the API, the MCP server, or scheduled tasks, and connect it to Make, Zapier and more.

**Is scraping Instagram legal?** This actor collects only publicly available data. You are responsible for using the data in line with applicable laws and Instagram's terms.

### 🔌 Use this Actor from Claude, ChatGPT or Cursor (MCP)

Add it as a tool in any MCP client - Claude Code, Claude Desktop, Cursor, VS Code or ChatGPT - through Apify's hosted MCP server. The client runs the Actor for you and reads the results back, so you never leave the chat.

**Actor-specific server URL**

```
https://mcp.apify.com/?tools=actors,docs,zaver.api/instagram-scraper
```

**Claude Code** - one command:

```bash
claude mcp add --transport http instagram "https://mcp.apify.com/?tools=actors,docs,zaver.api/instagram-scraper"
```

**Claude Desktop, Cursor or any client with a JSON config:**

```json
{
  "mcpServers": {
    "instagram": {
      "url": "https://mcp.apify.com/?tools=actors,docs,zaver.api/instagram-scraper"
    }
  }
}
```

The first connection opens a browser to sign in to Apify, so no API token sits in your config. If your client cannot do OAuth, send `Authorization: Bearer <YOUR_APIFY_TOKEN>` instead.

Then simply ask:

> Scrape posts, reels and profile details for @nasa

### Related actors

- **Instagram Hashtag Scraper — Find Creators & Leads by Topic** — de-duplicated creators with contact details.
- **Instagram Email & Contact Extractor** — bulk emails, phones and links from a username list.
- **Instagram Followers Scraper** — export followers/following with optional enrichment.

***

*This actor is not affiliated with or endorsed by Instagram or Meta. It accesses only publicly available information.*

# Actor input Schema

## `directUrls` (type: `array`):

What to scrape - one per line. Accepts profile URLs or usernames (<code>nasa</code>), post/reel URLs (<code>/p/CODE/</code>, <code>/reel/CODE/</code>), hashtag URLs or <code>#tags</code>, and location URLs. The result type below decides what is pulled from each.

## `keywords` (type: `array`):

Free-text search - find posts or reels matching a phrase, brand or product name (<code>ashirwad ka diya</code>). Works with resultsType <b>posts</b> or <b>reels</b>; one phrase per line.

## `resultsType` (type: `string`):

<b>posts</b> = posts/carousels from a profile, hashtag or location (or one post URL). <b>reels</b> = reels/clips. <b>comments</b> = comments from a post/reel URL. <b>mentions</b> = posts a profile is tagged in. <b>details</b> = profile / hashtag / place / post details.

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

Max results to return per URL/source. You are billed only per result delivered.

## `onlyPostsNewerThan` (type: `string`):

Keep only posts on/after this date. ISO date (<code>2026-01-01</code>) or relative (<code>3 days</code>, <code>2 weeks</code>, <code>1 month</code>). Applies to posts/reels.

## `skipPinnedPosts` (type: `boolean`):

Exclude pinned posts when scraping a profile's posts.

## `search` (type: `array`):

Optional. Keywords to discover profiles, hashtags or places (instead of, or alongside, direct URLs). One query per line.

## `searchType` (type: `string`):

What the search query returns.

## `searchLimit` (type: `integer`):

Max results per search query.

## Actor input object example

```json
{
  "directUrls": [
    "https://www.instagram.com/nasa/"
  ],
  "resultsType": "posts",
  "resultsLimit": 50,
  "onlyPostsNewerThan": "",
  "skipPinnedPosts": false,
  "searchType": "hashtag",
  "searchLimit": 20
}
```

# Actor output Schema

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

One dataset item per scraped result.

## `resultsCsv` (type: `string`):

The same records as a CSV download, ready for Excel or Sheets.

## `runSummary` (type: `string`):

Counts for the run: results by type, requests and errors.

# 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 = {
    "directUrls": [
        "https://www.instagram.com/nasa/"
    ]
};

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

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

```

## MCP server setup

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