Skip to main content
Use POST /web/scrape with formats.parse: true and parseParams: {"type": "prebuilt", "parser": "instagram-feed"}. Read the result in parsed.data, with parsed.type: "instagram-feed". See the Quickstart for authentication and SDK setup. Don’t send custom rules with this parser. For CSS selectors and rules, use the Custom parser.

Request

Use one of these URLs:

Output

When parsed.success is true, the parsed output has this shape:

Post fields

Each post uses the post shape, without duplicates. Without a login, Instagram shows hashtags as its keyword page, so hashtag and keyword URLs return the same ranked posts. Broad keywords return a couple of hundred posts; narrow ones return about 12. Keyword posts carry the shortcode, url, owner, thumbnail_url, and view_count, plus the caption and video_url when Instagram shows them; their other fields are null or []. Location posts carry the full post fields, about 15 to 20 at a time. For a keyword post’s full details, pass its url to Instagram post.

Empty results and errors

A hashtag or keyword Instagram has no public page for produces NOT_FOUND; this includes rare terms and some non-English hashtags. A location with no public posts, or an unknown location ID, produces posts: []. Read parsed.success before using the data. A failed parse has data: null and can coexist with successful outputs. parsed.type remains "instagram-feed" even when parsing fails. See timeouts and errors for handling failures.

Request options

This parser reads public Instagram data separately from the rendered page, without logging in. Content filters and browser actions do not change its results. Browser profiles are unsupported with this parser. Other Scrape controls, including caching, timeouts, and zero data retention, still apply.