INSTAGRAM API

Instagram API for profiles, posts and followers

Look up any public account by username, page through its posts, read the comments, and list followers and following. No Meta app review, no linked business account.

request.ts

import { Bridgly } from "@bridgly/sdk";
const client = new Bridgly({ apiKey: "bgly_YOUR_KEY" });
const res = await client.instagram.getUserPosts({
username: "natgeo",
count: 10
});
if (res.type === "success") {
console.log(res.data);
}

npm install @bridgly/sdk

[ ENDPOINTS ]

All 7 Instagram endpoints

A profile lookup returns the bio, the links in it, follower, following and post counts, whether the account is private, verified, a business or a professional account, and its category when it has one.

Posts come back with the caption, like and comment counts, the timestamp, the media type and its display URL. Video posts also carry the video URL and view count. You can fetch one post by its shortcode or page through everything an account has published.

Comment lists return each comment’s text, author, time and like count. Follower and following lists return username, full name, avatar, and the private and verified flags for each account.

Accounts

Look an account up by username, or find accounts by name.

POST

/instagram/user

Profile: bio, bio links, follower, following and post counts, verified, private and business flags1 credit per requestDocs →
Request body
usernamestringrequired
Instagram username, e.g. instagram
Response

200 OK · application/json

{
"timeMs": 1840,
"creditsCost": 1,
"data": {
"id": "string",
"username": "string",
"full_name": "string",
"biography": "string",
"bio_links": [
{
"title": "string",
"url": "string",
"link_type": "string"
}
],
"profile_pic_url": "string",
"profile_pic_url_hd": "string",
"followers": 0,
"following": 0,
"posts_count": 0,
"is_private": true,
"is_verified": true,
"is_business_account": true,
"is_professional_account": true,
"category_name": "string"
}
}
POST

/instagram/search-users

Accounts matching a name, each with its full profile1 credit per requestDocs →
Request body
querystringrequired
Response

200 OK · application/json

{
"timeMs": 1840,
"creditsCost": 1,
"data": {
"users": [
{
"id": "string",
"username": "string",
"full_name": "string",
"biography": "string",
"bio_links": [
{
"title": "string",
"url": "string",
"link_type": "string"
}
],
"profile_pic_url": "string",
"profile_pic_url_hd": "string",
"followers": 0,
"following": 0,
"posts_count": 0,
"is_private": true,
"is_verified": true,
"is_business_account": true,
"is_professional_account": true,
"category_name": "string"
}
]
}
}

Posts and comments

An account’s posts, a single post, and the comments under it.

POST

/instagram/user-posts

An account’s posts and reels with caption, likes, comments, media URL and views1 credit per resultDocs →
Request body
usernamestringrequired
Instagram username, e.g. instagram
countinteger · 1–10 · default 10
Page size requested from Instagram (1–10). Defaults to 10. Instagram determines the number of results returned.
afterstring
Instagram cursor from the previous response’s end_cursor
Response

200 OK · application/json

{
"timeMs": 1840,
"creditsCost": 1,
"data": {
"has_next_page": true,
"end_cursor": "string",
"posts": [
{
"id": "string",
"shortcode": "string",
"url": "string",
"type": "Image",
"display_url": "string",
"video_url": "string",
"caption": "string",
"likes": 0,
"comments": 0,
"timestamp": 0,
"is_video": true,
"video_view_count": 0
}
]
}
}
POST

/instagram/post

One post by shortcode with caption, counts, media and timestamp1 credit per requestDocs →
Request body
shortcodestringrequired
Response

200 OK · application/json

{
"timeMs": 1840,
"creditsCost": 1,
"data": {
"id": "string",
"shortcode": "string",
"url": "string",
"type": "Image",
"display_url": "string",
"video_url": "string",
"caption": "string",
"likes": 0,
"comments": 0,
"timestamp": 0,
"is_video": true,
"video_view_count": 0
}
}
POST

/instagram/post-comments

Comments on a post with text, author, time and likes1 credit per resultDocs →
Request body
shortcodestringrequired
countinteger · 1–10 · default 10
Page size requested from Instagram (1–10). Defaults to 10. Instagram determines the number of results returned.
afterstring
Instagram cursor from the previous response’s end_cursor
Response

200 OK · application/json

{
"timeMs": 1840,
"creditsCost": 1,
"data": {
"has_next_page": true,
"end_cursor": "string",
"comments": [
{
"id": "string",
"text": "string",
"created_at": 0,
"owner": {
"id": "string",
"username": "string",
"full_name": "string",
"profile_pic_url": "string",
"is_private": true,
"is_verified": true
},
"likes_count": 0
}
]
}
}

Audience

Who follows an account, and who it follows.

POST

/instagram/followers

Followers of an account with username, name, avatar and verified flag1 credit per resultDocs →
Request body
usernamestringrequired
Instagram username, e.g. instagram
countinteger · 1–10 · default 10
Page size requested from Instagram (1–10). Defaults to 10. Instagram determines the number of results returned.
afterstring
Instagram cursor from the previous response’s end_cursor
Response

200 OK · application/json

{
"timeMs": 1840,
"creditsCost": 1,
"data": {
"has_next_page": true,
"end_cursor": "string",
"followers": [
{
"id": "string",
"username": "string",
"full_name": "string",
"profile_pic_url": "string",
"is_private": true,
"is_verified": true
}
]
}
}
POST

/instagram/following

Accounts an account follows, with the same fields1 credit per resultDocs →
Request body
usernamestringrequired
Instagram username, e.g. instagram
countinteger · 1–10 · default 10
Page size requested from Instagram (1–10). Defaults to 10. Instagram determines the number of results returned.
afterstring
Instagram cursor from the previous response’s end_cursor
Response

200 OK · application/json

{
"timeMs": 1840,
"creditsCost": 1,
"data": {
"has_next_page": true,
"end_cursor": "string",
"following": [
{
"id": "string",
"username": "string",
"full_name": "string",
"profile_pic_url": "string",
"is_private": true,
"is_verified": true
}
]
}
}
[ WHY NOT THE OFFICIAL API? ]

Why not the official Instagram API?

Meta retired the Instagram Basic Display API in December 2024. The Instagram API that remains is built for managing business and creator accounts you own, and every app goes through Meta’s app review first.

Any public account

Meta’s API reads your own professional accounts, and only limited fields of other business accounts. Bridgly looks up any public account by username.

No app review

There is no Meta developer app, no Facebook Page to link and no permission review. One API key is enough.

Followers and comments of others

Follower lists, following lists and comments on other accounts’ posts are not available through Meta’s API. Here each is one call.

[ HOW TO USE IT ]

Your first Instagram call

Terminal

curl -X POST "https://api.bridgly.app/instagram/user-posts" \
-H "Authorization: Bearer $BRIDGLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"username": "natgeo",
"count": 10
}'
[ USE CASES ]

What people build with Instagram data

Vet creators before a campaign

Divide the likes and comments on an account’s last few dozen posts by its follower count. An engagement rate you worked out yourself is harder to fake than a media kit.

Track competitors’ content

Pull each new post from the accounts you compete with and record how its numbers move over the following days.

Read what customers say in the comments

Collect the comments on your own or a competitor’s launch posts and run them through sentiment or topic analysis.

Study an audience

List the followers of a niche account and see how many are verified, private or shared with another account you care about.

[ LIMITS ]

What the Instagram API does not do

  • Private accounts: the profile is returned with is_private set, but their posts, followers and following are not.
  • Stories, highlights and DMs are not covered.
  • Read-only. There are no endpoints to post, like, comment or follow.
  • List endpoints ask for up to 10 items per page. Instagram decides how many actually come back.
[ FAQ ]

Instagram API questions

Is this the Instagram Graph API?

No. Bridgly is an independent service and is not affiliated with Meta. The Graph API needs an approved Meta app and mostly covers accounts you manage; Bridgly lets you look up accounts by username with an API key.

Do I need an Instagram account or login?

No. Requests carry a username, a post shortcode or a search query, plus your Bridgly API key. You never send Instagram credentials.

Does it cover reels and video?

Yes. Video posts and reels are returned like any other post, with is_video set, a video_url and a video_view_count.

How do I find a post’s shortcode?

It is the part of the URL after /p/ or /reel/, and it is on every post returned by the user posts endpoint, so you can list first and then fetch comments for the posts you care about.

How do I page through followers or posts?

List responses include has_next_page and end_cursor. Send end_cursor back as after to get the next page.

What does it cost to pull an account’s followers?

One credit per follower returned, so a thousand followers is 1,000 credits. A profile or a single post is 1 credit, and user search is 2 credits per request. What a credit costs in dollars depends on your pricing package, and goes as low as $1 per 1,000 credits at volume.

[ SAME KEY, OTHER PLATFORMS ]

Your API key and credits work on every platform. See all platforms.

[ ALSO SEARCHED ]

Common terms for Instagram API access

  • Instagram API
  • Instagram data API
  • Instagram scraper API
  • Instagram profile API
  • Instagram followers API
  • Instagram posts API
  • Instagram comments API
  • Instagram Graph API alternative
  • Instagram Basic Display API replacement
  • Instagram API without app review

Start pulling Instagram data

100 free credits, no card. Your first call takes a minute.

Start free with 100 credits →