# Instagram Scraper (`calm_builder/instagram-scraper`) Actor

Scrape Instagram posts, reels, comments, profiles, hashtags and places from any public link. One table, one price per result. Exact likes, plays and comments, captions, dates, video links, followers and bios. No login, fast and low cost.

- **URL**: https://apify.com/calm\_builder/instagram-scraper.md
- **Developed by:** [Coder](https://apify.com/calm_builder) (community)
- **Stats:** 12 total users, 12 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 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.
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?

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

Scrape **Instagram posts, reels, comments, profiles, hashtags and places** from any public link into clean JSON, CSV or Excel. Paste any mix of usernames, post and reel links, hashtags and place links, pick **what to collect**, and get clean tables (posts & reels, profiles, comments, places) at **one price per result**. No Instagram account, no login and no cookies needed.

Use it for **social media analytics**, **influencer research**, **competitor monitoring**, **hashtag and trend research**, **local business and place research**, and **brand mentions**.

### What you can collect

| What to collect | From | You get |
| --- | --- | --- |
| **Posts** | profiles, hashtags, places | every post with caption, likes, comments, date, images, video links, owner |
| **Reels** | profiles | every reel with exact plays, likes, comments, music, video and audio links |
| **Comments** | post and reel links | comment text, likes, date, author |
| **Details** | profiles, posts, places | profile details (followers, bio, links, verified, business info, related profiles, 12 latest posts), full post details, place details |

Each kind of result gets its own table, so every table has only the columns that fit it. Posts, reels and comments come newest first. Pinned posts are marked, so you can keep them or skip them.

### Input

| Field | What it does |
| --- | --- |
| **Instagram links or usernames** | `natgeo`, profile links, post or reel links, `#travel` or hashtag links, place links (`instagram.com/explore/locations/...`) |
| **What to collect** | Posts, Reels, Comments or Details |
| **Results per input** | How many posts, reels or comments per input |
| **Hashtag search** | Hashtags to add as inputs, comma separated |
| **Published after** | Only posts newer than a date (`2026-09-01`) or a period (`7 days`, `3 months`) |
| **Skip pinned posts** | Leave out posts pinned to the top of a profile |

Input names match other popular Instagram scrapers (`directUrls`, `resultsType`, `resultsLimit`, `onlyPostsNewerThan`, `search`), so you can paste an existing input as-is.

#### Example input

```json
{
    "directUrls": ["natgeo", "#sunset", "https://www.instagram.com/explore/locations/212988663/"],
    "resultsType": "posts",
    "resultsLimit": 50,
    "onlyPostsNewerThan": "3 months"
}
```

***

### Pricing

One simple price: you pay per result you receive - a post, reel, comment, profile or place. Never for private or missing accounts, retries or filters.

| Result | Price per 1,000 |
| --- | --- |
| Any result | **$1.50** |

Prices are for the Apify Free plan; paid Apify plans get lower prices automatically. **Profile details include related profiles and the 12 latest posts at no extra cost. The date filter and pinned-post filter are free.** You can set a maximum cost per run in the run options - the Actor stops cleanly when it is reached.

Need only one kind of data? Our dedicated scrapers are cheaper for it: **Instagram Post Scraper**, **Instagram Reels Scraper**, **Instagram Comments Scraper**, **Instagram Profile Scraper**, **Instagram Hashtag Scraper** and **Instagram Location Scraper**.

### Free plan

On Apify's free plan a run uses up to 5 inputs and up to 10 results each. Every feature works, so you can try it before upgrading.

### Good to know

- **Public data only.** Private accounts are skipped and not charged.
- **Hashtags** return Instagram's top posts for the tag.
- **Places** return the place's top and recent posts.
- **Search by user or place name** needs an Instagram login, which this Actor never uses - paste profile or place links instead.
- **Mistyped or removed inputs** are listed at the end of the run log.

### FAQ

**Do I need an Instagram account or cookies?** No. Everything is public data, collected without logging in.

**Can I mix inputs in one run?** Yes - profiles, posts, hashtags and places can all go in the same list. Each input returns what fits "What to collect"; inputs that don't fit (for example a profile when collecting comments) are reported in the log and not charged.

**How fresh is the data?** Every run reads Instagram live, so counts are as of the moment a result was collected.

# Actor input Schema

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

One per row: a username (natgeo), a profile link, a post or reel link, a hashtag (#travel or instagram.com/explore/tags/travel), or a place link (instagram.com/explore/locations/...).

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

Posts: posts of profiles, hashtags and places. Reels: reels of profiles. Comments: comments of post and reel links. Details: profile, post or place details (profiles include their 12 latest posts).

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

How many posts, reels or comments to collect from each input, newest first. Not used for details.

## `search` (type: `string`):

One or more hashtags, comma separated (travel, food). Each is added as an input.

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

Only posts and reels published after this date (2026-09-01) or within a period (7 days, 3 months).

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

Leave out posts and reels pinned to the top of a profile.

## Actor input object example

```json
{
  "directUrls": [
    "natgeo",
    "https://www.instagram.com/p/DbA_2A4uL5K/"
  ],
  "resultsType": "posts",
  "resultsLimit": 20,
  "skipPinnedPosts": false
}
```

# Actor output Schema

## `posts` (type: `string`):

No description

## `profiles` (type: `string`):

No description

## `comments` (type: `string`):

No description

## `places` (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 = {
    "directUrls": [
        "natgeo",
        "https://www.instagram.com/p/DbA_2A4uL5K/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("calm_builder/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": [
        "natgeo",
        "https://www.instagram.com/p/DbA_2A4uL5K/",
    ] }

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,calm_builder/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/BAiyueP6AkugH9TP7/builds/52lOJ3s1WImiIW7Dl/openapi.json
