Blog

How to Access Instagram Data Without Scraping

Instagram's Graph API requires Facebook business verification and approved use cases. Shadow APIs offer direct access to public profiles, posts, reels, and hashtag data through the same internal endpoints Instagram's web app uses.

Lewis Tham
April 3, 2026

How to Access Instagram Data Without Scraping

Instagram's API story is one of progressive lockdown. In 2018, they deprecated the original Platform API. In 2020, they tightened the Graph API to require Facebook Business verification. Today, getting programmatic access to Instagram data requires a registered Facebook app, business verification (which takes 2-4 weeks), and approval for specific data permissions that Meta increasingly denies.

For developers building social analytics tools, influencer marketing platforms, or content research applications, the official path is a bureaucratic obstacle course that many never complete.

But Instagram's website still works. Every profile page, hashtag feed, and Reels tab loads data from internal API endpoints that return structured JSON. These shadow APIs provide the data you need without the months-long approval process.

The Problem with Current Approaches

The Graph API Is Heavily Restricted

Meta's Instagram Graph API has progressively narrowed what developers can access:

  • Business verification required: Your Facebook app must go through a manual business review. Rejection rates are high for analytics and research use cases.
  • Limited to business/creator accounts: You cannot query regular user profiles through the API.
  • Scope restrictions: Most useful permissions (public content search, hashtag discovery) require additional review beyond basic access.
  • Rate limits: 200 calls per user per hour, with lower limits on search endpoints.
  • No Reels API: Despite Reels being Instagram's dominant content format, API access to Reels data remains extremely limited.

Scraping Triggers Account Actions

Instagram's anti-scraping measures are aggressive and punitive:

  • Action blocks that disable your account's ability to like, follow, or comment for 24-72 hours
  • Temporary bans that lock your account for repeated automated access
  • Permanent bans for accounts identified as scraping infrastructure
  • Challenge required responses that demand phone verification
  • Rate limiting that returns empty responses after 100-200 requests

Unlike most sites where scraping just gets you blocked, Instagram scraping can result in losing your actual account.

Third-Party Data Services Are Expensive

Phantombuster, Apify actors, and RapidAPI wrappers charge $50-300/month for Instagram data access. They experience the same breakages and detection issues as DIY scrapers, but abstract the pain behind a monthly bill. When Instagram changes their anti-bot measures, these services go down for hours or days.

Shadow APIs: The Alternative

Instagram's web application is a React-based SPA that fetches all data from internal GraphQL and REST endpoints. When you visit a profile, your browser calls these endpoints to load the profile info, post grid, stories status, and suggested follows. The responses are structured JSON containing everything visible on the page and more.

Shadow APIs are these internal endpoints. They exist because Instagram's frontend needs structured data to render the UI. Calling them directly gives you the same data without rendering a single pixel of the interface.

What Unbrowse Discovers on Instagram

When Unbrowse indexes Instagram through normal browsing, it captures endpoints like:

Endpoint Pattern Data Returned Format
/api/v1/users/web_profile_info/ Full profile with bio, stats, links JSON
/graphql/query (user_media) Post feed with captions and engagement JSON
/api/v1/tags/web_info/ Hashtag data with top posts JSON
/api/v1/discover/web/explore_grid/ Explore page content JSON
/api/v1/clips/user/ User's Reels with view counts JSON
/api/v1/friendships/show/ Follow relationship status JSON

Notably, the internal endpoints return Reels engagement data, story highlight info, and tagged post counts that the official Graph API does not expose at all.

How It Works

# Install Unbrowse
npx unbrowse setup

# Browse Instagram to discover endpoints
npx unbrowse go "https://www.instagram.com/explore/"

# Resolve profile data via shadow API
npx unbrowse resolve "instagram profile data for @natgeo"

After indexing, requests resolve without a browser:

import Unbrowse from 'unbrowse';

const ub = new Unbrowse();

const result = await ub.resolve(
  'instagram profile and recent posts for @openai'
);

console.log(result.data);
// {
//   profile: {
//     username: "openai",
//     full_name: "OpenAI",
//     followers: 4200000,
//     following: 12,
//     posts_count: 385,
//     bio: "...",
//     is_verified: true,
//     external_url: "https://openai.com"
//   },
//   recent_posts: [
//     {
//       shortcode: "C5x...",
//       caption: "...",
//       likes: 85000,
//       comments: 2400,
//       timestamp: "2026-03-28T18:30:00Z",
//       type: "reel",
//       views: 2100000
//     }
//   ]
// }

Performance: Browser vs Shadow API

Metric Browser Automation Shadow API (Unbrowse)
Latency per request 4-10 seconds 200-500ms
Memory usage 500MB+ (headless Chrome) ~5MB
Cost per 1,000 requests $5.30 (compute + proxy) $0.05
Account ban risk High None (no account used)
Data format HTML + JSON-in-script Structured JSON
Reels data available Limited Full engagement data

For an influencer analytics dashboard monitoring 500 profiles, shadow APIs complete a full data refresh in under 5 minutes with zero account risk. Browser automation would take over an hour and risk triggering action blocks.

When to Use This Approach

Shadow APIs via Unbrowse are the right choice when:

  • You cannot get Graph API approval. If your use case does not fit Meta's approved categories, shadow APIs provide a legitimate access path.
  • You need Reels data. Instagram's internal APIs expose Reels view counts, engagement metrics, and audio data that the official API lacks.
  • You are building influencer analytics. Profile stats, engagement rates, and posting frequency across public profiles are all accessible.
  • You want zero account risk. Shadow APIs do not use your Instagram credentials, so there is no risk of account actions.

This approach does not provide access to private profiles, direct messages, Stories (which expire), or Instagram Shopping inventory data behind merchant authentication.

Getting Started

# 1. Install
npm install -g unbrowse

# 2. Set up
unbrowse setup

# 3. Browse Instagram to index APIs
unbrowse go "https://www.instagram.com/instagram/"

# 4. Query profiles and posts
unbrowse resolve "instagram recent posts from @tesla"

One browse session captures Instagram's internal API patterns. After that, every profile and hashtag query resolves through direct API calls.

FAQ

Is this legal?

You are accessing publicly visible data through the same endpoints that serve Instagram's website to every visitor. There is no login bypass, no credential use, and no access to private content. The legal landscape around public data access has been shaped by cases like HiQ v. LinkedIn, which affirmed that accessing public data does not violate the CFAA.

How is this different from scraping?

Scrapers render Instagram pages in a headless browser and parse the DOM or extract JSON from embedded script tags. This is what Instagram's detection systems look for. Shadow APIs make direct HTTP requests to Instagram's internal endpoints, receiving structured JSON without rendering any HTML.

Will Instagram block my IP?

Shadow API requests look like normal frontend traffic because they are structurally identical to the requests a real browser makes. There is no headless browser signature, no automated navigation pattern, and no unusual request volume when used within normal browsing parameters.

Can I get Stories data?

Instagram Stories are ephemeral and require authentication to view. Shadow APIs can access story highlight data (which is persistent and public) but not active Stories from accounts you do not follow.