Instagram Profile Scraper API
Our Instagram profile scraper turns any public username or profile URL into structured JSON: the exact follower count, following and posts totals, full bio, verified and private flags, category, and the avatar URL, all from a single request with no login.
Why Instagram Profile data hides behind a login
A logged-out Instagram profile is a React shell that hydrates its numbers over later requests, so the raw HTML holds placeholders and hand-written selectors break within weeks. The official Graph API only reads accounts you own or manage and needs a Facebook app, a linked Business or Creator account, and app review before it returns a single public profile.
Your first Instagram Profile Scraper API call
curl "https://api.instagramscraperapi.com/api/v1/instagram/profile?username=nasa&api_key=$API_KEY" import requests, os
BASE = "https://api.instagramscraperapi.com"
API_KEY = os.environ["API_KEY"]
# Pass a username (no leading @) or a full profile URL.
data = requests.get(
f"{BASE}/api/v1/instagram/profile",
params={"username": "nasa", "api_key": API_KEY},
timeout=30,
).json()
print(data["full_name"], "-", data["follower_count"], "followers")
print(data["posts_count"], "posts | verified:", data["is_verified"])
print(data["biography"]) Parameters
| Parameter | Required | Default | Notes |
|---|---|---|---|
username | required | - | The Instagram username without the leading @, e.g. nasa. A leading @ or a trailing slash is stripped for you. |
url | optional | - | A full profile URL such as https://www.instagram.com/nasa/. The handle is parsed out of the path, so you can pass a link instead of a username. |
country | optional | US | Two-letter country code for the egress region. Instagram serves the embedded profile data to logged-out clients from residential US IPs, so US is the default. |
api_key | required | - | Your API key, passed as a query parameter. Get one free at signup. |
What the Instagram Profile Scraper API hands back
{
"id": "528817151",
"username": "nasa",
"full_name": "NASA",
"url": "https://www.instagram.com/nasa/",
"biography": "Making the seemingly impossible, possible.",
"profile_pic_url": "https://scontent-lax7-1.cdninstagram.com/v/t51.2885-19/29090066_159271188110124_1152068159029641216_n.jpg",
"external_url": null,
"category": null,
"is_verified": true,
"is_private": false,
"is_business": null,
"follower_count": 104390464,
"following_count": 91,
"posts_count": 4833,
"posts": null,
"og_description": "104M Followers, 95 Following, 4,833 Posts - See Instagram photos and videos from NASA (@nasa)",
"source": "instagram",
"data_source": "embedded"
} | Field | Type | Description |
|---|---|---|
id | string | The account's numeric Instagram user id (pk), the stable identifier that never changes. |
username | string | The profile handle, e.g. nasa. |
full_name | string | The display name shown on the profile. |
url | string | The canonical profile URL. |
biography | string | The full bio text from the profile. |
profile_pic_url | string | URL of the profile picture (the HD version when Instagram ships it). |
external_url | string | The link in the bio when present, otherwise null. Gated for many profiles logged-out. |
category | string | The business or creator category label when present, otherwise null. |
is_verified | boolean | True when the account carries the blue verified badge. |
is_private | boolean | True when the account is private. |
is_business | boolean | True for a business account, false otherwise, or null when Instagram does not ship the flag logged-out. |
follower_count | integer | Exact follower count from the embedded profile object when present, falling back to the abbreviated og count. |
following_count | integer | Number of accounts this profile follows. |
posts_count | integer | Total number of public posts on the account. |
posts | null | Always null. Instagram loads the post grid over a separate authenticated request, so the timeline media is not served on the logged-out profile page. Use the hashtag or post endpoint for media. |
og_description | string | The raw Open Graph description sentence, kept verbatim for transparency (abbreviated counts and handle). |
data_source | string | embedded when the exact integer counts came from the embedded profile object, opengraph when only the abbreviated og counts were available. |
Where teams point Instagram data
Influencer vetting
Audience tracking
Creator databases
Competitor monitoring
Account verification checks
CRM enrichment
How our Instagram Profile Scraper API stays reliable
Pass a username or a full profile URL and we resolve it for you, with no Facebook app, no Business account link, and no app review. Every request runs through residential proxies, anti-bot handling, and retries, returning validated JSON with a stable schema in about 2.6 seconds.
Username or URL input
Exact follower counts
Residential proxies and anti-bot
Auto-retry across pools
Validated JSON schema
Transparent gating
Instagram Profile Scraper API weighed against the Instagram API and DIY
| Our API | DIY (requests / headless) | Instagram Graph API | |
|---|---|---|---|
| Input by username or URL | Yes, handle or profile URL | Manual page fetch and parse | By owned account id only |
| Public profiles | Any public account | Possible but parser breaks often | Only accounts you own or manage |
| Setup | API key only | Residential proxies, headless browser, parsers | Facebook app, linked Business account, app review |
| Exact follower count | From the embedded profile object | Buried in a hydrated blob you must locate | Available for your own account |
| Anti-bot and proxies | Built in, residential US | You build and maintain it | Not applicable |
| Output | Validated JSON, stable schema | Raw HTML you parse yourself | JSON, scoped to your assets |
Pay only for what you pull
| Plan | Price | Best for |
|---|---|---|
| Free | 1,000 requests | Testing and small jobs |
| Pro | $0.60 / 1k | Production workloads |
| Pay-as-you-go | $0.90 / 1k | Spiky or one-off volume |
Median response 2.6s. You only pay for successful requests.
FAQ
An Instagram profile scraper is a tool that reads a public account's data and returns it in a structured format. Our Instagram profile scraper API takes a username or profile URL and returns the numeric id, full name, bio, exact follower_count, following_count, posts_count, verified and private flags, category, and avatar URL as JSON from a single request, with no login or Facebook app.
Send one GET request to our instagram/profile endpoint with the username (or a profile URL) and your API key. We route through residential IPs, handle anti-bot checks, retry on failure, and parse the embedded profile object, so you get clean JSON back without maintaining selectors against Instagram's changing markup.
Yes, when Instagram ships it. We read the embedded profile object that carries the precise integer follower, following, and post counts, which is why the sample shows 104390464 rather than a rounded 104M. When that object is withheld for a given capture, we fall back to the abbreviated Open Graph counts and set data_source to opengraph so you can tell the two apart.
Instagram does not serve the post grid on the logged-out profile page. The timeline media loads over a separate authenticated GraphQL request, so the profile response returns posts_count (the total) but posts is always null. To pull actual media, use a hashtag or post endpoint rather than the profile endpoint. We keep the field null rather than inventing entries.
No. You only need an instagramscraperapi key passed as the api_key query parameter. There is no Facebook app to register, no Business or Creator account to link, and no app review. The official Instagram Graph API requires all three and still only returns data for accounts you own or manage, not arbitrary public profiles.
No. We only return data that a logged-out visitor can see on a public profile. For a private account the response reports is_private as true and does not expose posts or a follower list. Reading private content would require an authenticated session, which this endpoint does not use.
Median end-to-end response is about 2.6 seconds, including proxy routing, anti-bot handling, retries, and parsing. On legality: scraping public data is broadly permitted in many jurisdictions, and US courts have declined to treat scraping public profiles as unauthorized access, but Instagram's terms restrict automated collection and you are responsible for lawful, privacy-compliant use of the data. Scrape only public fields, respect personal data laws such as GDPR and CCPA, and take your own legal advice for your use case.