Instagram Post Scraper API
These operations cover Instagram content rather than profile identity. Get User Posts returns a user’s recent posts with their engagement metrics, paginated with a nextMaxId cursor for bulk reads. Get Post Info reads one post’s metadata — caption, owner, media URLs, whether it is a video, and comment count — from the post’s public embed page, which is unauthenticated and not rate-limited the way the main feed endpoints are. Get Post Commenters goes further: it extracts the commenters on a post, their comment text, and the shortcodes of sibling posts on the same account, in one call — roughly two dozen distinct entities per request, which is the shape a lead-discovery workflow actually wants. Discover Location Posts starts from an Instagram location page instead of a user and returns 50-95 post shortcodes from it, meant to be chained into Get Post Commenters for discovery at the scale of a place rather than one account. All of them read Instagram’s public surface with no login and authenticate only with your upAPI key; the exact price is on this page’s FAQ, generated from the catalog. Get User Posts is explicitly documented as rate-limited on Instagram’s side for bulk use — upAPI’s residential proxy pool is what a caller doing volume through this operation should lean on, via proxyUrl or upAPI’s own rotation.
What data you get
Instagram Get User Posts
- posts
- arrayrequired
- posts[].pk
- stringrequired
- posts[].caption
- string
- posts[].postUrl
- stringrequired
- posts[].takenAt
- integer
- posts[].likeCount
- integer
- posts[].mediaType
- integer
- posts[].shortcode
- stringrequired
- posts[].commentCount
- integer
- userId
- stringrequired
- success
- booleanrequired
- elapsedMs
- integerrequired
- fetchedAt
- stringrequired
- nextMaxId
- string
- moreAvailable
- booleanrequired
Instagram Get Post Info
- caption
- stringrequired
- isVideo
- boolean
- postUrl
- stringrequired
- success
- booleanrequired
- videoUrl
- string
- elapsedMs
- integerrequired
- fetchedAt
- stringrequired
- mediaUrls
- arrayrequired
- shortcode
- stringrequired
- commentCount
- integer
- ownerUsername
- stringrequired
Instagram Get Post Commenters
- caption
- stringrequired
- success
- booleanrequired
- comments
- arrayrequired
- comments[].text
- stringrequired
- comments[].username
- stringrequired
- comments[].commentId
- stringrequired
- comments[].createdAt
- integer
- elapsedMs
- integerrequired
- fetchedAt
- stringrequired
- shortcode
- stringrequired
- commenters
- arrayrequired
- commenters[].userId
- stringrequired
- commenters[].username
- stringrequired
- commenters[].isVerified
- boolean
- commenters[].profilePicUrl
- string
- ownerUsername
- stringrequired
- siblingShortcodes
- arrayrequired
Instagram Discover Location Posts
- posts
- arrayrequired
- posts[].pk
- stringrequired
- posts[].postUrl
- stringrequired
- posts[].shortcode
- stringrequired
- success
- booleanrequired
- latitude
- number
- elapsedMs
- integerrequired
- fetchedAt
- stringrequired
- longitude
- number
- locationId
- stringrequired
- locationName
- stringrequired
Calling Instagram Get User Posts
A schema-derived request and response shape — not a captured production call, since upAPI has none to publish. Every field is real, from the operation’s own published schema.
curl -X POST https://api.upapi.io/instagram-get-user-posts.post \
-H "X-Api-Key: $UPAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"count": 12,
"userId": "example"
}'{
"posts": [
{
"pk": "example",
"caption": "",
"postUrl": "example",
"takenAt": 0,
"likeCount": 0,
"mediaType": 1,
"shortcode": "example",
"commentCount": 0
}
],
"userId": "example",
"success": false,
"elapsedMs": 1,
"fetchedAt": "example",
"nextMaxId": "example",
"moreAvailable": false
}Pricing
Instagram Get User Posts
15 units per call
Instagram Get Post Info
15 units per call
Instagram Get Post Commenters
15 units per call
Instagram Discover Location Posts
15 units per call
Every unit draws from one pooled monthly quota shared across the whole catalog. See upapi.io/pricing for what a unit costs on each plan.
Questions people actually ask
Do these need an Instagram login?
No — every one reads Instagram’s public post and embed surfaces and authenticates only with your upAPI key. Get Post Info specifically reads the post’s public embed page, which Instagram does not gate behind a session at all.
How do I go from a location to a list of commenters?
Discover Location Posts returns 50-95 post shortcodes for a location; feed each shortcode into Get Post Commenters to pull the commenters and comment text off every post at that place — the two are designed to chain.
Is bulk reading of a user’s posts rate-limited?
Instagram rate-limits repeated reads of one account’s post feed, which is why Get User Posts accepts an optional proxyUrl to route through your own exit rather than upAPI’s shared pool when you need sustained volume against one account.
What does one Get Post Commenters call actually return?
The caption, the post owner, every commenter with their comment text, and the shortcodes of sibling posts on the same account — around two dozen distinct entities from a single call.
How much does this cost?
Every operation in this cluster costs 15 weighted units per call, drawn from your plan’s pooled monthly quota — see upapi.io/pricing for what a unit costs on each tier.
How fresh is the data — is it cached?
Instagram Get User Posts is cached for 10 minutes; Instagram Get Post Info is cached for 5 minutes; Instagram Get Post Commenters is cached for 5 minutes; Instagram Discover Location Posts is cached for 10 minutes. A repeat call inside a cached window returns the cached response and is billed nothing.