Instagram Public Posts Scraper avatar

Instagram Public Posts Scraper

Pricing

from $2.10 / 1,000 public instagram post delivereds

Go to Apify Store
Instagram Public Posts Scraper

Instagram Public Posts Scraper

Scrape current public Instagram posts and reels, captions, media links, and source URLs from logged-out profile pages without login.

Pricing

from $2.10 / 1,000 public instagram post delivereds

Rating

0.0

(0)

Developer

Tim Zinin

Tim Zinin

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Instagram Public Posts & Reels Scraper

Instagram public posts and reels

Turn a public Instagram profile into structured post and reel rows for monitoring, research, or an internal content dashboard. Submit an exact profile root such as https://www.instagram.com/instagram/; the Actor returns source-visible post IDs, post or reel URLs when exposed, captions, display-media URLs, media types, product types, and observation timestamps. It reads logged-out public profile HTML through Apify Residential Proxy. No Instagram login, cookies, browser session, or customer credential is required.

Each run observes one currently returned HTML document per requested profile and delivers at most 12 rows in total. This is a bounded current-feed observation, not a full profile archive. If the first profile fills the shared cap, later profiles are not requested. The retained real source fixture produced 12 rows from instagram, with validated post or reel URLs. likeCount and publishedAt remain null because that source did not expose verified values. A URL remains null when the source node provides neither a valid canonical URL nor a shortcode.

{"profileUrls":["https://www.instagram.com/instagram/"],"maxItems":12}

The price is $0.003 per delivered post or reel through result-found. There is no start fee or default Dataset-item fee, and source failures or diagnostics are free. Bronze pays $0.0027, Silver $0.0024, and Gold, Platinum, and Diamond $0.0021 per delivered row. Repeating a successful observation is billable again because it delivers a fresh timestamped Dataset row.

Selected fields from the retained public fixture:

{"postId":"3983211470613048091","postURL":"https://www.instagram.com/reel/DdHNbqDJusb/","username":"instagram","caption":"Every room is its own world 🖊️⁣\n⁣\n@draw_vengers drew this building cutaway with fineliner pens. Inside each space? Imaginary elements like a nuclear-powered rocket, an indoor shipwreck and more.⁣\n⁣\n“I really made the drawing up as I went along! The fun was in thinking up all sorts of ideas for what rooms I could draw in.”⁣\n⁣\nVideo by @draw_vengers⁣\n⁣\nMusic by @harrystyles","mediaType":2,"productType":"clips","likeCount":null,"publishedAt":null,"sourceURL":"https://www.instagram.com/instagram/","observedAt":"2026-09-12T11:49:47+00:00"}

What you receive

The default Dataset contains one row per delivered source node. Every row includes schemaVersion, recordType, postId, postURL, username, caption, displayUrl, mediaType, productType, likeCount, publishedAt, sourceURL, observedAt, a SHA-256 source reference, and billing metadata. Nullable fields remain null; the Actor does not manufacture missing engagement or dates.

OUTPUT records the outcome, delivery status, per-profile evidence, errors, and a compact snapshot of delivered rows. outcome: "completed" means the available rows were delivered without a source error. deliveryComplete and coverage.complete remain false at the one-page boundary because the result is not a full archive. source_failed, partial, empty, and budget_stopped stay distinct.

How the source is handled

Observed public-profile workflow

The parser reads only application/json data-sjs Relay data found in the received logged-out page. It accepts nodes whose embedded username matches the requested profile, or whose timeline profile ID joins to that verified username. Public URLs come only from a validated Instagram canonical URL or shortcode. It leaves publishedAt null unless the received source contains a verified timestamp; it does not infer a publication date from a media ID. It does not create private GraphQL calls or follow pagination.

Requests use HTTPS with certificate validation, reject redirects, allow one attempt per profile, cap both compressed and decoded content at 5 MiB, and share a bounded run deadline. A login redirect, HTTP error, unexpected content type, malformed Relay data, oversized response, or timeout produces no paid row.

Ready-to-use Task recipes

Current profile snapshot — up to 12 source-visible nodes

{"profileUrls":["https://www.instagram.com/instagram/"],"maxItems":12}

Three-row sample from the same verified source

{"profileUrls":["https://www.instagram.com/instagram/"],"maxItems":3}

Repeat snapshot — schedule the same bounded input

{"profileUrls":["https://www.instagram.com/instagram/"],"maxItems":12}

Replace instagram with the exact root of the public profile you are authorized to observe. Inputs can contain up to 10 unique profiles, but the 12-row cap is shared and input order matters.

Costs and run budgets

TierPrice per delivered row12 delivered rows
Base$0.0030$0.0360
Bronze$0.0027$0.0324
Silver$0.0024$0.0288
Gold / Platinum / Diamond$0.0021$0.0252

The runtime checks the run's effective charge limit before requesting the source and again before each paid write. When starting runs through the Apify API, use a positive maxTotalChargeUsd. A value of 0 can be treated by the platform as unset and replaced by its default. To verify the no-affordable-row path, use a small positive value below one result price, such as 0.0001.

Repeat observations safely

Keep the exact input, run ID, Dataset, and OUTPUT together. Compare postId values only across the same ordered profile list and maxItems. A missing ID means only that the item was not observed within that run's one-page, 12-row boundary; it does not prove deletion. Media CDN URLs can expire, so retain the post URL and source evidence rather than treating a display URL as permanent storage.

Use the data only for lawful purposes and according to Instagram's terms and applicable rights. The Actor reads public pages and does not access private profiles, messages, or account data.