# Instagram Post & Reel Details | $2.3/1K on Starter (`publicsignallabs/instagram-post-reel-details`) Actor

Scrape public Instagram post and Reel details from URLs, shortcodes, or media IDs. Extract captions, engagement, owner details, image and video URLs, carousel children, dimensions, locations, tags, sponsorships, and audio in export-ready records.

- **URL**: https://apify.com/publicsignallabs/instagram-post-reel-details.md
- **Developed by:** [Public Signal Labs](https://apify.com/publicsignallabs) (community)
- **Categories:** Social media, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.30 / 1,000 post or reel lookup 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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Post & Reel Details

Scrape public Instagram post and Reel details from URLs, shortcodes, or numeric media IDs. Extract captions, timestamps, engagement metrics, owner information, image and video URLs, dimensions, carousel children, tags, coauthors, sponsorship details, locations, and audio metadata.

Use the data for content research, campaign tracking, creator analysis, media verification, and automated Instagram workflows. Batch up to 50 unique items on paying plans and export results as JSON, CSV, Excel, XML, or through the API. No Instagram login, cookies, browser, or proxy setup.

### What this Actor does

- Resolves post URLs, Reel URLs, shortcodes, and numeric media IDs
- Verifies that every response matches the requested media identity
- Returns one `succeeded` or `not_found` row for every completed valid lookup
- Deduplicates equivalent URLs, shortcodes, and IDs before making requests
- Normalizes posts, Reels, videos, and carousels into one stable schema

### Input

```json
{
  "media": [
    "https://www.instagram.com/p/CxOWiQNP2MO/",
    "CxOWiQNP2MO"
  ]
}
```

| Field | Rules |
|---|---|
| `media` | Required array of 1–50 Instagram post/Reel URLs, shortcodes, or numeric media IDs. Equivalent identifiers are deduplicated while first occurrence order is retained. |

The Actor selects the appropriate lookup route automatically. There is no fallback setting to configure.

### Output

Each completed valid lookup creates one dataset row:

| Field group | Fields | Description |
|---|---|---|
| Source and outcome | `source_input`, `input_index`, `status` | Original input, deterministic position, and `succeeded` or `not_found` outcome. |
| Media identity | `id`, `shortcode`, `url`, `media_type`, `product_type` | Canonical media identifiers and normalized post, Reel, video, image, or carousel type. |
| Content | `caption`, `title`, `taken_at`, `accessibility_caption` | Public text, publishing time, and accessibility description. |
| Engagement | `like_count`, `comment_count`, `play_count`, `view_count`, `share_count` | Public engagement counters when Instagram exposes them. |
| Media assets | `display_url`, `video_url`, `width`, `height`, `duration_seconds` | Image/video locations, dimensions, and video duration. |
| Owner | `owner_id`, `owner_username`, `owner_full_name`, `owner_is_verified`, `owner_is_private` | Public owner identity and account flags. |
| Structure and context | `children`, `user_tags`, `coauthors`, `sponsor_tags`, `location`, `audio`, `is_paid_partnership` | Carousel children, relationships, sponsorship, place, and audio metadata. |

Media fields are `null` and array fields are empty when `status` is `not_found`. Image and video URLs can expire; download assets you need to retain.

`OUTPUT` contains aggregate totals and sanitized per-input status records. `AUDIT` contains aggregate request, usage, storage, FREE-admission, and charge reconciliation metrics. Neither record contains input values or credentials.

### Pricing

**$2.3 per 1,000 completed valid post or Reel lookups. One lookup result row costs exactly `$0.0023`.**

| Outcome | Dataset row | Exact event charge |
|---|---|---:|
| Post or Reel found | `status: succeeded` with available media details | `$0.0023` |
| Valid lookup with no media found | `status: not_found` with media fields empty | `$0.0023` |
| Malformed customer input rejected before lookup | None | `$0.0000` |
| Provider, identity-check, or malformed-response failure | None | `$0.0000` |

A completed valid media lookup is charged even when no post or Reel information can be found. Syntactically malformed URLs, shortcodes, or IDs rejected before upstream work are never charged. The single media-result event both saves and charges the status-bearing row. The Actor verifies that the requested maximum workload fits the run spending limit before starting upstream work.

### FREE demo

FREE users receive five admitted runs per UTC calendar month through the portfolio-wide quota ledger. Each admitted run accepts exactly one media item and has a strict upstream-attempt cap. Paying runs bypass the FREE quota ledger.

### Limits and behavior

- Public Instagram data only
- Ordering and counters can change between runs
- Some promoted or legacy media that is unavailable through the current media-details route can return `not_found`
- One source failure does not discard successful rows from other inputs
- No continuation token is exposed in this version

### Responsible use

Collect and use public data only where you have a lawful purpose. Respect privacy, intellectual-property rights, platform rules, anti-spam requirements, and applicable data-protection law. Minimize retained data, secure exports, and honor deletion obligations.

This Actor is unofficial and is not affiliated with or endorsed by Instagram or Meta.

### Support

Use the **Issues** tab on this Actor's Apify page. Include the run ID and a sanitized input shape. Never include API tokens, cookies, credentials, personal contact values, or other private data.

# Actor input Schema

## `media` (type: `array`):

Instagram post/Reel URLs, shortcodes, or numeric media IDs. Paying runs accept up to 50 unique values.

## Actor input object example

```json
{
  "media": [
    "https://www.instagram.com/p/CxOWiQNP2MO/"
  ]
}
```

# Actor output Schema

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

One status-bearing row per completed valid Instagram post or Reel lookup.

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

Run status, delivered totals, pricing, and sanitized per-input outcomes.

## `audit` (type: `string`):

Aggregate request, usage, storage, charge, and FREE admission metrics without input values or credentials.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("publicsignallabs/instagram-post-reel-details").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("publicsignallabs/instagram-post-reel-details").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 '{}' |
apify call publicsignallabs/instagram-post-reel-details --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,publicsignallabs/instagram-post-reel-details"
        }
    }
}

```

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/203Q0ywfQs38lzVgM/builds/0qjos8vudiK8AWHlO/openapi.json
