Instagram Scraper API
Stop maintaining your own Instagram scraper. Get profiles, posts, and reels through a hosted REST API — we run the proxies, rate-limit handling, and anti-bot measures on our side, you get clean, typed JSON on yours.
50 free credits on signup · no card required
curl "https://api.instagramapi.dev/v1/profile?handle=nike" \
-H "Authorization: Bearer $INSTAGRAMAPI_KEY"What you get
Structured JSON, not raw HTML
- ▹No proxies, headless browsers, or CAPTCHA-solving to run yourself
- ▹Full profile data: bio, followers, following, posts, verification
- ▹Paginated recent posts — photos, videos, carousels — via cursor
- ▹Reels with view counts, video URLs, and duration
- ▹One consistent JSON response envelope across every endpoint
- ▹You're only billed for requests that actually reach Instagram — bad input costs nothing
Example response
What comes back
{
"data": {
"id": "13460080",
"username": "nike",
"full_name": "Nike",
"biography": "Just Do It.",
"is_verified": true,
"is_private": false,
"is_business": true,
"category": null,
"followers": 291952375,
"following": 264,
"posts": 1657,
"external_url": "http://empli.fi/nike",
"profile_pic_url": "https://instagram.com/.../nike.jpg",
"public_email": null,
"public_phone_number": null
}
}Response fields
Fields returned by GET /v1/profile
| Field | Description |
|---|---|
| id | Numeric account id (stable even if the username changes). |
| username | The account's @handle. |
| full_name | Display name shown on the profile. |
| biography | The profile's bio text. |
| is_verified | Whether the account has a verified badge. |
| is_private | Whether the account is private. |
| is_business | Whether this is a business/professional account. |
| category | Business category label when set (e.g. "Sportswear"); null otherwise. |
| followers | Number of accounts following this account. |
| following | Number of accounts this account follows. |
| posts | Total number of posts on the profile. |
| external_url | The clickable link in the bio, if any. |
| profile_pic_url | URL of the account's profile picture. |
| public_email | Public contact email, if the account exposes one; null otherwise. |
| public_phone_number | Public contact phone number, if exposed; null otherwise. |
No login required
Nothing to authenticate but your API key
No OAuth flow
One static API key in an Authorization: Bearer header. No redirect, no refresh tokens, no expiring session.
No Meta app review
Never touch Meta's developer platform, Business Verification, or a connected Facebook Page. Sign up directly with Instagram API.
Public data only
Every endpoint returns only what's already visible on Instagram without logging in. Private accounts are never accessible.
Pricing
1 credit per request. Credits start at $8.00 per 1,000 and drop to $6.00 per 1,000 at volume — no subscription, no minimums. New accounts get 50 free credits.
See full pricingFAQ
Instagram Scraper API, explained
Is this legal? Does it violate Instagram's terms?
The API only returns data that's already public on Instagram — nothing behind a login. You're responsible for how you use the data for your own use case and jurisdiction, but the API itself never accesses private content or bypasses account-level restrictions.
Do I need to manage proxies or rotate IPs myself?
No. That infrastructure runs entirely on our side. You send one authenticated GET request and get JSON back.
What can I scrape?
Profiles, posts, reels, stories, highlights, followers/following lists, comments, likers, hashtags, and locations. See the full endpoint list in the docs.
Does it break when Instagram changes their site?
We maintain the scraping layer ourselves and ship fixes as Instagram's internals change, so your integration against our stable REST surface doesn't need to change.
How is pricing structured?
Pay-as-you-go credits, no subscription. Most endpoints cost 1–2 credits per request, starting at $8.00 per 1,000 credits. 50 free credits on signup.
Related
More ways to pull Instagram data
Start pulling scraper api data
Create a free key and make your first request in under a minute — 50 credits on us.