Instagram data, ready when you are.

Profiles, posts, comments, followers, hashtags and similar accounts from Instagram.

Try in playground From $0.00045 a record · $0.10 free

What you can get.

  • $0.0018per record

    Profiles

    Name, headline, company, skills and work history.

    Try it →
  • $0.0018per record

    Posts by a person

    A person's latest posts, with likes and comments.

    Try it →
  • $0.00045per record

    Similar

    Accounts related to one account, for finding more like it.

    Try it →
  • $0.00045per record

    Hashtag

    Posts TAGGED with a hashtag. Instagram's public listening surface. 'top' is the ranked timeline; 'newest' is chronological.

    Try it →
  • $0.00045per record

    Search

    Instagram's own account search. Find handles by name or keyword.

    Try it →
  • $0.00045per record

    Comments

    Top comments on up to ten Instagram POSTS, by /p/ or /reel/ URL (or a bare shortcode). Author is free text. Commenters are not corpus members.

    Try it →
  • $0.000675per record

    Followers

    The followers OR the following list of up to ten public accounts. The discovered accounts become thin corpus rows and a directed follow edge.

    Try it →

What the data looks like.

usernamefullNamebiographycategoryisVerifiedisBusinessfollowersfollowingmediaCountengagementRatelocationigUserIdavatarUrlexternalUrlisPrivatelastPostedAtdetails
brewlab.coffeeBrewlab CoffeeSmall-batch roasters · Austin, TXCoffee shopfalsetrue48,2103128640.031Austin, Texas456125832https://img.instagram.com/brewlab-coffee.jpghttps://www.instagram.com/brewlab-coffee-1000false2026-10-05
  • {}
mira.movesMira | PilatesPilates for busy people · new class every MondayFitness trainertruetrue182,4005401,2100.046Mumbai, India908365941https://img.instagram.com/mira-pilates.jpghttps://www.instagram.com/mira-pilates-1001false2026-10-11
  • {}
northfold.studioNorthfold StudioBrand and product designDesign studiofalsetrue9,1202013020.022London2725119329https://img.instagram.com/northfold-studio.jpghttps://www.instagram.com/northfold-studio-1002false2026-10-03
  • {}
17 fields, scroll sideways for all. Example rows: made-up names, real field names. Live calls return real data.

For developers

API reference.

One endpoint, POST /v1/instagram. Open an operation to see its fields.

Read the docs
Profilesprofiles

Profile cards for up to ten accounts. Profile-only by default. A call that also wants each account's recent posts says `include.posts` and gets profiles AND posts in one call, one answer.

FieldTypeMeaning
subjects *list of string · 1-10 itemsUsernames or profile URLs.
fieldslist of enum'contact' adds the business email/phone fields to the answer; the fetch is the same either way, so this shapes the RESPONSE, not the bill.profile · contact
includeobject
include.postsobject
include.posts.limitinteger · 1-48Recent posts to fetch per account, newest first; 1-48.
include.posts.tabenumWhich tab to read: the grid ("posts") or Reels ("reels").posts · reels
include.posts.sincestring · YYYY-MM-DDOnly posts on or after this day (YYYY-MM-DD). Omit for the newest.

Response fields, each row of data

FieldType
usernamestring
igUserIdstring
fullNamestring
biographystring
avatarUrlstring
profileUrlstring
externalUrlstring
bioLinkslist of object
categorystring
isVerifiedboolean
isPrivateboolean
isBusinessboolean
followersinteger
followinginteger
mediaCountinteger
highlightReelCountinteger
engagementRatenumber
contactEmailstring
contactPhonestring
locationstring
businessStreetstring
businessZipstring
businessCityIdstring
businessLatitudenumber
businessLongitudenumber
facebookPageobject
lastPostedAtstring
recentPostslist of object
relatedAccountslist of object
detailsobject

Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.

example request · profiles
curl -X POST https://apiforagents.dev/v1/instagram \
  -H "Authorization: Bearer $AFA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"op":"profiles","subjects":["natgeo","nike"]}'

Example response rows

data · made-up names, real field names
[
  {
    "username": "brewlab.coffee",
    "fullName": "Brewlab Coffee",
    "biography": "Small-batch roasters · Austin, TX",
    "category": "Coffee shop",
    "isVerified": false,
    "isBusiness": true,
    "followers": 48210,
    "following": 312,
    "mediaCount": 864,
    "engagementRate": 0.031,
    "location": "Austin, Texas",
    "igUserId": "456125832",
    "avatarUrl": "https://img.instagram.com/brewlab-coffee.jpg",
    "externalUrl": "https://www.instagram.com/brewlab-coffee-1000",
    "isPrivate": false,
    "lastPostedAt": "2026-10-05",
    "details": {}
  },
  {
    "username": "mira.moves",
    "fullName": "Mira | Pilates",
    "biography": "Pilates for busy people · new class every Monday",
    "category": "Fitness trainer",
    "isVerified": true,
    "isBusiness": true,
    "followers": 182400,
    "following": 540,
    "mediaCount": 1210,
    "engagementRate": 0.046,
    "location": "Mumbai, India",
    "igUserId": "908365941",
    "avatarUrl": "https://img.instagram.com/mira-pilates.jpg",
    "externalUrl": "https://www.instagram.com/mira-pilates-1001",
    "isPrivate": false,
    "lastPostedAt": "2026-10-11",
    "details": {}
  }
]

An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.

Try profiles in the playground Examples and pricing for profiles
Posts by a personposts

One account's recent posts, newest first. The grid or the Reels tab. With the author's profile card in the same answer.

FieldTypeMeaning
subject *string · ≤400 charsOne username or profile URL.
limitinteger · 1-48
tabenum'reels' pulls the Reels tab instead of the grid. Non-default tabs and date floors always fetch fresh (they never touch the grid's cache markers) and are served fresh from a source that has them.posts · reels
sincestring · YYYY-MM-DD

Response fields, each row of data

FieldType
shortCodestring
igMediaIdstring
captionstring
kindstring
productTypestring
postedAtstring
permalinkstring
mediaUrlstring
videoUrlstring
imageslist of string
medialist of object
widthinteger
heightinteger
likesinteger
commentsinteger
viewsinteger
playsinteger
savesinteger
sharesinteger
videoDurationnumber
languagestring
likesHiddenboolean
isPinnedboolean
isPaidPartnershipboolean
hashtagslist of string
mentionslist of string
ownerobject
taggedUserslist of object
coauthorslist of object
sponsorslist of object
locationNamestring
locationIdstring
musicobject
firstCommentstring
recentCommentslist of object
detailsobject

Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.

example request · posts
curl -X POST https://apiforagents.dev/v1/instagram \
  -H "Authorization: Bearer $AFA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"op":"posts","subject":"natgeo","limit":12}'

Example response rows

data · made-up names, real field names
[
  {
    "owner": {
      "username": "brewlab.coffee"
    },
    "caption": "New single origin from Chikmagalur ☕ #specialtycoffee",
    "kind": "image",
    "postedAt": "2026-10-15T08:00:00Z",
    "likes": 2140,
    "comments": 88,
    "hashtags": [
      "specialtycoffee"
    ],
    "views": null,
    "videoDuration": null,
    "igMediaId": "1315471224",
    "permalink": "https://www.instagram.com/new-single-origin-from-chikmagalur-speci-1000",
    "mediaUrl": "https://www.instagram.com/new-single-origin-from-chikmagalur-speci-1000",
    "isPinned": false,
    "isPaidPartnership": false,
    "details": {}
  },
  {
    "owner": {
      "username": "brewlab.coffee"
    },
    "caption": "How we dial in espresso every morning",
    "kind": "reel",
    "postedAt": "2026-10-12T07:30:00Z",
    "likes": 5310,
    "comments": 142,
    "hashtags": [
      "espresso",
      "baristalife"
    ],
    "views": 88400,
    "videoDuration": 41,
    "igMediaId": "1973392646",
    "permalink": "https://www.instagram.com/how-we-dial-in-espresso-every-morning-1001",
    "mediaUrl": "https://www.instagram.com/how-we-dial-in-espresso-every-morning-1001",
    "isPinned": false,
    "isPaidPartnership": false,
    "details": {}
  }
]

An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.

Try posts by a person in the playground Examples and pricing for posts by a person
Similarsimilar

Accounts related to one account, for finding more like it.

FieldTypeMeaning
subject *string · ≤400 charsOne username or profile URL.
limitinteger · 1-50

Response fields, each row of data

FieldType
usernamestring
fullNamestring
igUserIdstring
isVerifiedboolean
isPrivateboolean
avatarUrlstring
profileUrlstring
followersinteger
profileobject
detailsobject

Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.

example request · similar
curl -X POST https://apiforagents.dev/v1/instagram \
  -H "Authorization: Bearer $AFA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"op":"similar","subject":"natgeo","limit":20}'

Example response rows

data · made-up names, real field names
[
  {
    "username": "roastery.co",
    "fullName": "Roastery Co.",
    "followers": 61200,
    "details": {}
  },
  {
    "username": "dailygrind.cafe",
    "fullName": "Daily Grind",
    "followers": 23400,
    "details": {}
  }
]

An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.

Try similar in the playground Examples and pricing for similar
Hashtaghashtag

Posts TAGGED with a hashtag. Instagram's public listening surface. 'top' is the ranked timeline; 'newest' is chronological.

FieldTypeMeaning
hashtag *string · ≤150 chars
sortenumtop · newest
limitinteger · 1-50

Response fields, each row of data

FieldType
shortCodestring
igMediaIdstring
captionstring
kindstring
productTypestring
postedAtstring
permalinkstring
mediaUrlstring
videoUrlstring
imageslist of string
medialist of object
widthinteger
heightinteger
likesinteger
commentsinteger
viewsinteger
playsinteger
savesinteger
sharesinteger
videoDurationnumber
languagestring
likesHiddenboolean
isPinnedboolean
isPaidPartnershipboolean
hashtagslist of string
mentionslist of string
ownerobject
taggedUserslist of object
coauthorslist of object
sponsorslist of object
locationNamestring
locationIdstring
musicobject
firstCommentstring
recentCommentslist of object
detailsobject

Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.

example request · hashtag
curl -X POST https://apiforagents.dev/v1/instagram \
  -H "Authorization: Bearer $AFA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"op":"hashtag","hashtag":"streetphotography","sort":"top","limit":20}'

Example response rows

data · made-up names, real field names
[
  {
    "owner": {
      "username": "mira.moves"
    },
    "caption": "10-minute core flow, save it for later #pilates",
    "kind": "reel",
    "postedAt": "2026-10-13T06:00:00Z",
    "likes": 18250,
    "comments": 412,
    "views": 241000,
    "videoDuration": 58,
    "hashtags": [
      "pilates",
      "corestrength"
    ],
    "igMediaId": "2465709650",
    "permalink": "https://www.instagram.com/10-minute-core-flow-save-it-for-later-pi-1000",
    "mediaUrl": "https://www.instagram.com/10-minute-core-flow-save-it-for-later-pi-1000",
    "isPinned": false,
    "isPaidPartnership": false,
    "details": {}
  },
  {
    "owner": {
      "username": "studio.flow"
    },
    "caption": "Reformer basics for week one #pilates",
    "kind": "reel",
    "postedAt": "2026-10-12T17:20:00Z",
    "likes": 6400,
    "comments": 120,
    "views": 91200,
    "videoDuration": 33,
    "hashtags": [
      "pilates",
      "reformer"
    ],
    "igMediaId": "1592716932",
    "permalink": "https://www.instagram.com/reformer-basics-for-week-one-pilates-1001",
    "mediaUrl": "https://www.instagram.com/reformer-basics-for-week-one-pilates-1001",
    "isPinned": false,
    "isPaidPartnership": false,
    "details": {}
  }
]

An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.

Try hashtag in the playground Examples and pricing for hashtag
Commentscomments

Top comments on up to ten Instagram POSTS, by /p/ or /reel/ URL (or a bare shortcode). Author is free text. Commenters are not corpus members.

FieldTypeMeaning
subjects *list of string · 1-10 itemsPost URLs (/p/ or /reel/) or bare shortcodes.
limitinteger · 1-100

Response fields, each row of data

FieldType
igCommentIdstring
authorstring
bodystring
scoreinteger
commentedAtstring
commenterobject
replyCountinteger
commentUrlstring
postUrlstring
detailsobject

Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.

example request · comments
curl -X POST https://apiforagents.dev/v1/instagram \
  -H "Authorization: Bearer $AFA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"op":"comments","subjects":["https://www.instagram.com/p/<shortcode>/"],"limit":50}'

Example response rows

data · made-up names, real field names
[
  {
    "author": "ravi.k",
    "body": "Tried this today, so good!",
    "score": 42,
    "commentedAt": "2026-10-15T09:10:00Z",
    "igCommentId": "1406279790",
    "details": {}
  },
  {
    "author": "lena_m",
    "body": "Which beans do you use?",
    "score": 18,
    "commentedAt": "2026-10-15T09:44:00Z",
    "igCommentId": "3977780793",
    "details": {}
  }
]

An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.

Try comments in the playground Examples and pricing for comments
Followersfollowers

The followers OR the following list of up to ten public accounts. The discovered accounts become thin corpus rows and a directed follow edge.

FieldTypeMeaning
subjects *list of string · 1-10 itemsUsernames or profile URLs.
directionenumfollowers · following
limitinteger · 1-100

Response fields, each row of data

FieldType
usernamestring
fullNamestring
igUserIdstring
isVerifiedboolean
isPrivateboolean
avatarUrlstring
profileUrlstring
followersinteger
profileobject
detailsobject

Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.

example request · followers
curl -X POST https://apiforagents.dev/v1/instagram \
  -H "Authorization: Bearer $AFA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"op":"followers","subjects":["natgeo"],"direction":"following","limit":50}'

Example response rows

data · made-up names, real field names
[
  {
    "username": "ravi.k",
    "fullName": "Ravi Kumar",
    "followers": 412,
    "details": {}
  },
  {
    "username": "lena_m",
    "fullName": "Lena M.",
    "followers": 2100,
    "details": {}
  }
]

An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.

Try followers in the playground Examples and pricing for followers
Historyhistoryfree

The stored time series. Free, reads only what captures already wrote.

FieldTypeMeaning
subjects *list of string · 1-10 itemsUsernames or profile URLs.
metricenumfollowers · following · media_count · engagement_rate
daysinteger · 1-730
Try history in the playground

Guides and ideas.

Use it from your tools.

More in social.

All platforms