# Instagram Posts Scraper (`alwaysprimedev/instagram-posts-scraper`) Actor

Scrape Instagram posts like a pro! Extract likes, text, hashtags, and media URLs in seconds. Perfect for market research, competitor analysis, and trend spotting. Fast, reliable, and scalable. Download data in CSV or JSON. Automate your IG research now!

- **URL**: https://apify.com/alwaysprimedev/instagram-posts-scraper.md
- **Developed by:** [Always Prime](https://apify.com/alwaysprimedev) (community)
- **Categories:** Lead generation, SEO tools, Social media
- **Stats:** 14 total users, 2 monthly users, 91.4% runs succeeded, 4 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.50 / 1,000 posts

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.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 Posts Scraper 📸

Scrape recent posts from one or multiple Instagram profiles and get clean structured data in your Apify dataset.

This actor is built for users who want a simple way to collect Instagram post data for monitoring, research, lead generation, trend analysis, or content pipelines, without dealing with browser automation or messy exports.

### Why use this actor? 🚀

- Scrape posts from one profile or many profiles in a single run
- Collect recent Instagram posts with pagination support
- Get structured output for images, videos, and carousel posts
- Receive results progressively while the run is still in progress
- Keep the input simple with just profiles and post limits

The progressive dataset delivery is especially useful for longer runs: users can start working with data before the actor finishes.

### What data will you get? 📦

Each dataset item represents one Instagram post and can include:

- Profile username
- Post ID
- Shortcode
- Post URL
- Post type
- Image or thumbnail URL
- Video URL when available
- Caption
- Likes count
- Comments count
- Video view count
- Post timestamp
- Accessibility caption
- Image resource URLs

### Typical use cases 💼

- Track content posted by competitors
- Monitor brand, influencer, or creator accounts
- Build datasets for content research and publishing analysis
- Export Instagram post URLs and media links for internal workflows
- Collect profile post history for dashboards and reporting

### How it works ⚙️

The actor requests Instagram profile and feed endpoints, fetches recent posts, paginates until the requested limit is reached, and pushes each batch to the Apify dataset as soon as it is processed.

That means:

- you do not need to wait for the entire run to complete before seeing results
- long runs become easier to monitor
- downstream automations can start consuming data earlier

### Input example 🧩

```json
{
  "usernames": ["instagram", "natgeo"],
  "maxPosts": 30
}
````

You can also use a single profile:

```json
{
  "username": "instagram",
  "maxPosts": 24
}
```

### Input fields explained 📝

- `username`: Optional single Instagram username, kept for backward compatibility
- `usernames`: List of Instagram usernames without `@`
- `maxPosts`: Maximum number of recent posts to fetch per profile

### Output example 📄

```json
{
  "profileUsername": "instagram",
  "scrapedAt": "2026-03-20T20:10:15Z",
  "source": "instagram-web-and-feed",
  "id": "1234567890",
  "shortcode": "ABCDEF123",
  "url": "https://www.instagram.com/p/ABCDEF123/",
  "typeName": "GraphImage",
  "isVideo": false,
  "caption": "Example caption",
  "displayUrl": "https://example.com/image.jpg",
  "thumbnailUrl": "https://example.com/thumb.jpg",
  "videoUrl": "",
  "commentsCount": 128,
  "likesCount": 4521,
  "videoViewCount": 0,
  "takenAtTimestamp": 1710000000,
  "ownerUsername": "instagram",
  "accessibilityCaption": "",
  "displayResources": [
    "https://example.com/image-small.jpg",
    "https://example.com/image-large.jpg"
  ]
}
```

### Why it stands out ✨

- Fast HTTP-based scraping flow
- Clean flat output that works well in tables, exports, and automations
- Progressive dataset updates during the run
- Minimal input that is easy for non-technical users
- Supports multi-profile scraping in one job
- Ready for Apify Store usage and integrations

### Simple to run 🙌

The actor is designed to stay easy to use in the Apify Store. Users only need to provide profile names and the number of posts to fetch. No extra cookie, proxy group, country, or timeout fields are required in the public input.

### Limitations ⚠️

- Instagram may change or restrict the underlying endpoints at any time
- Some profiles may be harder to access depending on Instagram restrictions
- This actor is focused on profile posts, not comments, followers, or DMs
- Availability of some fields depends on what Instagram returns for a given post

### Good fit for ✅

- Analysts
- Growth teams
- Agencies
- Media monitoring workflows
- Research and content intelligence pipelines

### Not the best fit for ❌

- Full Instagram account management
- Messaging automation
- Deep engagement scraping beyond post-level data

### Ready to export and automate 🤖

The output can be used directly in:

- Apify datasets
- webhooks
- Make
- Zapier
- Google Sheets workflows
- internal ETL pipelines

If you need Instagram post data in a structured format with batch-by-batch delivery to the dataset, this actor is built exactly for that.

### Proxy setup

If you want to run the actor through a proxy on Apify, set the proxy URL in the actor environment variables.

- `INSTAGRAM_PROXY_URL`
- `PROXY_URL`

`INSTAGRAM_PROXY_URL` has priority. If neither variable is set, the actor sends requests directly without a proxy.

### Session setup

If Instagram requires login for the endpoint, set the session cookie in the actor environment variables.

- `INSTAGRAM_SESSION_ID`
- `SESSION_ID`

`INSTAGRAM_SESSION_ID` has priority. The actor no longer accepts `sessionId` in the public input.

# Actor input Schema

## `username` (type: `string`):

Optional. Profile username without @. Kept for backward compatibility.

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

List of profile usernames without @.

## `maxPosts` (type: `integer`):

How many recent posts to return for each profile. Supports pagination.

## Actor input object example

```json
{
  "usernames": [
    "instagram"
  ],
  "maxPosts": 24
}
```

# Actor output Schema

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

Full JSON output with one dataset item per scraped Instagram post.

## `overview` (type: `string`):

Dataset items rendered using the overview dataset view configured for this actor.

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

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

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

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Instagram Posts Scraper",
        "description": "Scrape Instagram posts like a pro! Extract likes, text, hashtags, and media URLs in seconds. Perfect for market research, competitor analysis, and trend spotting. Fast, reliable, and scalable. Download data in CSV or JSON. Automate your IG research now!",
        "version": "0.1",
        "x-build-id": "68aYp4u8wubInTt96"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/alwaysprimedev~instagram-posts-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-alwaysprimedev-instagram-posts-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/alwaysprimedev~instagram-posts-scraper/runs": {
            "post": {
                "operationId": "runs-sync-alwaysprimedev-instagram-posts-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/alwaysprimedev~instagram-posts-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-alwaysprimedev-instagram-posts-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": {
                    "username": {
                        "title": "Single Instagram username",
                        "type": "string",
                        "description": "Optional. Profile username without @. Kept for backward compatibility."
                    },
                    "usernames": {
                        "title": "Instagram usernames",
                        "type": "array",
                        "description": "List of profile usernames without @.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxPosts": {
                        "title": "Maximum posts per profile",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "How many recent posts to return for each profile. Supports pagination.",
                        "default": 24
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
