Instagram Reels API and MCP — Plays, Likes, Duration & Audio
Send an Instagram username, profile URL or single reel URL and this source returns reels as data: caption, hashtags, mentions, plays, likes, comments, duration, the audio used, cover image, video URL and publish date.
- You send
- An Instagram username, profile URL or reel URL
- You get back
- Reels with caption, plays, likes, comments, duration, audio and video URL
- Coverage
- Reels on public Instagram accounts.
- Price
- 5 points per returned reel, up to 1,000 per request — $5 per 1,000
- Billed per reel actually returned, capped by max_items. An account with no reels costs nothing.
Ways to get this data
Three approaches teams use today, and where each one runs into trouble.
| Approach | What it takes | Cost | Trade-off |
|---|---|---|---|
| Watching reels by hand | Open each reel and note the counts | Free, and slow | No way to compare many accounts consistently |
| A creator analytics platform | A subscription and onboarding | Monthly or annual contract | Covers its own creator index, on its own refresh schedule |
| NeuralVerge | One request per account | $5 per 1,000, misses not billed | Public counts only — no watch time or audience retention |
What you get back
Every field in the example response below.
| Field | Type | Description |
|---|---|---|
total_items | number | How many posts came back. |
items[].id | string | Instagram's media ID. |
items[].short_code | string | The code in the post's URL. |
items[].url | string | Direct link to the post. |
items[].type | string | Image, Video or Sidecar (a carousel). |
items[].caption | string | Post caption. |
items[].hashtags | array | Hashtags in the caption. |
items[].mentions | array | Accounts mentioned in the caption. |
items[].timestamp | string | When the post was published (ISO 8601). |
items[].likes_count | number | Likes on the post. |
items[].comments_count | number | Comments on the post. |
items[].video_play_count | number | null | Plays, for videos and reels. |
items[].video_duration | number | null | Video length in seconds. |
items[].display_url | string | The main image or video cover. |
items[].video_url | string | null | The video file, for videos and reels. |
items[].owner_username | string | The account that published the post. |
items[].location_name | string | null | The tagged location, if any. |
items[].tagged_users | array | Accounts tagged in the media. |
items[].is_sponsored | boolean | Whether the post is marked as sponsored. |
items[].music | object | null | Audio used: artist, song and whether it's original audio. |
Example response
A real response, as returned.
{
"session_id": "75bc040c-fdf0-4d51-9169-1e9e7b9cc20d",
"kind": "instagram_reels",
"url": "https://www.instagram.com/natgeo/",
"max_items": 1,
"partial": false,
"machine": {
"total_items": 1,
"items": [
{
"id": "4016464237135297959",
"short_code": "De9WPGLgn2n",
"url": "https://www.instagram.com/p/De9WPGLgn2n/",
"type": "Video",
"product_type": "clips",
"caption": "There's more to Grenada than sun, sea, and sand. The rich volcanic soil makes fertile ground for the island's signature spices—nutmeg, mace, and clove—which are woven into the fabric of life here, especially during Spicemas, the country’s vibrant August carnival. …",
"hashtags": [],
"mentions": ["golsh"],
"timestamp": "2026-10-26T13:05:58.000Z",
"likes_count": 10982,
"comments_count": 44,
"video_play_count": 250148,
"video_duration": 15.893333,
"display_url": "https://instagram.fgdl13-1.fna.fbcdn.net/v/t51.82787-15/…",
"video_url": "https://instagram.fgdl13-1.fna.fbcdn.net/o1/v/t2/f2/m86/….mp4",
"owner_username": "natgeo",
"owner_full_name": "National Geographic",
"is_pinned": false,
"is_sponsored": false,
"music": { "artist": "natgeo", "song": "Original audio", "uses_original_audio": true }
}
],
"errors": []
},
"total_points": 5
}How to run it
The same lookup works from the app, the API, or as a tool an agent can call mid-task.
This endpoint is synchronous: the call blocks until the lookup completes and returns the records directly. If a lookup hits its time budget before finishing, the response comes back with partial: true and whatever it collected so far — re-run with a smaller max_items for a complete result. url is required and accepts a username, profile URL or reel URL. Optional: max_items (1-1,000, default 20), newer_than (a date or a period like 30 days).
curl -X POST https://api.neuralverge.ai/functions/v1/run-instagram-reels \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "url": "natgeo", "max_items": 20 }'What teams use it for
Where this field shows up in an actual workflow.
Compare plays per reel across competitors or creators.
See which lengths and audio choices get watched in your category.
Pick partners by how their reels actually perform, not their follower count.
Follow a campaign's reels and their plays as they accumulate.
Coverage, freshness and limits
What this source covers, how fresh it is, and where it stops.
Reels on public Instagram accounts.
Read at request time — play counts are a snapshot at that moment.
This source returns content an account published publicly, stamped with the URL it was read from and a session id you can trace. Accounts can belong to individuals as well as brands — use it for legitimate business purposes under your own lawful basis and check the acceptable use policy.
- —Private accounts can't be read.
- —Watch time, retention and reach are private to the account owner.
- —Video and image URLs are temporary links; download what you need to keep.
Questions, answered
Yes — every Data Source endpoint, including this one, is synchronous: the lookup runs inside the request and the result comes back in the same response, no polling. If a lookup hits its time budget before finishing, the response comes back with partial: true and whatever records it collected so far — re-run with a smaller max_items to get a complete result instead of a partial one.
Related sources
Try instagram reels on your own data
One request format across every source in the catalog.