L logiover
social-media · Jun 8, 2026 · 5 min read

Instagram Data Without the API: Posts and Reels in 2026

Get Instagram data without the API in 2026 — pull public posts, reels, and profiles from the web surface when the Graph API needs a business account.

Anyone who has tried to read public Instagram data programmatically hits the same wall: there is no public read API anymore. Meta deprecated the old public endpoints years ago, and what remains — the Instagram Graph API and the Instagram Basic Display sunset — only covers accounts you own or manage. You need a Facebook app, an app review, a connected Instagram Business or Creator account, and a Page. None of that lets you read an arbitrary public profile or pull a competitor’s reels. This guide explains how to get Instagram data without the API in 2026 by reading the same public web surface a logged-out browser sees.

Why the official API does not help here

Meta’s API gap is structural, not accidental. The Graph API is built for businesses to manage their own presence — publish posts, read their own insights, run ads. It is gated behind app review, requires a Business or Creator account linked to a Facebook Page, and grants no access to third-party public profiles or hashtag content (the public hashtag search was removed). The Basic Display API, which once allowed read access to a user’s own media via OAuth, has been wound down. So even after all the OAuth and review overhead, you still cannot read the public account you actually care about.

That leaves the public web surface, which is exactly what every signed-out visitor and every link preview already consumes.

What data is actually available

From the public, unauthenticated surface you can reach:

  • Public profiles — username, full name, bio, external link, follower / following / post counts, verified flag, business category, profile picture URL, and whether the account is private.
  • Posts — caption, post type (image, carousel, video), media URLs for each carousel child, like and comment counts, timestamp, location tag, tagged users, and accessibility alt text.
  • Reels — the video URL, thumbnail, caption, play and like counts, audio/track metadata, and duration.
  • Recent grid — the most recent posts on a public profile, paginated.

Private accounts return only the profile shell (name, counts, “this account is private”), never the media — there is no trick around that, and you should not pretend otherwise.

How the public web surface works

Historically the cleanest path was appending ?__a=1&__d=dis to a profile or post URL to get a JSON payload instead of HTML. Meta has tightened that endpoint over time, so a resilient 2026 approach uses more than one path:

  • Embedded JSON in the HTML — the public page ships a hydration blob (a script payload the client uses to render). Parsing that blob gives you the profile and media objects directly, with no separate API call.
  • The web profile info endpoint — the internal web_profile_info style call that the logged-out web app uses to fetch a profile by username, returning a structured user object plus the first page of media.
  • The post/reel permalink page — for a single shortcode, the permalink page carries the full media object including all carousel children and the video source.

The practical rule: fetch the public page, locate the embedded data blob, and fall back to the internal web endpoint when the blob shape changes. Treating these as interchangeable sources of the same object is what keeps the pipeline alive across Meta’s frequent front-end tweaks.

Media download

Once you have a media object, the URLs point at Meta’s CDN (*.cdninstagram.com / fbcdn.net). A few things to know before you download:

  • CDN URLs are signed and time-boxed. Resolve and download promptly; do not cache the URL and expect it to work hours later.
  • Carousels expose one media URL per child — iterate the children array, do not assume a single asset.
  • Reels and videos give a direct progressive MP4 source plus a poster thumbnail.
  • Always carry a sensible Referer when pulling from the CDN, or some assets 403.

Rate limits and how to live with them

There is no published quota because there is no official API in play — instead you are subject to Meta’s bot defenses on the web surface. In practice:

  • Pace requests gently and add jitter; bursts from one IP get soft-blocked fast.
  • Rotate IPs for any real volume; a single datacenter IP will not survive a large grid pull.
  • Watch for the login wall — too-aggressive access redirects the surface into a “log in to continue” state. Back off and slow down when you see it.
  • Keep sessions short and stateless rather than pounding one connection.

A clean output schema

Normalize posts and reels into one flat shape:

{
  "shortcode": "C9xAbCdEfGh",
  "type": "reel",
  "url": "https://www.instagram.com/reel/C9xAbCdEfGh/",
  "owner_username": "examplebrand",
  "owner_id": "1789012345",
  "caption": "New drop is live.",
  "like_count": 12840,
  "comment_count": 312,
  "video_view_count": 240133,
  "is_video": true,
  "video_url": "https://scontent.cdninstagram.com/v/abc.mp4",
  "thumbnail_url": "https://scontent.cdninstagram.com/v/abc.jpg",
  "carousel_media": [],
  "audio_title": "original audio - examplebrand",
  "location": null,
  "tagged_users": ["partneraccount"],
  "taken_at": "2026-06-06T18:30:00Z",
  "scraped_at": "2026-06-08T09:20:00Z"
}

Keep shortcode and owner_id as stable join keys — usernames change, IDs do not.

Try the Instagram Media Downloader on Apify — pulls public posts, reels, and profiles and downloads the underlying media. No Graph API, no app review.

Use cases

  • Competitor and creator tracking — monitor a set of public profiles’ posting cadence and engagement over time.
  • Influencer vetting — pull a creator’s recent grid and reels to sanity-check engagement before a deal.
  • Content archiving — back up an owned brand account’s media in bulk.
  • Trend and asset research — collect reels and their audio metadata across a watchlist of accounts.

Every solid use case starts from a known username or shortcode. There is no public discovery/search surface anymore, so build around accounts you already track.

Build it yourself vs. a managed actor

A one-off script that parses the embedded JSON works — until Meta renames a field in the hydration blob, swaps which internal endpoint the web app calls, or tightens the bot wall and your IP starts seeing login redirects. Carousel handling, signed-CDN expiry, private-account detection, and the blob-versus-endpoint fallback are all small details that each break independently. A managed actor keeps those fallbacks current and rotates infrastructure, so you collect Instagram data without the API instead of maintaining a scraper.

Common pitfalls

  • Assuming ?__a=1 still works everywhere — treat it as one path among several, not the path.
  • Caching CDN URLs — they expire; download on resolve.
  • Single-asset assumption — carousels have many children.
  • Hitting private accounts and expecting media — you only get the shell.
  • No IP rotation — the fastest way to trigger the login wall.

Wrapping up

Meta closed the public read door at the API layer, but the public web surface still serves the same posts, reels, and profiles to every logged-out visitor. Reading Instagram data without the API in 2026 means parsing that surface carefully — embedded JSON first, internal web endpoint as fallback — respecting signed CDN expiry and pacing your IPs. Build around known usernames and shortcodes, and let a managed layer absorb Meta’s front-end churn.

Open the Instagram Media Downloader on Apify — public profiles, posts, and reels with media download, paid per result. No business account required.

Related guides