Instagram User ID Profile Scraper
Pricing
from $0.50 / 1,000 results
Instagram User ID Profile Scraper
Scrape public Instagram profile data by user ID, including profile stats, bio, external links, account flags, and optional post previews.
Pricing
from $0.50 / 1,000 results
Rating
0.0
(0)
Developer
Instagram Scraper
Maintained by CommunityActor stats
1
Bookmarked
28
Total users
15
Monthly active users
5 days ago
Last modified
Categories
Features
Share
Scrape Instagram profile data and profile statistics from public Instagram pages with an Apify Actor.
This actor is optimized for profiles (not full post feeds). It returns normalized profile fields
(identity, stats, account flags), keeps additional raw Instagram profile metadata when available, and can
optionally enrich output with latest_posts, related_profiles, and a linked fb_profile.
What this actor does
- Accept Instagram user IDs as input
- Return profile identity, follower/following counts, profile flags, bio, links, and media fields
- Keep extra raw Instagram profile metadata when it is present in the public payload
- Optionally enrich output with public-page
latest_posts[]previews andrelated_profiles[] - Optionally scrape one linked Facebook profile into
fb_profile
Before you run
- Input must be
userIds. This actor does not take Instagram usernames or profile URLs as the main input. - It works best for public profiles. Private or restricted profiles may return partial data or
ig_status: "not_found". - It is focused on profiles, not full post or reel scraping. If you need complete post, reel, hashtag, or tagged-post data, use a dedicated actor.
skipLatestPostsandskipRelatedProfilesdefault totrueto reduce optional work.- Latest-post previews come from the public profile page. Availability and the number of posts vary; missing or unparseable previews return
[]without failing the profile. post_countmay be approximate because it is parsed from Instagram's public HTMLog:descriptiontag when available.
Quick start (Apify Console)
- Add one or more values to
userIds(for example25025320). - Set
skipLatestPosts: falseif you need post previews, andskipRelatedProfiles: falseif you need suggested accounts. - Click Run and open the Dataset tab to view or export results.
Invalid or malformed user IDs are still emitted to the dataset with
ig_status: "invalid_input", a safe userId placeholder ("[REDACTED]"), and a
reminder message ("Invalid Instagram user ID"). The raw invalid value is not
repeated because users can accidentally paste a credential-bearing URL or
header. These records omit crawled_at because they are rejected before
scraping continues.
This also makes the actor usable as an Instagram profile scraping API, because datasets can be consumed programmatically via Apify's API.
Input
Configure these fields in the Actor's Input tab in the Apify Console:
userIds (required)
A list of Instagram user IDs you want to scrape. Each value must contain only digits, and the input length is not limited.
Examples:
2502532017841400000000001
scrapeFacebookProfile (optional)
When enabled, the actor looks for one Facebook profile URL in this order: external_url, bio_links,
fb_profile_biolink, biography, then full_name. In the current public payload model, bio_links
is usually the main place where profile links are exposed.
The nested fb_profile payload includes url, status, message, bio, profile_name, page_id,
followers, following, is_business_page_active, category_name, and profile_type when available.
If Facebook enrichment fails, message contains a safe exception type instead
of the underlying network error text, and a credential-bearing failure URL is
sanitized before it is written to the dataset.
skipLatestPosts (optional, default: true)
Skips building latest_posts[]. Set this to false to include the first-page post
previews available on a public profile page. The actor shares the page response
with post_count when both are needed. It can fetch previews even when
skipPostCount is true or the profile already has a post count.
Private profiles, missing previews, and parsing failures produce []. A preview
parsing failure does not retry the profile or prevent profile data from being
saved. The actor does not paginate or fetch individual posts to fill missing data.
skipPostCount (optional, default: false)
Skips building post_count from the extra profile HTML request.
If post_count is not required for your use case, enabling this helps speed up scraping.
When enabled, post_count stays null unless Instagram already returned a usable value in the main profile payload.
skipRelatedProfiles (optional, default: true)
Skips building related_profiles[].
If related_profiles is not required for your use case, keeping this enabled helps speed up scraping.
When disabled, the actor returns the full related_profiles list Instagram exposes.
Example input
{"userIds": ["25025320"],"scrapeFacebookProfile": true,"skipPostCount": false,"skipLatestPosts": false,"skipRelatedProfiles": false}
Example output
Representative dataset item with post previews enabled. This complete example shows one preview for readability; the actor keeps all valid previews available on the page. The profile and post data below are sample data.
{"pk": "6629725","is_memorialized": false,"is_private": false,"has_story_archive": null,"is_coppa_enforced": null,"supervision_info": null,"is_regulated_c18": false,"bio_links": [{"image_url": "","is_pinned": false,"link_type": "external","lynx_url": "https://l.instagram.com/?u=https%3A%2F%2Fmakeitcutekids.com%2F&e=AUBkuN77LRmqcRHQjYeurmdef0AF3RrMilePxtQQR-zeplCuN57537J2GOqovIyZ-YJf-zq0kfVIkm2Jxpn5VzeLmNt7_qVVsF1rRV5bjdvefomJn8UxZAUiurLUsbFKKHc9z1EX0dybqVUmpR1hdaESlbvBeSLTA1T65U_lGRk","media_accent_color_hex": "","media_type": "none","title": "","url": "https://makeitcutekids.com/","creation_source": "NONE"}],"linked_fb_info": null,"text_post_app_badge_label": "mingey","show_text_post_app_badge": true,"username": "mingey","live_broadcast_visibility": null,"live_broadcast_id": null,"profile_pic_url": "https://scontent-sjc6-1.cdninstagram.com/v/t51.2885-19/11848917_1478783632436201_1928828318_a.jpg?_nc_cat=1&ccb=7-5&_nc_sid=f7ccc5&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLnd3dy4xNTAuQzMifQ%3D%3D&_nc_ohc=WSvKLXPoDjoQ7kNvwH-F9Uv&_nc_oc=Adr7jA7C4PPc9-v4a43ulknLLBfbzvkjLn7uuyd7xoReUJDpPWYkRah4BpXvU7FWb9_AFDeLtz3DgdCgAcBb26GE&_nc_zt=24&_nc_ht=scontent-sjc6-1.cdninstagram.com&_nc_ss=70689&oh=00_AQAtf5YBhX5cypditghMbcOc9xOsYdmOFRg7BU1c5nvn4A&oe=6A65093D","is_unpublished": false,"latest_reel_media": null,"has_profile_pic": null,"profile_pic_genai_tool_info": [],"biography": "@makeitcutekids","full_name": "Amanda Seyfried💛","is_verified": true,"show_account_transparency_details": true,"account_type": 3,"mutual_followers_count": null,"profile_context_links_with_user_ids": null,"profile_context_facepile_users": null,"address_street": null,"city_name": null,"is_business": false,"zip": null,"category": "","should_show_category": false,"is_ring_creator": null,"show_ring_award": null,"account_badges": [],"external_url": "https://makeitcutekids.com/","pronouns": [],"transparency_label": null,"transparency_product": null,"hide_creator_marketplace_badge": false,"id": "6629725","has_chaining": null,"is_embeds_disabled": false,"is_cannes": false,"is_professional_account": null,"total_clips_count": 1,"requested_by_viewer": false,"business_email": null,"profile_pic_url_hd": "https://scontent-sjc6-1.cdninstagram.com/v/t51.2885-19/11848917_1478783632436201_1928828318_a.jpg?_nc_cat=1&ccb=7-5&_nc_sid=bf7eb4&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLnd3dy4xNTAuQzMifQ%3D%3D&_nc_ohc=WSvKLXPoDjoQ7kNvwH-F9Uv&_nc_oc=Adr7jA7C4PPc9-v4a43ulknLLBfbzvkjLn7uuyd7xoReUJDpPWYkRah4BpXvU7FWb9_AFDeLtz3DgdCgAcBb26GE&_nc_zt=24&_nc_ht=scontent-sjc6-1.cdninstagram.com&_nc_ss=70689&oh=00_AQAtf5YBhX5cypditghMbcOc9xOsYdmOFRg7BU1c5nvn4A&oe=6A65093D","has_any_clips": true,"hd_profile_pic_url_info": {"url": "https://scontent-sjc6-1.cdninstagram.com/v/t51.2885-19/11848917_1478783632436201_1928828318_a.jpg?_nc_cat=1&ccb=7-5&_nc_sid=bf7eb4&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLnd3dy4xNTAuQzMifQ%3D%3D&_nc_ohc=WSvKLXPoDjoQ7kNvwH-F9Uv&_nc_oc=Adr7jA7C4PPc9-v4a43ulknLLBfbzvkjLn7uuyd7xoReUJDpPWYkRah4BpXvU7FWb9_AFDeLtz3DgdCgAcBb26GE&_nc_zt=24&_nc_ht=scontent-sjc6-1.cdninstagram.com&_nc_ss=70689&oh=00_AQAtf5YBhX5cypditghMbcOc9xOsYdmOFRg7BU1c5nvn4A&oe=6A65093D"},"post_count": 42,"external_url_linkshimmed": "https://l.instagram.com/?u=https%3A%2F%2Fmakeitcutekids.com%2F&e=AUB12fxv-k47bQLorH-uCphhOUNIOr3OuFdrzrapWqR7MpnqIfItI81XkHuusD1FOZ4GnDI80-_dsNGHjj2fDB-HqGH5zQDD_8XUkMuLioiI_Au_LaFVtcbFHWpvQZw_JVLDIWPPqBfVvFDvwFjMWGXMC5EpmLhRzyZ07GWa6Q4","url": "https://www.instagram.com/mingey/","contact_email": null,"followers": 6784343,"following": 1576,"latest_posts": [{"pk": "media-0","id": "opaque-media-0","code": "SHORT0","shortcode": "SHORT0","url": "https://www.instagram.com/p/SHORT0/","media_type": 8,"product_type": "carousel_container","caption": "Example post 0 #sample @collaborator","hashtags": ["sample"],"mentions": ["collaborator"],"accessibility_caption": "Example preview","display_uri": "https://example.com/preview-0.jpg","image": "https://example.com/preview-0.jpg","is_video": false,"user": {"id": "author-0","username": "sampleprofile"},"carousel_media_count": 7,"crawled_at": "2026-10-31T00:00:00Z"}],"related_profiles": [],"fb_profile": null,"ig_status": "ok","crawled_at": "2026-09-27T00:00:00Z"}
Example dataset item when a profile is not found:
{"id": "25025320","userId": "25025320","ig_status": "not_found","message": "Profile not found or restricted","fb_profile": null,"crawled_at": "2026-02-06T08:03:20.522Z"}
Here, ig_status: "not_found" means the actor could not retrieve the profile after several attempts. The profile may not exist, or Instagram may be restricting access to it.
Typical use cases
- Influencer discovery and enrichment using profile stats, verification, and public profile metadata
- Competitor monitoring by tracking profile fields such as followers, following, and post count over time
- Lead enrichment for sales or marketing workflows that need public business profile details
Key output fields
- Identity:
id,pk,username,full_name,url - Profile presentation:
biography,profile_pic_url,profile_pic_url_hd,bio_links[],external_url - Counts and flags:
followers,following,post_count,is_private,is_verified,is_business - Optional enrichments:
fb_profile,latest_posts[],related_profiles[] - Scrape status:
ig_status,crawled_at
Full output field reference
Using this Instagram Profile API, you can extract both normalized fields and additional Instagram profile metadata (when available on the public profile):
| Category | Fields | What you get |
|---|---|---|
| Identity & IDs | pk, id, pk_id, username, full_name, url | Basic profile identifiers returned by Instagram, plus the canonical profile URL built by the actor. |
| Profile media & links | profile_pic_url, profile_pic_url_hd, profile_pic_id, has_profile_pic, profile_pic_genai_tool_info[], biography, contact_email, bio_links[], external_url, external_url_linkshimmed, pronouns[] | Profile picture fields (including HD URL mapped from hd_profile_pic_url_info), profile bio text, extracted contact email, profile links, and external website fields returned by Instagram. external_url_linkshimmed is passed through from Instagram's external_lynx_url when present. Each bio_links[] item may include fields such as image_url, is_pinned, link_type, lynx_url, media_accent_color_hex, media_type, title, url, and creation_source. profile_pic_genai_tool_info[] is a raw Instagram array and is often empty. |
| Facebook enrichment | fb_profile | Optional Facebook profile lookup from one detected profile URL in external_url, bio_links, fb_profile_biolink, biography, or full_name when scrapeFacebookProfile is enabled. The nested payload includes url, status, message, bio, profile_type, profile_name, page_id, counts, and other status fields when available. |
| Counts & activity | followers, following, post_count, total_clips_count, has_any_clips, mutual_followers_count, latest_reel_media, live_broadcast_visibility, live_broadcast_id | High-level counts for analysis, monitoring, and profile summaries, plus activity hints exposed by Instagram. For public profiles, post_count is parsed from profile-page HTML og:description (for example, <meta property="og:description" content="42M Followers, 1,455 Following, 14K Posts - …">). Instagram abbreviates counts above ~10k in that tag (14K, 1.2M, and so on), so values are approximate rather than exact. post_count is null for private profiles (HTML enrichment is skipped) and for public profiles when the tag is missing or unparseable after retries. has_any_clips is derived from total_clips_count when available. latest_reel_media, live_broadcast_visibility, and live_broadcast_id are raw pass-through fields and are commonly null. |
| Account flags & capabilities | is_private, is_verified, show_text_post_app_badge, text_post_app_badge_label, is_active_on_text_post_app, is_unpublished, is_memorialized, is_coppa_enforced, is_regulated_c18, account_type, is_business, is_professional_account, category, should_show_category, is_embeds_disabled, is_cannes, has_story_archive | Visibility, verification, account-type, audience-safety, and account-status fields returned by Instagram. These fields are always emitted on found profiles, using explicit null when Instagram does not return a value (except category, which may be an empty string). |
| Profile context & relationship hints | linked_fb_info, profile_context_links_with_user_ids, profile_context_facepile_users, supervision_info, has_chaining | Extra profile-context blocks returned by Instagram for social graph, supervision, or related-surface hints. These are pass-through fields and are often null on public profile pages. |
| Business & location | address_street, city_name, zip | Optional business/contact location metadata when Instagram exposes it on the public profile. These fields are usually null for non-business accounts. |
| Transparency & badges | account_badges[], show_account_transparency_details, transparency_label, transparency_product, hide_creator_marketplace_badge, is_ring_creator, show_ring_award | Transparency, badge, and creator-surface metadata exposed by Instagram. These are stable pass-through fields when present; arrays such as account_badges[] are emitted as [] when empty. |
| Latest posts | latest_posts[] | Optional first-page previews from public profile pages, with 17 supported fields per post. Includes caption text, hashtags, mentions, a preview image, basic author details, and a batch scrape time. Missing or unparseable previews return [] without failing the profile. |
| Related profiles | related_profiles[] | Suggested accounts from the Accounts you might like enrichment: id, username, full_name, is_verified, profile_pic_url. When enabled, the actor returns the full related-profiles list Instagram exposes for that profile. On final enrichment failure, the actor emits [] and logs a warning instead of failing the whole profile. |
| Scrape metadata | crawled_at, ig_status | Timestamp of the scrape and a simple status indicator. ig_status is ok when profile data is returned, not_found when the profile does not exist or is restricted, and invalid_input when an input user ID is rejected before scraping starts. |
Notes:
- Field availability depends on what Instagram returns for a given profile, especially for private accounts.
- Some fields are normalized by the actor (
followers,following), while other raw Instagram profile fields may still be passed through when present. - Raw Instagram metadata can change over time, so downstream consumers should treat optional fields as non-guaranteed.
post_countis parsed from the public profile page HTMLog:descriptionmeta tag. Instagram abbreviates counts above ~10k in that tag (for example,14K Postsinstead of an exact number), so values should be treated as approximate.post_countis emitted asnullwhen: (1) the profile is private because profile HTML enrichment is skipped, or (2) the profile is public but the tag is missing or unparseable after retries.contact_emailis extracted frombiographyorfull_namewhen an email address is present on a found profile, and isnullotherwise.fb_profileisnullwhen the toggle is disabled or no Facebook profile URL is found. If a Facebook lookup fails after retries, the actor returnsfb_profile.status = "error"orfb_profile.status = "not_found"instead of throwing. Successfulfb_profilepayloads includebioinstead of the olderintroname.- Every
latest_posts[]item contains these 17 fields:pk,id,code,shortcode,url,media_type,product_type,caption,hashtags,mentions,accessibility_caption,display_uri,image,is_video,user,carousel_media_count, andcrawled_at. - Missing supported scalar or object fields are
null; hashtags and mentions without matches are[]. The optionaluserobject containsidandusername.crawled_atis the collection time, not the publication time. - HTML previews do not include publication times, engagement counts, dimensions, video URLs or duration, music details, tagged users, or carousel children.
carousel_media_countmay be available without the child media. These unavailable fields are omitted rather than filled with placeholder values. - Preview availability and count vary. The actor keeps valid previews in page order, does not paginate, and does not fetch individual posts to complete them. Paying status does not change the preview source or field set. Use a dedicated post scraper for more detailed post data.
Want to get other details from Instagram?
This actor is optimized for profiles. If you want to scrape other Instagram data types, use a dedicated scraper for that job.
Related actors from the instagram-scraper:
| Actor | Description | Stats |
|---|---|---|
| Instagram Profile Scraper | Scrape Instagram profile data from usernames, profile URLs, or search-based inputs | |
| Instagram Profile Finder & Scraper | Discover public Instagram profiles through Google Search and extract profile details | |
| Fast Instagram Profile Posts Scraper | Scrape post data from Instagram profile pages | |
| Instagram Profile Posts Scraper | Extract profile post details such as hashtags, counts, media, and shortcode | |
| Fast Instagram Profile Reels Scraper | Scrape public Instagram Reels from profile pages | |
| Instagram Hashtags Posts Scraper | Scrape public Instagram hashtag pages | |
| Instagram Related Profiles Scraper | Discover related accounts and recursively expand profile networks |
Tips & troubleshooting
Don’t overload the actor. If you need to scrape large lists, split inputs into batches.
Legal & ethical notice
You are responsible for ensuring your use of this actor complies with:
- Instagram’s Terms of Service
- Applicable laws and regulations (privacy, data protection, etc.)
Only scrape data you have the right to access, and avoid collecting personal data without a lawful basis.