Pricing
from $0.99 / 1,000 results
Instagram Account Scraper
Get Instagram profile data β followers, following, posts count, bio, avatar, verified status β without login. HTTP-only.
Pricing
from $0.99 / 1,000 results
Rating
0.0
(0)
Developer
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
19 hours ago
Last modified
Categories
Share
Extract public profile data from any Instagram account in bulk β username, full name, bio, follower / following / posts count, profile picture, verified status, business category, and link in bio β in a clean structured JSON output.
Why use this actor
- No account / no login required β just give it an Instagram username or profile URL.
- No API key needed β Instagram's Graph API is gated behind app review; this actor returns the same data the public web profile shows.
- Rich detail β full name, bio, followers, following, posts count, profile picture (HD), verified badge, professional/business flags, business category, and the external link in bio.
- Bulk input β pass a list of usernames or URLs in one run; one clean dataset row per profile.
- Automatic retries β transient failures retry with exponential backoff; private, deactivated, or non-existent accounts surface as
_error: "not_found"/_error: "login_required"so you can triage failures. - Stable JSON output suitable for pipelines, spreadsheets, and databases β every row carries
_input,_source,_scrapedAtenvelope fields so you can join results back to your input list.
How it works
- You provide a list of Instagram usernames (e.g.
instagram) or full profile URLs (e.g.https://www.instagram.com/instagram/). - The actor fetches each profile the same way Instagram's web app does and assembles a flat JSON record with bio, counts, and verification flags.
- Results stream into your dataset, ready to download as JSON, CSV, or Excel.
You do not need to manage scrapers, browsers, or rotating IPs β all handled internally.
Input
{"usernames":["instagram","cristiano"],"proxyConfiguration":{"useApifyProxy":true,"apifyProxyGroups":["DATACENTER"]}}
| Field | Type | Description |
|---|---|---|
usernames | array | List of Instagram usernames or full profile URLs to scrape. Both instagram and https://www.instagram.com/instagram/ are accepted. @handle form is also supported. |
proxyConfiguration | object | Apify Proxy settings. Datacenter works for most account lookups; switch to RESIDENTIAL only if you see persistent rate-limit errors on very large runs. |
Output
Input: instagram
{"_input":"instagram","_source":"S1-primary","_scrapedAt":"2026-05-18T10:53:24.880672+00:00","id":"25025320","fbid":"17841400039600391","eimu_id":"117943452927407","username":"instagram","full_name":"Instagram","biography":"Discover what's new on Instagram πβ¨","external_url":"http://help.instagram.com/","bio_links":[{"title":"","url":"http://help.instagram.com","link_type":"external"},{"title":"Close Friends Only Podcast with KATSEYE","url":"https://youtu.be/dkXpIRUBfyg","link_type":"external"}],"edge_followed_by":{"count":685807483},"edge_follow":{"count":196},"edge_owner_to_timeline_media":{"count":8439},"highlight_reel_count":15,"is_verified":true,"is_private":false,"is_business_account":false,"is_professional_account":true,"is_joined_recently":false,"business_category_name":null,"category_name":null,"category_enum":null,"business_email":null,"business_phone_number":null,"business_address_json":null,"has_clips":true,"has_channel":false,"has_guides":false,"pronouns":[],"profile_pic_url":"https://instagram.fcgk52-1.fna.fbcdn.net/v/t51.82787-19/550891366_18667771684001321_...jpg","profile_pic_url_hd":"https://instagram.fcgk52-1.fna.fbcdn.net/v/t51.82787-19/550891366_18667771684001321_...jpg"}
The raw payload also includes recent timeline media edges (
edge_owner_to_timeline_media.edges,edge_felix_video_timeline.edges, etc.). They are preserved for advanced users but truncated above for readability β for a full post-by-post feed use the Instagram Account Posts or Instagram Account Reels actor instead.
| Field | Type | Description |
|---|---|---|
_input | string | The username or URL exactly as you supplied it. Use this to join results back to your input list. |
_source | string | Internal tag for the path used to fetch the record. S1-primary means the fastest, richest path; values starting with S2- indicate a fallback was used. |
_scrapedAt | string | ISO-8601 UTC timestamp when the record was scraped. |
id | string | Instagram's stable numeric user ID. Survives username changes β use it as your join key. |
fbid | string | Instagram's IGID (often referred to as the "FBID"). Stable across name changes. |
eimu_id | string | Instagram's encrypted media-unit ID for the account. |
username | string | URL slug for the profile (e.g. instagram). |
full_name | string | Display name as shown on the profile header. |
biography | string | Free-text bio (can contain emoji and line breaks). Empty string if not set. |
external_url | string | The single link displayed in the profile header. null if not set. |
bio_links | array | List of link-in-bio entries (creators can configure multiple). Each item has title, url, and link_type. |
edge_followed_by.count | integer | Follower count. |
edge_follow.count | integer | Following count (how many accounts this profile follows). |
edge_owner_to_timeline_media.count | integer | Total number of public posts on the grid. |
highlight_reel_count | integer | Number of story highlights pinned to the profile. |
is_verified | boolean | true if the profile carries Instagram's verified badge. |
is_private | boolean | true if the account is set to private. Private accounts return public-only fields (counts, bio, avatar) and no timeline media. |
is_business_account | boolean | true if the profile is a legacy business account. |
is_professional_account | boolean | true if the profile is a Creator or Business account. |
is_joined_recently | boolean | true if Instagram considers the account newly created. |
business_category_name | string | Free-text category set by business accounts (e.g. "Personal Goods & General Merchandise Stores"). null for personal accounts. |
category_name | string | Sub-category label (creator-set). |
category_enum | string | Internal category enum string (null for personal). |
business_email | string | Public business contact email, if the creator opted to display one. |
business_phone_number | string | Public business phone, if displayed. |
business_address_json | string | JSON-encoded business address, if displayed. |
has_clips | boolean | true if the profile has posted Reels. |
has_channel | boolean | true if the profile has a broadcast channel. |
has_guides | boolean | true if the profile has published Guides. |
pronouns | array | Pronouns the creator chose to display (e.g. ["she", "her"]). |
profile_pic_url | string | Thumbnail-size profile picture URL (~150x150). |
profile_pic_url_hd | string | Higher-resolution profile picture URL (~320x320). |
Error envelope
Private, deactivated, login-walled, or non-existent accounts return a structured error instead of crashing the run:
{"_input":"this-handle-does-not-exist-xyz","_source":"S1-primary","_scrapedAt":"2026-05-18T10:53:25.118402+00:00","_error":"not_found","_errorDetail":"NotFound: user does not exist"}
Possible _error values:
| Value | Meaning |
|---|---|
not_found | Username does not exist or has been deactivated. |
login_required | Instagram refused to serve the profile anonymously (typical for accounts under reach limits or in certain regions). |
fetch_failed | A transient network / upstream error after retries. |
Filter on _error to triage failed rows.
Pricing
This actor is billed per result: $6.00 per 1,000 profiles. Each successful profile = 1 result. Errors (not_found, login_required, fetch_failed) are not billed.
Other Sosmed Actors
| Platform | Actor | Best for |
|---|---|---|
| Instagram Account Posts Scraper | Full post grid for a profile | |
| Instagram Account Reels Scraper | All Reels for a profile | |
| Instagram Post Detail Scraper | Caption, likes, comments for one URL | |
| Threads | Threads Account Scraper | Profile data for a Threads handle |
| Twitter / X | X Account Scraper | Profile + tweet counts for any handle |
| Facebook Page Scraper | Public Facebook Page metadata | |
| Bluesky | Bluesky Account Scraper | atproto profile + counters |
Browse the full catalog at apify.com/xtracto.
Notes
- Instagram applies aggressive rate limiting to anonymous lookups. For batches over a few hundred accounts, expect the actor to slow down between requests; the run will still complete, just over a longer wall-clock time.
- Private accounts return only the public-facing fields (counts, bio, avatar, verified flag) β the grid (
edge_owner_to_timeline_media.edges) will be empty. Use the Account Posts actor with an authenticated session if you need private content (not supported here). - Follower counts are rounded by Instagram for very large accounts (over ~10K). The number you see in
edge_followed_by.countreflects what Instagram exposes publicly, which may differ from the live internal value by up to a few thousand. - Link in bio: Instagram now supports multiple links per profile. The legacy single link sits in
external_url; the full list is inbio_links. - The
idfield is the most reliable identifier β usernames can change butiddoes not. - Newly-created accounts may take a few hours before they appear in public lookups.
