All scrapers

Social & video

Instagram Scraper

instagram.com

100% Success rate
3s Avg response
In-house anti-bot Protection
130 calls Measured over

Instagram decides what to serve based on the exit it sees, not on how convincing your browser is: from a datacenter address it answers a profile URL with its login wall, and it does so with a normal-looking 200. We detect that wall and draw a fresh exit rather than returning it, which is why this reads 100% where it used to sit in the eighties - the old figure was counting login walls as successes. Profile and post pages are both server-rendered, so no browser is involved and a call lands in about two seconds. Add `parsed_data=true` and you get the numbers as exact integers rather than the rounded prose the page paints - Instagram renders "287K likes" where the payload says 287,279. Per-post counts come from the post URL: Instagram leaves them out of what it serves on a profile page, so the profile returns the grid with a permalink for each post and no invented numbers.

What you can extract

  • Public profile: username, full name, bio, follower and following counts
  • Post and reel: caption, exact like and comment counts, publish date
  • Profile grid: the 12 most recent posts, each with its permalink
  • Post media URLs and thumbnails
  • Verified badge, profile picture and the external links in the bio

How to scrape it

curl -X POST \
  -H "X-ScrapeUnblocker-Key: $SU_API_KEY" \
  "https://api.scrapeunblocker.com/getPageSource?url=https%3A%2F%2Fwww.instagram.com%2Fnasa&parsed_data=true"
import requests

resp = requests.post(
    "https://api.scrapeunblocker.com/getPageSource",
    headers={"X-ScrapeUnblocker-Key": SU_API_KEY},
    params={"url": "https://www.instagram.com/nasa", "parsed_data": True},
)
print(resp.text)
import { ScrapeUnblockerClient } from 'scrapeunblocker';

const su = new ScrapeUnblockerClient({ apiKey: process.env.SU_API_KEY });

const results = await su.getPageSource({
  url: 'https://www.instagram.com/nasa',
  parsedData: true,
});
console.log(results);

Requests are POST and take their parameters in the query string. Browser rendering always happens - there is no flag to enable.

Read the API docs

Related scrapers

Start scraping this site today

Free tier included. No credit card required to test it.