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
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
shortcodestringrequiredcountinteger · 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 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.
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}'With Bridgly connected to your AI agent, ask:
Get the last 10 Instagram posts from @natgeo and tell me which one got the most likes per comment.
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.
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.
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.
Your API key and credits work on every platform. See all platforms.
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.