Instagram data via Wire — profiles, posts, post detail, comments, hashtag search and followers as structured JSON
https://api.anakin.io/v1/wire/taskProfiles, posts, post detail, comments, hashtag search and followers. Every Instagram action is a Wire action: call POST /v1/wire/task with the action_id and params below, then poll GET /v1/wire/jobs/{id} (or pass a webhook_url). All actions read public data — no login, no cookies, auth_mode: none.
Catalog: instagram · Actions: 6 · Auth: none · Billing: only successful calls are charged
| Action | action_id | Credits | Returns |
|---|---|---|---|
| Profile | instagram_profile | 4 | 1 item |
| User Posts | instagram_user_posts | 2 | 12 posts per page |
| Post Details | instagram_post_detail | 2 | 1 item |
| Post Comments | instagram_post_comments | 2 | 13 comments per page |
| Hashtag Search | instagram_hashtag_search | 46+ | up to limit posts (default 12) |
| Followers | instagram_followers | 30 | 25 followers |
Credits marked + grow with limit — the exact formula is on each action. See Pricing for what a credit costs on your plan.
Call a Instagram action
The same call works for every action on this page — swap action_id and params.
curl -X POST https://api.anakin.io/v1/wire/task \
-H "X-API-Key: your_api_key" \
-H "Content-Type: application/json" \
-d '{"action_id": "instagram_profile", "params": {"username": "natgeo"}}'import requests, time
res = requests.post('https://api.anakin.io/v1/wire/task', headers={'X-API-Key': 'your_api_key'},
json={"action_id": "instagram_profile", "params": {"username": "natgeo"}})
job_id = res.json()['job_id']
while True: # poll until the job settles (or pass webhook_url and skip this)
job = requests.get(f'https://api.anakin.io/v1/wire/jobs/{job_id}', headers={'X-API-Key': 'your_api_key'}).json()
if job['status'] in ('completed', 'failed'):
break
time.sleep(2)
print(job['data']['data'])const headers = { 'X-API-Key': 'your_api_key', 'Content-Type': 'application/json' };
const res = await fetch('https://api.anakin.io/v1/wire/task', { method: 'POST', headers, body: JSON.stringify({"action_id": "instagram_profile", "params": {"username": "natgeo"}}) });
const { job_id } = await res.json();
let job;
do { // poll until the job settles (or pass webhook_url and skip this)
await new Promise((r) => setTimeout(r, 2000));
job = await (await fetch(`https://api.anakin.io/v1/wire/jobs/${job_id}`, { headers })).json();
} while (!['completed', 'failed'].includes(job.status));
console.log(job.data.data);The job result wraps the action's output: data.status is "ok" or "error", and data.data holds the fields shown under each action below. See the overview for the full envelope.
Profile
Get a public Instagram profile: username, full name, bio, follower, following and post counts, verified, private and business flags, category, website and avatar.
action_id: instagram_profile · Credits: 4 / call · Returns: 1 item
| Parameter | Type | Description |
|---|---|---|
action_id required | string | Set to instagram_profile |
params.username required | string | Instagram username (with or without @) or profile URL. |
Request
{
"action_id": "instagram_profile",
"params": {
"username": "natgeo"
}
}Response — data.data of the completed job (trimmed):
{
"username": "natgeo",
"full_name": "National Geographic",
"bio": "Step into wonder and find your inner explorer with National Geographic 🌎",
"followers": 268360671,
"following": 194,
"posts": 32075,
"verified": true,
"private": false,
"business": true,
"category": "None",
"website": "http://visitstore.bio/natgeo",
"profile_image_url": "https://scontent.cdninstagram.com/v/t51.82787-19/683576066_18653628823019133_9051036240972105113_n.jpg?…",
"profile_url": "https://www.instagram.com/natgeo/"
}User Posts
Get an Instagram user's latest posts, one full page (about 12) per call: link, type, caption, date, likes, comments, views, image and video links. Use cursor for older posts.
action_id: instagram_user_posts · Credits: 2 / call · Returns: 12 posts per page
| Parameter | Type | Description |
|---|---|---|
action_id required | string | Set to instagram_user_posts |
params.username required | string | Instagram username or profile URL. |
params.cursor | string | Leave empty for the first page. For the next page, pass the next_cursor value from the previous response (next_cursor is null when there are no more). |
Request
{
"action_id": "instagram_user_posts",
"params": {
"username": "natgeo"
}
}Response — data.data of the completed job (trimmed):
{
"username": "natgeo",
"posts": [
{
"shortcode": "DecPSQfoaRe",
"url": "https://www.instagram.com/p/DecPSQfoaRe/",
"type": "video",
"caption": "Presented by National Geographic Society in partnership with @Rolex. In the face of a changing world, these explorers are not giving up hope for our seas. Na…",
"posted_at": "2026-10-13T16:30:08Z",
"likes": 19383,
"comments": 105,
"views": null,
"image_url": "https://scontent-lax3-2.cdninstagram.com/v/t51.82787-15/847181832_18707500537019133_1918713844998405984_n.jpg?…",
"video_url": "https://scontent-lax3-1.cdninstagram.com/o1/v/t2/f2/m86/AQM6iQ1ip15lFl6fgHwC7-oXcT6r1oH_duCkuEwF1T6kLi_3ucfYJpWwheceItNNsdppXf6kzzCTMP5-RcgVQ86lnSLle4cYTKKi-…",
"duration_s": null,
"owner_username": "natgeo"
},
{
"shortcode": "DdG4RIxIPyf",
"url": "https://www.instagram.com/p/DdG4RIxIPyf/",
"type": "video",
"caption": "Presented by @Rolex. Welcome to Africa 🌍 Africa Earth’s Wild Home takes you deep into the heart of our wildest continent, bringing you closer to its animals,…",
"posted_at": "2026-09-10T13:00:14Z",
"likes": 79831,
"comments": 582,
"views": null,
"image_url": "https://scontent-lga3-2.cdninstagram.com/v/t51.82787-15/802503979_18695767555019133_6909214034622416488_n.jpg?…",
"video_url": "https://scontent-lga3-3.cdninstagram.com/o1/v/t2/f2/m86/AQPDJtVww4K_686Ed9TbciE3dp0nrA4iUd5M8OJJIZKcU-RmkzTGwtpi3CsZY9Pgqj7h7kSpk9qe7k5S4JdWZ-Z2s7pzWC2DxuqU8…",
"duration_s": null,
"owner_username": "natgeo"
},
"… 10 more"
],
"count": 12,
"next_cursor": "timeline:AQHTke4_VAX7zqe06GA_C3lrTXOacauXtIYGX2T1Q4U5cX57WOKaGaKm3s367fc71vn1ZkWtAr9bAvsq-yZh3geORg",
"message": null
}Paging: the first call returns
next_cursor; pass it back ascursorfor the next page (nullwhen there are no more). Each page is a new call.
Post Details
Get one Instagram post or reel: type, caption, date, likes, comments, views, length, image and video links, and owner.
action_id: instagram_post_detail · Credits: 2 / call · Returns: 1 item
| Parameter | Type | Description |
|---|---|---|
action_id required | string | Set to instagram_post_detail |
params.post_url required | string | Link to the post or reel (https://www.instagram.com/p/... or /reel/...). |
Request
{
"action_id": "instagram_post_detail",
"params": {
"post_url": "https://www.instagram.com/p/DdG4RIxIPyf/"
}
}Response — data.data of the completed job (trimmed):
{
"shortcode": "DdG4RIxIPyf",
"url": "https://www.instagram.com/p/DdG4RIxIPyf/",
"type": "video",
"caption": "Presented by @Rolex. Welcome to Africa 🌍 Africa Earth’s Wild Home takes you deep into the heart of our wildest continent, bringing you closer to its animals,…",
"posted_at": "2026-09-10T13:00:14Z",
"likes": 79831,
"comments": 582,
"views": 3345170,
"image_url": "https://scontent-mia5-1.cdninstagram.com/v/t51.82787-15/802503979_18695767555019133_6909214034622416488_n.jpg?…",
"video_url": "https://scontent-mia3-3.cdninstagram.com/o1/v/t2/f2/m86/AQPDJtVww4K_686Ed9TbciE3dp0nrA4iUd5M8OJJIZKcU-RmkzTGwtpi3CsZY9Pgqj7h7kSpk9qe7k5S4JdWZ-Z2s7pzWC2DxuqU8…",
"duration_s": 73,
"owner_username": "natgeo"
}Post Comments
Get the comments on an Instagram post or reel, one full page (about 12-15) per call: text, likes, reply count, date and commenter username. Use cursor for more.
action_id: instagram_post_comments · Credits: 2 / call · Returns: 13 comments per page
| Parameter | Type | Description |
|---|---|---|
action_id required | string | Set to instagram_post_comments |
params.post_url required | string | Link to the post or reel. |
params.cursor | string | Leave empty for the first page. For the next page, pass the next_cursor value from the previous response (next_cursor is null when there are no more). |
Request
{
"action_id": "instagram_post_comments",
"params": {
"post_url": "https://www.instagram.com/p/DdG4RIxIPyf/"
}
}Response — data.data of the completed job (trimmed):
{
"post_url": "https://www.instagram.com/p/DdG4RIxIPyf/",
"comments": [
{
"comment_id": "18467497492190219",
"text": "Great capture! 📷",
"likes": 0,
"replies": null,
"created_at": "2026-10-15T09:51:58.000Z",
"username": "daniella_salomon64"
},
{
"comment_id": "18039948563645123",
"text": "Amazing shot! 🌍",
"likes": 0,
"replies": null,
"created_at": "2026-10-14T21:23:25.000Z",
"username": "daniella_salomon64"
},
"… 11 more"
],
"count": 13,
"next_cursor": "AQHTSMm6sqIcC6zKYWORonnn77pO9ID_eNRzJfHsRdRecVh8QbjvLPp0Lk45s-BwQczuQAx6pkHA02skC0p2p4I3Ow",
"message": null
}Paging: the first call returns
next_cursor; pass it back ascursorfor the next page (nullwhen there are no more). Each page is a new call.
Hashtag Search
Get recent Instagram posts for a hashtag (12 by default, up to 300) with caption, date, likes, comments, image and owner.
action_id: instagram_hashtag_search · Credits: 46 for up to 12 results, +5 per extra result (max 300) · Returns: up to limit posts (default 12)
| Parameter | Type | Description |
|---|---|---|
action_id required | string | Set to instagram_hashtag_search |
params.hashtag required | string | Hashtag, with or without #. |
params.limit | integer | How many posts to return, 1 to 300. Up to 12 costs 46 credits; each post beyond 12 adds 5 credits. Default 12 |
Request
{
"action_id": "instagram_hashtag_search",
"params": {
"hashtag": "travel",
"limit": 12
}
}Response — data.data of the completed job (trimmed):
{
"hashtag": "travel",
"posts": [
{
"shortcode": "DegwKIazdOS",
"url": "https://www.instagram.com/p/DegwKIazdOS/",
"type": "image",
"caption": "Thread work\n#travel #instagram #instadaily #instamood #dogsofinstagram",
"posted_at": "2026-10-15T10:34:56.000Z",
"likes": 0,
"comments": 0,
"views": null,
"image_url": "https://scontent-cph2-1.cdninstagram.com/v/t51.82787-15/851078821_18125865706756224_3414491670408867479_n.jpg?…",
"video_url": null,
"duration_s": null,
"owner_username": "nirbanclothhouse"
},
{
"shortcode": "DegwO8xBdIl",
"url": "https://www.instagram.com/p/DegwO8xBdIl/",
"type": "image",
"caption": "Ahh, home sweet home… Little Man had such an amazing trip!!! #cominghome #travel",
"posted_at": "2026-10-15T10:34:55.000Z",
"likes": 0,
"comments": 0,
"views": null,
"image_url": "https://scontent-cph2-1.cdninstagram.com/v/t51.82787-15/848881530_17905170954657890_5196149645347592570_n.jpg?…",
"video_url": null,
"duration_s": null,
"owner_username": "littlemaneveryday"
},
"… 10 more"
],
"count": 12,
"message": null
}Cost: 46 credits for up to 12 results; each result beyond 12 adds 5 credits, up to
limit: 300.
Followers
Get a sample of about 25 followers of a public Instagram account (the most available without a login): username, full name, verified and private flags, and avatar.
action_id: instagram_followers · Credits: 30 / call · Returns: 25 followers
| Parameter | Type | Description |
|---|---|---|
action_id required | string | Set to instagram_followers |
params.username required | string | Instagram username or profile URL. |
Request
{
"action_id": "instagram_followers",
"params": {
"username": "natgeo"
}
}Response — data.data of the completed job (trimmed):
{
"username": "natgeo",
"followers": [
{
"username": "cmlevesque53",
"full_name": "Claudia Levesque",
"verified": false,
"private": false,
"profile_image_url": "https://scontent-man2-1.cdninstagram.com/v/t51.82787-19/790023971_18439985773133349_7258796779929124677_n.jpg?…"
},
{
"username": "jff.blondaaa",
"full_name": "Nico fr💋",
"verified": false,
"private": false,
"profile_image_url": "https://scontent-man2-1.cdninstagram.com/v/t51.82787-19/850007926_17889753912477926_2189010726289576198_n.jpg?…"
},
"… 23 more"
],
"count": 25,
"message": null
}