Two endpoints for public Instagram data. Profile gives you an account's size and recent performance; hashtag gives you what is being posted in a niche and who is posting it. Both are read only and only see what a logged out visitor could see.
Profile
Profile stats plus the most recent posts, with engagement rate computed over the posts analysed.
Costs 0.5 credits plus 0.4 per post, rounded to the nearest half credit. 12 posts is 5 credits.
Required attributes
- Name
handle- Type
- string
- Description
The Instagram username, with or without
@.
Optional attributes
- Name
posts- Type
- integer
- Description
Recent posts to analyse, 5 to 50. Default 12. Capped by your plan.
Response fields
- Name
engagement.engagement_rate_pct- Type
- number
- Description
Average likes plus comments per post, divided by followers, as a percentage.
- Name
posts[].type- Type
- string
- Description
image,videoorcarousel.
- Name
posts[].likes_hidden- Type
- boolean
- Description
truewhen the account hides like counts.likesis 0 in that case, which is not the same as unpopular.
- Name
posts[].views- Type
- integer
- Description
Plays for videos.
nullfor images and carousels.
Returns 404 not_found for private accounts and accounts that do not exist.
Request
curl -X POST https://suvjexogmfpvxjcktvuk.supabase.co/functions/v1/api/v1/social/instagram/profile \
-H "Authorization: Bearer $PENGU_API_KEY" \
-H "Content-Type: application/json" \
-d '{"handle": "nike", "posts": 12}'
Response
{
"data": {
"handle": "nike",
"checked_at": "2026-09-09T11:43:31.911Z",
"profile": {
"full_name": "Nike",
"biography": "Just Do It.",
"followers": 291273140,
"following": 265,
"posts_total": 1664,
"verified": true,
"is_business": true,
"external_url": "http://empli.fi/nike"
},
"engagement": {
"posts_analyzed": 12,
"avg_likes": 106756,
"avg_comments": 1494,
"engagement_rate_pct": 0.04
},
"posts": [
{
"url": "https://www.instagram.com/p/DcyZo6EDijg/",
"type": "carousel",
"caption": "No moment is too small to win. Grab the Sabrina 4 “The Switch” launching 9.5",
"hashtags": [],
"likes": 42913,
"likes_hidden": false,
"comments": 415,
"views": null,
"posted_at": "2026-09-02T13:59:48.000Z",
"owner": "nikebasketball"
},
// ...
]
},
"meta": {
"credits_charged": 5,
"credits_remaining": 478.5,
"request_id": "2a1d0b4e-6b7c-4d2f-9f1e-0c3b5a7d9e11"
}
}
Hashtag
Recent public posts under a hashtag, plus the creators posting under it ranked by engagement. Useful for niche research and a first pass at influencer discovery.
Costs 0.4 credits per post, rounded to the nearest half credit. 20 posts is 7.5 credits.
Required attributes
- Name
hashtag- Type
- string
- Description
The hashtag, with or without
#.
Optional attributes
- Name
posts- Type
- integer
- Description
Posts to fetch, 10 to 50. Default 20. Capped by your plan.
Response fields
- Name
creators- Type
- array
- Description
Accounts seen in the fetched posts, ranked by average likes and comments. Follower counts need a separate profile call per creator.
Request
curl -X POST https://suvjexogmfpvxjcktvuk.supabase.co/functions/v1/api/v1/social/instagram/hashtag \
-H "Authorization: Bearer $PENGU_API_KEY" \
-H "Content-Type: application/json" \
-d '{"hashtag": "skincare", "posts": 20}'
Response
{
"data": {
"hashtag": "skincare",
"checked_at": "2026-09-09T11:44:10.204Z",
"count": 20,
"posts": [
{
"url": "https://www.instagram.com/p/DdEItjitXO8/",
"type": "image",
"caption": "Q+A Vitamin C Brightening Serum ...",
"hashtags": [
"skincare",
"vitaminc",
"serum"
],
"likes": 312,
"likes_hidden": false,
"comments": 14,
"views": null,
"posted_at": "2026-09-09T09:12:41.000Z",
"owner": "european.beautyo"
},
// ...
],
"creators": [
{
"handle": "european.beautyo",
"url": "https://www.instagram.com/european.beautyo/",
"posts": 2,
"avg_likes": 312,
"avg_comments": 14
},
// ...
]
},
"meta": {
"credits_charged": 7.5,
"credits_remaining": 471,
"request_id": "7c9e2f10-3b44-4a8d-b1e2-5d6f7a8b9c0d"
}
}
