Instagram Related Profiles Scraper avatar

Instagram Related Profiles Scraper

Pricing

from $0.60 / 1,000 results

Go to Apify Store
Instagram Related Profiles Scraper

Instagram Related Profiles Scraper

Scrape Instagram profile data, profile statistics, and recursive related-profile discovery from public Instagram pages

Pricing

from $0.60 / 1,000 results

Rating

0.0

(0)

Developer

Instagram Scraper

Instagram Scraper

Maintained by Community

Actor stats

1

Bookmarked

166

Total users

75

Monthly active users

2 days ago

Last modified

Share

Actor Stats

A powerful scraper built for recursive profile discovery and data mining. Start with a single Instagram username or URL and automatically traverse "related profiles" to map out interconnected networks, discover influencers, and find niche communities.

Focused exclusively on profiles, this actor traverses up to your desired scrapeDepth and extracts comprehensive profile data—returning normalized profile fields (identity, stats, and account flags), raw metadata, and optional previews like latest_posts and related_profiles for every discovered account.

The current fetch pipeline is based on Instagram's newer profile endpoints: the actor now uses a primary profile fetch, then fills in top-level profile fields from a dedicated profile-details lookup, fills in latest_posts from a dedicated recent-posts lookup, fills in related_profiles from Instagram's related-account suggestions, and parses post_count from the public profile page HTML og:description meta tag.


What this actor can do

  • Scrape Instagram profile stats: followers, following, number of posts
  • Get key profile attributes: verified/private/business flags, profile pictures, bio, external links (if available)
  • Keep additional raw profile metadata from Instagram, including viewer/account capability flags and business/category fields when available
  • Optionally scrape a linked Facebook profile into fb_profile when scrapeFacebookProfile is enabled
  • Optionally return lightweight latest posts metadata (caption, engagement, publishing/status flags, and media fields when available) for quick previews when skipLatestPosts is turned off
  • Return a list of related profiles (useful for discovery and recursive expansion)
  • Expand related profiles up to a configurable scrapeDepth
  • Accept both usernames and profile URLs

Want to get other details from Instagram?

This actor is optimized for profiles (not full post feeds). If you want to scrape other Instagram data, use a dedicated scraper for that specific data type.

Related actors:

ActorDescriptionStats
Instagram Profile ScraperScrape Instagram profile data and profile statistics from public Instagram pagesInstagram Profile 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 Tagged Posts ScraperScrape posts from the profile Tagged tabInstagram Tagged Posts Scraper Actor Stats
Instagram Hashtags Posts ScraperScrape public Instagram hashtag pagesInstagram Hashtags Posts Scraper Actor Stats

What data can I scrape from Instagram profiles?

Using this Instagram Related Profiles API, you can extract both normalized fields and additional Instagram profile metadata (when available on the public profile):

CategoryFieldsWhat you get
Core profile IDspk, pk_id, id, username, full_name, urlInstagram profile identifiers plus the canonical profile URL.
Profile media & linksprofile_pic_url, profile_pic_url_hd, profile_pic_id, profile_pic_genai_tool_info[], has_profile_pic, biography, contact_email, bio_links[], external_url, external_url_linkshimmed, pronouns[]Profile pictures, bio text, extracted contact email, bio links, and Instagram link-wrapper URLs when present. bio_links[] keeps Instagram's current nested link shape, including keys such as image_url, is_pinned, link_type, lynx_url, media_type, and creation_source.
Facebook enrichmentfb_profile, linked_fb_infoOptional Facebook lookup output from one detected profile URL when scrapeFacebookProfile is enabled, plus raw Instagram-linked Facebook metadata when Instagram exposes it.
Counts & activityfollowers, following, post_count, total_clips_count, latest_reel_mediaHigh-level profile counts and reel activity metadata when available. post_count is parsed from the public profile page HTML og:description meta tag (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. In rare edge cases the tag may be missing or unparseable and post_count is emitted as null.
Account state & flagsaccount_type, category, is_verified, is_private, is_business, is_professional_account, is_memorialized, is_unpublished, is_embeds_disabled, has_any_clips, has_story_archive, is_active_on_text_post_app, hide_creator_marketplace_badge, is_regulated_c18, is_coppa_enforced, is_cannesVisibility, category, and account-state flags from Instagram's current profile payload.
Transparency & contextshould_show_category, show_account_transparency_details, show_text_post_app_badge, text_post_app_badge_label, transparency_label, transparency_product, live_broadcast_visibility, live_broadcast_id, supervision_info, mutual_followers_count, profile_context_links_with_user_ids, profile_context_facepile_users, show_ring_award, is_ring_creator, account_badges[]Additional transparency, broadcast, supervision, and context metadata when Instagram includes it.
Public location hintsaddress_street, city_name, zipPublic location/contact-adjacent profile metadata when exposed by Instagram.
Latest posts (preview)latest_posts[]Recent post previews from a dedicated recent-posts request. Items keep Instagram's current post payload shape, including fields such as pk, id, code, user, image_versions2, carousel_media, sharing_friction_info, clips_metadata, and engagement counters. The actor also normalizes caption, hashtags, mentions, tagged_user, taken_at_timestamp, taken_at, and url.
Related profilesrelated_profiles[]Suggested accounts used for discovery and recursive expansion. Each item currently includes id, username, full_name, profile_pic_url, is_private, and is_verified when present in Instagram's response.
Traversal & scrape metadatadepth, source_username, ig_status, message (not-found items), crawled_atdepth is 0 for an input username and increases by one for each related-profile hop. source_username is null at the root and otherwise points to the parent username. ig_status is ok, not_found, or invalid_input.

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 others are passed through from Instagram's profile payload.
  • Raw Instagram metadata can change over time, so downstream consumers should treat optional pass-through 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. In extremely rare cases the tag may be missing or unparseable after retries, and post_count is emitted as null.
  • If an input username or profile URL is invalid, the actor emits a dataset row with ig_status = "invalid_input" instead of silently dropping that value.
  • 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 Facebook profile parsing still fails after retries, the actor keeps fb_profile as null instead of throwing. Other lookup failures can still surface as fb_profile.status = "error" or fb_profile.status = "not_found".
  • latest_posts returns every post item fetched by the actor's dedicated recent-posts preview request, and related_profiles is returned as provided by Instagram for the fetched profile.
  • For stable downstream parsing, missing optional scalars remain null and known list fields remain arrays. For example, pronouns, hashtags, mentions, and tagged_user are emitted as [] when no values are present.
  • The filter fields only decide whether a profile is written to the dataset. They do not stop related profiles from being fetched.

Typical use cases

  • Influencer discovery and enrichment (profile stats, verification, business account)
  • Competitor monitoring (track follower growth over time)
  • Lead enrichment for sales/marketing (public business profiles)
  • Content research (quick look at latest post captions/engagement)

Input

Configure these fields in the Actor’s Input tab in the Apify Console:

instagramUsernames (required)

A list of Instagram usernames or profile URLs you want to scrape.

Examples:

  • google
  • https://www.instagram.com/google/

scrapeFacebookProfile (optional)

When enabled, the actor looks for one Facebook profile URL in this order: external_url, bio_links, biography, then full_name.

The nested fb_profile payload includes url, status, message, bio, profile_name, page_id, counts, and category/profile-type fields when available.

skipLatestPosts (optional)

Controls whether the actor performs the dedicated recent-posts lookup for latest_posts.

  • Default: true
  • true: skip the latest_posts request and return latest_posts: []
  • false: fetch and return the available latest_posts preview items

scrapeDepth (optional)

Controls how many additional related-profile layers are expanded.

  • 0: store the input profile and its direct related profiles
  • 1: also expand the related profiles of those related profiles
  • 10 is the maximum accepted value

maxResults (optional)

Caps the number of dataset items written by the actor.

  • Minimum value: 10
  • Default: no limit
  • Set a value only if you want to cap stored dataset items
  • It does not stop the crawl chain; already queued related profiles still run

Filter fields (optional)

These fields are grouped under a Filters section in the Apify Console and are top-level JSON inputs. In the console they render as Yes / No dropdowns. In raw JSON, use lowercase yes / no; leave a field empty or set it to null to disable that filter.

{
"minFollowers": 1000,
"maxFollowers": 1000000,
"minPosts": 10,
"maxPosts": 5000,
"isVerified": "yes",
"isPrivate": "no",
"isBusinessAccount": "yes"
}

Leave any field empty or null to disable that specific filter.

Profiles that are filtered out still count as processed work and may trigger the filtered-out billing event after the request has been marked handled.

Quick start (Apify Console)

  1. Add one or more values to instagramUsernames (either usernames like nypost or URLs like https://www.instagram.com/google/).
  2. Adjust scrapeDepth, the filter fields, or maxResults only if you need a deeper crawl or tighter result limits.
  3. Click Run → open the Dataset tab to view/export results (JSON, CSV, Excel, etc.).

This makes the actor usable as an Instagram profile scraping API, because datasets can be consumed programmatically via Apify’s API.


Example input

{
"instagramUsernames": ["kevinhart4real"],
"scrapeFacebookProfile": true,
"skipLatestPosts": false,
"scrapeDepth": 1,
"maxResults": 100,
"isVerified": "yes",
"isPrivate": "no"
}

Example output

Example dataset item when a profile is found. This sample is abridged from the current reference output, uses shortened URLs and trimmed arrays, and reflects the current output contract from the July 22, 2026 dataset shape. latest_posts contains every item returned by the actor's current recent-posts preview fetch, and related_profiles is not trimmed by the actor.

{
"pk": "427553890",
"pk_id": "427553890",
"id": "427553890",
"username": "leomessi",
"depth": 0,
"source_username": null,
"full_name": "Leo Messi",
"url": "https://www.instagram.com/leomessi/",
"profile_pic_url": "https://.../424905549_..._s150x150.jpg",
"profile_pic_url_hd": "https://.../424905549_..._hd.jpg",
"profile_pic_id": "3294479802810932506_427553890",
"profile_pic_genai_tool_info": [],
"has_profile_pic": null,
"biography": "Bienvenidos a la cuenta oficial de Instagram de Leo Messi / Welcome to the official Leo Messi Instagram account",
"contact_email": null,
"bio_links": [
{
"image_url": "",
"is_pinned": false,
"link_type": "external",
"lynx_url": "https://l.instagram.com/?u=...",
"media_accent_color_hex": "",
"media_type": "none",
"title": "UE CORNELLÀ ⚽️🟢",
"url": "http://instagram.com/uecornella",
"creation_source": "NONE"
}
],
"external_url": "http://instagram.com/uecornella",
"external_url_linkshimmed": "https://l.instagram.com/?u=...",
"pronouns": [],
"category": "Athlete",
"account_type": 2,
"is_business": false,
"is_private": false,
"is_verified": true,
"is_professional_account": null,
"is_memorialized": false,
"is_unpublished": false,
"is_embeds_disabled": false,
"has_any_clips": true,
"has_story_archive": null,
"is_active_on_text_post_app": false,
"hide_creator_marketplace_badge": false,
"is_regulated_c18": false,
"is_coppa_enforced": null,
"is_cannes": false,
"should_show_category": true,
"show_account_transparency_details": true,
"show_text_post_app_badge": false,
"text_post_app_badge_label": null,
"transparency_label": null,
"transparency_product": null,
"linked_fb_info": null,
"latest_reel_media": null,
"followers": 515369523,
"following": 368,
"post_count": 1529,
"total_clips_count": 1,
"address_street": null,
"city_name": null,
"zip": null,
"fb_profile": null,
"latest_posts": [
{
"code": "DZifppZj_cB",
"pk": "3918833827158423297",
"id": "3918833827158423297_427553890",
"caption": "2️⃣0️⃣0️⃣6️⃣⚽️2️⃣0️⃣2️⃣6️⃣",
"caption_is_edited": false,
"product_type": "carousel_container",
"media_type": 8,
"original_height": 1591,
"original_width": 1273,
"image_versions2": {
"candidates": [
{
"url": "https://.../723852964_...jpg",
"height": 1591,
"width": 1273
},
{
"url": "https://.../723852964_...jpg",
"height": 1350,
"width": 1080
}
]
},
"sharing_friction_info": {
"bloks_app_url": null,
"should_have_sharing_friction": false
},
"user": {
"pk": "427553890",
"username": "leomessi",
"full_name": "Leo Messi",
"profile_pic_url": "https://.../424905549_..._s150x150.jpg",
"hd_profile_pic_url_info": {
"url": "https://.../424905549_..._hd.jpg"
}
},
"comment_count": 460340,
"like_count": 18010039,
"view_count": null,
"can_viewer_reshare": true,
"carousel_media_count": 6,
"carousel_media": [
{
"id": "3918833148741120108_427553890",
"pk": "3918833148741120108",
"media_type": 1,
"product_type": "carousel_item",
"taken_at": 1781381417,
"display_uri": "https://.../723852964_...jpg",
"image_versions2": {
"candidates": [
{
"url": "https://.../723852964_...jpg",
"height": 1591,
"width": 1273
}
]
},
"tagged_user": []
}
],
"hashtags": [],
"mentions": [],
"tagged_user": [],
"taken_at_timestamp": 1781381418,
"taken_at": "2026-06-13T20:10:18Z",
"url": "https://www.instagram.com/p/DZifppZj_cB/",
"clips_metadata": null
}
],
"related_profiles": [
{
"id": "3072984715",
"username": "nicopaz1o",
"full_name": "Nicolás Paz",
"profile_pic_url": "https://.../709723512_...jpg",
"is_private": null,
"is_verified": true
}
],
"ig_status": "ok",
"crawled_at": "2026-07-22T18:23:33.898Z"
}

The real latest_posts items contain many more pass-through Instagram fields than shown above. The example keeps the stable nested shapes that downstream consumers typically care about: bio_links, image_versions2, user, carousel_media, hashtags, mentions, tagged_user, and related_profiles.

Example dataset item when a profile is not found:

{
"username": "11",
"depth": 0,
"source_username": null,
"ig_status": "not_found",
"message": "Profile not found or restricted",
"url": "https://www.instagram.com/11/",
"crawled_at": "2026-02-06T08:03:20.522Z"
}

Here, ig_status: "not_found" means Instagram did not return profile data for that username because the profile does not exist or access to it is restricted.


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.