# Instagram Post & Reel Details Scraper (`crawl_craft/instagram-post-reel-details-scraper`) Actor

Opening Instagram posts one by one to copy stats is slow. Paste post, reel or carousel links and get likes, comments, views, caption, hashtags, audio, tagged users, media files, top comments and the owner's profile. No login or cookies needed.

- **URL**: https://apify.com/crawl_craft/instagram-post-reel-details-scraper.md
- **Developed by:** [Crawl Craft](https://apify.com/crawl_craft) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 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

### 🚀 What is Instagram Post & Reel Details Scraper?

Instagram Post & Reel Details Scraper is an Apify Actor and Instagram post details scraper. Paste post, reel or TV links, shortcodes or media ids and get likes, comments, views, caption, hashtags, audio, tagged users, media links, top comments and owner profile numbers for each one. No Instagram login or cookies are needed.

Copying stats from one post at a time is slow. Many people look for an Instagram post scraper to avoid exactly that, and a whole list of links goes into a single run here. Anyone who needs to scrape Instagram data for a set of posts gets one tidy row per post.

- 📈 **Engagement in one row:** likes, comments, views and `engagement_rate_pct` make Instagram engagement rate per post easy to compare.
- 👤 **Owner numbers included:** followers, following, posts count, bio, links and contact emails can be added to every post.
- 🎵 **Reel audio and media links:** track title, artist, every video quality and every carousel slide.
- 🗂️ **Separate tables:** posts, owners, top comments, media files, tagged people and a status row per input.
- 🔁 **Easy to repeat:** run the same list again on a schedule and compare the rows over time.

People who search for an Instagram scraper no login usually want data without handing over an account. That is how this Actor works, and you can try it from the Apify Console.

### 📊 What data can you extract from Instagram posts and reels?

Each saved post becomes one row, so this Instagram post data extractor gives you a clean table that you can export as JSON, CSV or Excel from the dataset. Photos, carousels, reels, videos and TV posts are supported, and you can scrape Instagram posts in bulk by pasting many links.

| Field | Description | Example |
|---|---|---|
| `post_id` | Numeric Instagram id of the post. | 3838220318074783538 |
| `shortcode` | Short code in the post link. | DVEGQskiMcy |
| `post_url` | Public link of the post. | https://www.instagram.com/p/DVEGQskiMcy/ |
| `post_type` | photo, carousel, reel, video or tv. | photo |
| `caption` | Full caption text. | Never been so proud of this team |
| `hashtags` | Hashtags used in the caption, without #. | IndvSA |
| `mentions` | Accounts mentioned in the caption. | icc |
| `like_count` | Like count. Empty when the owner hides likes. | 163564 |
| `comment_count` | Number of comments. | 1413 |
| `view_count` | Video views for reels and videos. Empty for photos. | - |
| `posted_at` | When the post was published (UTC, ISO 8601). | 2026-02-22T14:46:51Z |
| `age_days` | Days between publishing and this run. | 241 |
| `audio_title`, `audio_artist`, `audio_id` | Track or original sound of a reel. | - |
| `is_original_audio`, `has_audio` | Whether the sound was made for the post and whether the video has audio. | - |
| `sponsored_signals` | Ad-style hashtags found in the caption (ad, sponsored, collab ...). | - |
| `is_ai_labeled` | True when the post carries an AI-generated label. | false |
| `video_duration`, `width`, `height` | Video length in seconds and original size in pixels. | 1440 x 1920 |
| `location` | Tagged place with id, name, latitude and longitude. | - |
| `tagged_users`, `coauthors` | Accounts tagged in the media and collaboration partners. | - |
| `topics` | Topic pills Instagram shows under the post. | india vs south africa |
| `accessibility_caption` | Alt text generated for the media. | Photo by Taapsee Pannu on February 22, 2026. |
| `comments_restricted` | True when comments are limited for visitors. | false |
| `owner_id`, `owner_username`, `owner_full_name` | The account that published the post. | 181046327, taapsee, Taapsee Pannu |
| `owner_is_verified`, `owner_is_private` | Blue-tick and private-account flags. | true, false |
| `owner_follower_count` | Follower count of the owner. | 19665387 |
| `owner_following_count` | Accounts the owner follows. | 333 |
| `owner_posts_count` | Posts on the owner profile. Empty when Instagram rounds it. | 3180 |
| `engagement_rate_pct` | Likes and comments of the post compared with the owner's followers, in percent. | 0.8389 |
| `owner_biography`, `owner_links`, `contact_emails` | Bio text, bio links and emails found in the bio and caption. | - |
| `top_comments` | Public top comments with user, text, likes and time. | - |
| `image_url`, `thumbnail_url`, `video_url` | Largest image, cover image and best-quality video link. | - |
| `video_qualities`, `carousel_count`, `carousel_items` | Every video quality, number of slides and each slide. | - |
| `data_notes` | Why a field is empty (for example likes hidden by the owner). | - |
| `scraped_at`, `success` | When the row was collected (UTC) and whether the post was read. | 2026-10-21T19:13:12Z, true |

Reels and videos add audio and duration, which suits anyone who wants an Instagram reel data scraper. Carousel posts keep every slide, so the Actor also works as an Instagram carousel scraper. Place, topics and posting time round out the Instagram post metadata scraper side, and image, thumbnail and video links give you Instagram media scraper output.

The owner fields (except the basic account name, id and flags) need `includeOwnerProfile`. `top_comments` needs `maxComments` above 0. The link fields need `includeMediaUrls`.

The Output tab also offers separate tables: **Owner profiles**, **Top comments**, **Media files**, **Tagged & co-authors** and **Status per input**.

### 💡 Use cases for Instagram post and reel data

- **Influencer vetting:** compare `like_count`, `comment_count`, `owner_follower_count` and `owner_is_verified` across a creator's posts before you book them. An Instagram post likes scraper is only useful with context, so `engagement_rate_pct` puts likes next to followers.
- **Competitor analysis:** start Instagram competitor analysis by pasting rival post links and comparing `like_count`, `comment_count`, `view_count`, `posted_at` and `age_days`.
- **Reel performance and audio:** run an Instagram reel performance analysis with `view_count`, `video_duration` and `is_original_audio`. Then see which Instagram reel audio sits under the strongest reels with `audio_title` and `audio_artist`.
- **Hashtag and content research:** Instagram hashtag analysis starts with `hashtags`, `mentions` and `topics`. The same columns feed Instagram content research on captions that work.
- **Sponsored posts:** find sponsored Instagram posts by filtering `sponsored_signals` (ad-style hashtags in the caption), `coauthors` and `is_ai_labeled`.
- **Brand monitoring:** Instagram brand monitoring works from `tagged_users`, `mentions` and `top_comments` on the posts you list. To monitor Instagram post comments over time, schedule the run and compare `top_comments` between datasets.
- **Outreach lists:** build a sheet of influencer contact emails from `contact_emails` and `owner_links`, found in the owner's bio and the caption.
- **Media collection:** collect Instagram media links from `image_url`, `video_url`, `video_qualities` and `carousel_items`. The links expire after a few days, so download soon.

Teams that want an Instagram post analytics scraper usually start with the **Engagement** view of the dataset. Anyone who needs an Instagram post stats scraper can use that same view.

### 🛠️ How to scrape Instagram post details

1. Create an Apify account and open Instagram Post & Reel Details Scraper.
2. Paste post, reel or TV links, shortcodes or media ids into **Post & reel links** (`urls`).
3. Set `maxComments` and switch `includeOwnerProfile`, `includeMediaUrls` and `includeFailedRows` on or off.
4. Click **Start**.
5. Watch the posts arrive in the Output tab while the run is going.
6. Download the dataset as JSON, CSV or Excel.

#### How to get Instagram post details by link

Paste the link into `urls` and press **Start**. A link such as `https://www.instagram.com/p/DVEGQskiMcy/` gives one row with the fields above, and you can ask for Instagram post details by link for hundreds of posts at once.

#### How to get Instagram reel details

Use a reel link in the same list. As an Instagram reel details scraper, the Actor adds `view_count`, `audio_title`, `audio_artist` and `video_duration` for reels when Instagram shows them. You can ask for Instagram reels details by link, shortcode or media id in the same list.

#### How to get Instagram post ID

Every row carries `post_id` and `shortcode`. If you paste a numeric media id, the row still returns the shortcode and the public `post_url`.

#### How to export Instagram post data

Open the run, go to the **Storage** tab and choose JSON, CSV or Excel. Each table, such as owners or top comments, can be exported the same way.

### 💰 How much does it cost to scrape Instagram posts?

Instagram Post & Reel Details Scraper uses pay-per-event pricing. Each saved post is one `main_result` event, shown as Results in the Console, and the price per 1,000 results depends on your Apify plan tier:

| Apify plan | Price per 1,000 results |
|---|---|
| Free | $2 |
| Bronze | $1.8 |
| Silver | $1.5 |
| Gold / Platinum / Diamond | $1.4 |

A run also has a small **Actor Start** event of $0.00005 per run start. For example, 1,000 saved posts cost $2 on the first tier. Inputs that fail are not charged, and the run stops cleanly when a spend limit you set is reached. See the Pricing tab for current rates.

### ⬇️ Input

The only required field is `urls`, which takes Instagram post, reel or TV links, shortcodes or numeric media ids. As an Instagram post data scraper the Actor needs nothing else to start.

![Instagram post details scraper input form with post and reel links](IMAGE_URL_PLACEHOLDER)

See the Input tab for every option. Example input:

```json
{
  "urls": [
    "https://www.instagram.com/p/DVEGQskiMcy/",
    "https://www.instagram.com/reel/DdTHUlbohci/",
    "DeL1cBcjbKb"
  ],
  "maxComments": 5,
  "includeOwnerProfile": true,
  "includeMediaUrls": true,
  "includeFailedRows": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

| Field | Description |
|---|---|
| `urls` (required) | Post, reel or TV links, shortcodes or numeric media ids. Bulk input is supported. |
| `maxComments` | Top public comments to save per post. The form pre-fills 5, and 0 turns comments off. About 15 top comments are public without an account, so higher values are lowered to 15. |
| `includeOwnerProfile` | Adds the owner's followers, following, posts count, bio, links, emails and engagement rate. |
| `includeMediaUrls` | Adds image, video, every video quality and carousel slide links. |
| `includeFailedRows` | Adds a row to the Status table for every input that could not be read, with the reason. |
| `proxyConfiguration` | Optional. Leave it as it is for automatic handling. |

💡 Start with a few links to check the result, then paste the full list.

### ⬆️ Output

The scraped results are shown as a dataset in the **Storage** tab. The table view is for convenience and doesn't show **all the fields**.

![Instagram post details scraper output table with likes, comments and owner data](IMAGE_URL_PLACEHOLDER)

Export formats: JSON, CSV and Excel. Reel rows from this Instagram reel data extractor add audio and duration fields. Example output (field values taken from the dataset schema examples, shortened, not a captured run):

```json
{
  "post_id": "3838220318074783538",
  "shortcode": "DVEGQskiMcy",
  "post_url": "https://www.instagram.com/p/DVEGQskiMcy/",
  "post_type": "photo",
  "caption": "Never been so proud of this team",
  "hashtags": ["IndvSA"],
  "mentions": ["icc"],
  "like_count": 163564,
  "comment_count": 1413,
  "posted_at": "2026-02-22T14:46:51Z",
  "age_days": 241,
  "sponsored_signals": [],
  "is_ai_labeled": false,
  "width": 1440,
  "height": 1920,
  "tagged_users": [],
  "coauthors": [],
  "topics": ["india vs south africa"],
  "accessibility_caption": "Photo by Taapsee Pannu on February 22, 2026.",
  "comments_restricted": false,
  "owner_id": "181046327",
  "owner_username": "taapsee",
  "owner_full_name": "Taapsee Pannu",
  "owner_is_verified": true,
  "owner_is_private": false,
  "owner_follower_count": 19665387,
  "owner_following_count": 333,
  "owner_posts_count": 3180,
  "engagement_rate_pct": 0.8389,
  "data_notes": [],
  "scraped_at": "2026-10-21T19:13:12Z",
  "success": true
}
```

### ⚠️ Limitations and error handling

- Only public posts are read. Private or deleted posts return a row in the Status table with the reason.
- About 15 top comments per post are public without an account, which is what `maxComments` can return.
- `view_count` exists for reels, videos and TV posts only, and `like_count` is empty when the owner hides likes.
- Share, save and repost counts are not part of the output.
- Media links expire after a few days.

Anyone treating the Actor as an Instagram post information scraper should expect empty fields where Instagram shows visitors nothing. The `data_notes` field says why a value is missing, using these notes: `owner_profile_unavailable`, `likes_hidden_by_owner`, `comments_restricted`, `like_count_unavailable`, `posted_at_unavailable`, `comments_unavailable` and `view_count_unavailable`.

#### Error codes reference

With `includeFailedRows` on, every input that could not be read gets a row in the Status table with `success` set to false, an `error` code and a plain-language `message`.

| Code | Meaning | What to do |
|---|---|---|
| `invalid_input` | The value is not a post, reel or TV link, shortcode or media id. | Check the value and try again. |
| `post_not_found_or_private` | No public post was found for this code. | Check that the post is public and the link is right. |
| `layout_changed` | No post data was found; the post may be deleted or private. | Try again later, and report it in the Issues tab if it repeats. |
| `rate_limited` | Instagram did not return this post. | Try again later. |
| `network_error` | Instagram could not be reached. | Try again later. |
| `server_error` | Instagram could not serve this post right now. | Try again later. |
| `unexpected_error` | Something unexpected went wrong. | Try again, and report it if it repeats. |
| `parse_error` | The post could not be read. | Try again, and report it if it repeats. |

### 🔌 Integrating Instagram Post & Reel Details Scraper with other apps

Every run can be started from the Apify API, on a schedule, or from a webhook, and the results can flow into other apps. See the API tab for ready-made code in JavaScript, Python and the CLI.

- **Schedules:** use [Apify schedules](https://docs.apify.com/platform/schedules) to run the same link list every day or week. The Actor has no built-in change tracking, so each run saves fresh rows, and `scraped_at` and `age_days` help you track Instagram post performance between runs.
- **Webhooks:** send a [webhook](https://docs.apify.com/platform/integrations/webhooks) when a run finishes to trigger your own pipeline.
- **Integrations:** connect results to Google Sheets, Make, Zapier or Slack through [Apify integrations](https://docs.apify.com/platform/integrations). A spreadsheet is a handy home for Instagram post extractor output.

#### Use it as an Instagram post scraper API

Send the links as the `urls` input and read the dataset as JSON. That makes the Actor an Instagram post details API for your own app.

For reels, the same call works as an Instagram reel details API. Teams that want an Instagram post data API can call the Actor from code and read the tables of their choice.

### 🔗 Other social media scrapers by crawl_craft

| Actor | What it extracts | When to use it |
|---|---|---|
| [Instagram Reels Scraper](https://apify.com/crawl_craft/instagram-reels-scraper) | Plays, likes, comments, captions, hashtags, music, MP4 video links and engagement rates from usernames, reel links or audio pages. | Use it when you start from accounts or audio pages instead of a list of post links. |
| [Instagram Reels Search & Trend Discovery](https://apify.com/crawl_craft/instagram-reels-search-trend-discovery) | Public reels found by keyword, with plays, likes, comments, hashtags, audio, location, creator stats and trend metrics. | Use it when you do not have links yet and want to discover reels by keyword. |
| [TikTok Video Scraper](https://apify.com/crawl_craft/tiktok-video-scraper) | Captions, hashtags, views, likes, comments, shares, author and music data from TikTok video URLs. | Use it when the same research is for TikTok. |

### ⚖️ Is it legal to scrape Instagram?

Instagram Post & Reel Details Scraper only extracts data that Instagram shows publicly to visitors and does not read private accounts. Results can still contain personal data, such as names, bios and emails found in public bios, so collect it only with a legitimate reason and consider the GDPR (Regulation (EU) 2016/679) and Instagram's terms. If you are unsure, consult a lawyer. Apify explains more in its posts on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/) and [ethical web scraping](https://blog.apify.com/what-is-ethical-web-scraping-and-how-do-you-do-it/).

### ❓ FAQ

#### Do I need an Instagram account or cookies?

No. The Actor reads public data that any visitor can see. You only paste links, which is what people mean when they search for an Instagram post scraper no cookies.

#### Can I scrape Instagram comments?

Partly. You get the public top comments, about 15 per post, with `username`, `text`, `like_count`, `reply_count` and `posted_at`. Set `maxComments` to 0 to leave them out.

#### Can I scrape Instagram reels?

Yes. Reel links, shortcodes and media ids work like any post, and reel rows add audio and duration.

#### Is there a separate Instagram reel scraper?

This Actor reads the reels you list. For whole accounts or audio pages, see Instagram Reels Scraper in the table above.

#### Is this an Instagram post crawler that follows profiles?

No. The Actor reads only the posts you list. It does not crawl profiles, hashtags or searches.

#### Can I use it as an Instagram post scraper online?

Yes. Open it in the Apify Console in your browser, paste the links and press **Start**, or call it through the API.

#### Why is view_count empty on a photo?

Views exist only for reels, videos and TV posts. Photos and carousels leave `view_count` empty.

#### What happens if one link fails?

The other posts are still saved. The failed input gets a row in the Status table with a reason when `includeFailedRows` is on.

#### Do I need to set a proxy?

No. `proxyConfiguration` is optional, and you can leave it as it is.

### 💬 Your feedback

Found a bug or missing a field? Open the **Issues** tab on the Actor page and include the link that failed. For custom solutions, write to hello.crawlcraft@gmail.com.

# Actor input Schema

## `urls` (type: `array`):

One or many Instagram post, reel or TV links, shortcodes or numeric media ids (for example https://www.instagram.com/reel/DdTHUlbohci/ or DeL1cBcjbKb). Bulk input is supported.

## `maxComments` (type: `integer`):

How many public top comments to save for each post. 0 turns comments off. Instagram shows about 15 top comments to visitors without an account.

## `includeOwnerProfile` (type: `boolean`):

Add the owner's followers, following, posts count, bio, links, emails and engagement rate to each post.

## `includeMediaUrls` (type: `boolean`):

Add image, video, every video quality and carousel slide links. Media links expire after a few days, so download them soon.

## `includeFailedRows` (type: `boolean`):

Add a row to the Status table for every input that could not be read (deleted, private or invalid), with the reason.

## `proxyConfiguration` (type: `object`):

Optional. Leave this as it is for automatic handling, or choose your own proxy setup here.

## Actor input object example

```json
{
  "urls": [
    "https://www.instagram.com/p/DVEGQskiMcy/",
    "https://www.instagram.com/reel/DdTHUlbohci/",
    "DeL1cBcjbKb"
  ],
  "maxComments": 5,
  "includeOwnerProfile": true,
  "includeMediaUrls": true,
  "includeFailedRows": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One row per post with every field.

## `owners` (type: `string`):

Owner followers, bio, links and emails per post.

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

One row per public top comment.

## `media` (type: `string`):

One row per image, video quality or slide.

## `people` (type: `string`):

One row per tagged account or co-author.

## `status` (type: `string`):

One row per input: saved or why it failed.

## `summary` (type: `string`):

Counts for this run.

# 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 = {
    "urls": [
        "https://www.instagram.com/p/DVEGQskiMcy/",
        "https://www.instagram.com/reel/DdTHUlbohci/",
        "DeL1cBcjbKb"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawl_craft/instagram-post-reel-details-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 = {
    "urls": [
        "https://www.instagram.com/p/DVEGQskiMcy/",
        "https://www.instagram.com/reel/DdTHUlbohci/",
        "DeL1cBcjbKb",
    ],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("crawl_craft/instagram-post-reel-details-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 '{
  "urls": [
    "https://www.instagram.com/p/DVEGQskiMcy/",
    "https://www.instagram.com/reel/DdTHUlbohci/",
    "DeL1cBcjbKb"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call crawl_craft/instagram-post-reel-details-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawl_craft/instagram-post-reel-details-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/K9q8dVld3scDI09ct/builds/dlCWM5ggplA86MNjn/openapi.json
