Instagram User ID Profile Scraper avatar

Instagram User ID Profile Scraper

Pricing

from $0.50 / 1,000 results

Go to Apify Store
Instagram User ID Profile Scraper

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

Instagram Scraper

Maintained by Community

Actor stats

1

Bookmarked

28

Total users

15

Monthly active users

5 days ago

Last modified

Features

Limited permissions

Share

Actor Stats

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 and related_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.
  • skipLatestPosts and skipRelatedProfiles default to true to 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_count may be approximate because it is parsed from Instagram's public HTML og:description tag when available.

Quick start (Apify Console)

  1. Add one or more values to userIds (for example 25025320).
  2. Set skipLatestPosts: false if you need post previews, and skipRelatedProfiles: false if you need suggested accounts.
  3. 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:

  • 25025320
  • 17841400000000001

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):

CategoryFieldsWhat you get
Identity & IDspk, id, pk_id, username, full_name, urlBasic profile identifiers returned by Instagram, plus the canonical profile URL built by the actor.
Profile media & linksprofile_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 enrichmentfb_profileOptional 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 & activityfollowers, following, post_count, total_clips_count, has_any_clips, mutual_followers_count, latest_reel_media, live_broadcast_visibility, live_broadcast_idHigh-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 & capabilitiesis_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_archiveVisibility, 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 hintslinked_fb_info, profile_context_links_with_user_ids, profile_context_facepile_users, supervision_info, has_chainingExtra 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 & locationaddress_street, city_name, zipOptional business/contact location metadata when Instagram exposes it on the public profile. These fields are usually null for non-business accounts.
Transparency & badgesaccount_badges[], show_account_transparency_details, transparency_label, transparency_product, hide_creator_marketplace_badge, is_ring_creator, show_ring_awardTransparency, 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 postslatest_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 profilesrelated_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 metadatacrawled_at, ig_statusTimestamp 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_count is parsed from the public profile page HTML og:description meta tag. Instagram abbreviates counts above ~10k in that tag (for example, 14K Posts instead of an exact number), so values should be treated as approximate. post_count is emitted as null when: (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_email is extracted from biography or full_name when an email address is present on a found profile, and is null otherwise.
  • fb_profile is null when the toggle is disabled or no Facebook profile URL is found. If a Facebook lookup fails after retries, the actor returns fb_profile.status = "error" or fb_profile.status = "not_found" instead of throwing. Successful fb_profile payloads include bio instead of the older intro name.
  • 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, and crawled_at.
  • Missing supported scalar or object fields are null; hashtags and mentions without matches are []. The optional user object contains id and username. crawled_at is 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_count may 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:

ActorDescriptionStats
Instagram Profile ScraperScrape Instagram profile data from usernames, profile URLs, or search-based inputsInstagram Profile Scraper Actor Stats
Instagram Profile Finder & ScraperDiscover public Instagram profiles through Google Search and extract profile detailsInstagram Profile Finder & Scraper Actor Stats
Fast Instagram Profile Posts ScraperScrape post data from Instagram profile pagesFast Instagram Profile Posts Scraper Actor Stats
Instagram Profile Posts ScraperExtract profile post details such as hashtags, counts, media, and shortcodeInstagram Profile Posts Scraper Actor Stats
Fast Instagram Profile Reels ScraperScrape public Instagram Reels from profile pagesFast Instagram Profile Reels Scraper Actor Stats
Instagram Hashtags Posts ScraperScrape public Instagram hashtag pagesInstagram Hashtags Posts Scraper Actor Stats
Instagram Related Profiles ScraperDiscover related accounts and recursively expand profile networksInstagram Related Profiles Scraper Actor Stats

Tips & troubleshooting

Don’t overload the actor. If you need to scrape large lists, split inputs into batches.


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.