# Instagram Post Scraper API

> Read a user’s recent posts, one post’s metadata, its commenters, or a location’s post feed on Instagram — public-read operations, no login required.

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.

## Operations

- [Instagram Get User Posts](https://upapi.io/apis/social-media/instagram-get-user-posts) (15 units): Get a user's recent posts with engagement metrics. Rate-limited — use proxy rotation for bulk. No auth needed.
- [Instagram Get Post Info](https://upapi.io/apis/social-media/instagram-get-post-info) (15 units): Get post metadata (caption, owner, media, comment count) via embed page. No auth needed, not rate-limited.
- [Instagram Get Post Commenters](https://upapi.io/apis/social-media/instagram-get-post-commenters) (15 units): Extract commenters, comment text, and sibling posts from a post page. One call = ~24 lead-gen entities. No auth needed.
- [Instagram Discover Location Posts](https://upapi.io/apis/social-media/instagram-discover-location) (15 units): Get 50-95 post shortcodes from a location page. No auth needed. Use with get-post-commenters for massive lead discovery.

## Instagram API: get posts by user

To get posts by user with the Instagram API, start from the account’s numeric id: Instagram Get User Profile returns it as instagramId. Pass it as userId to Instagram Get User Posts, with count for the page size (it defaults to 12 and accepts up to 33) and, for the next page, maxId set to the nextMaxId of the previous response. Nothing on this path needs an Instagram login.

Each post in posts carries its pk, shortcode, a postUrl, the caption cut to its first 1000 characters, likeCount, commentCount, mediaType and takenAt. moreAvailable says whether Instagram has more to give and nextMaxId is the cursor to ask for it. If Instagram keeps answering 401, the operation makes up to three attempts and then raises RATE_LIMITED, any other error status raises UPSTREAM_ERROR, and a response that is not a real feed raises an error instead of returning an empty list. The values in the sample below are placeholders; the field names and types are the operation’s own.

json — request body

```
{
  "userId": "1234567890",
  "count": 12
}
```

json — response shape, placeholder values

```
{
  "success": true,
  "userId": "1234567890",
  "posts": [
    {
      "pk": "3000000000000000001",
      "shortcode": "Cexample001",
      "postUrl": "https://www.instagram.com/p/Cexample001/",
      "caption": "Launch day.",
      "likeCount": 120,
      "commentCount": 8,
      "mediaType": 1,
      "takenAt": 1790000000
    }
  ],
  "moreAvailable": true,
  "nextMaxId": "3000000000000000001_1234567890",
  "fetchedAt": "2026-10-07T12:00:00Z",
  "elapsedMs": 900
}
```

## Frequently asked questions

### 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 do I get all of an Instagram account’s posts with the API?

Call Instagram Get User Posts with the account’s numeric userId and read posts. While moreAvailable is true, call again with maxId set to the nextMaxId of the previous response. count sets the page size, up to 33. Instagram rate-limits this feed, so for a long history pass a proxyUrl, and expect a RATE_LIMITED error rather than an empty page when Instagram pushes back.

### 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.

Last updated 2026-10-20.
