Instagram Related Profiles Scraper
Pricing
from $0.60 / 1,000 results
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
Maintained by CommunityActor stats
4
Bookmarked
1.2K
Total users
167
Monthly active users
a day ago
Last modified
Categories
Share
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.
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_profilewhenscrapeFacebookProfileis enabled - Optionally return lightweight latest posts metadata (caption, engagement, publishing/status flags, and media fields when available) for quick previews when
skipLatestPostsis 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:
| Actor | Description | Stats |
|---|---|---|
| Instagram Profile Finder | Find relevant Instagram profiles by keyword or topic | |
| Instagram Profile Scraper | Scrape Instagram profile data and profile statistics from public Instagram pages | |
| 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 Posts & Reels Scraper | Scrape Instagram posts and Reels data | |
| Instagram Hashtags Posts Scraper | Scrape public Instagram hashtag pages |
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):
| Category | Fields | What you get |
|---|---|---|
| Core profile IDs | pk, pk_id, id, username, full_name, url | Instagram profile identifiers plus the canonical profile URL. |
| Profile media & links | profile_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 enrichment | fb_profile, linked_fb_info | Optional Facebook lookup output from one detected profile URL when scrapeFacebookProfile is enabled, plus raw Instagram-linked Facebook metadata when Instagram exposes it. |
| Counts & activity | followers, following, post_count, total_clips_count, latest_reel_media | High-level profile counts and reel activity metadata when available. post_count may be approximate because Instagram displays abbreviated counts such as 14K or 1.2M. If the count is unavailable, post_count is emitted as null. |
| Account state & flags | account_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_cannes | Visibility, category, and account-state flags from Instagram's current profile payload. |
| Transparency & context | should_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 hints | address_street, city_name, zip | Public location/contact-adjacent profile metadata when exposed by Instagram. |
| Latest posts (preview) | latest_posts[] | Recent post previews when available. 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 normalizes caption, hashtags, mentions, tagged_user, taken_at_timestamp, taken_at, and url, and adds shortcode, is_video, image, video_url, dimensions, and post-level crawled_at. |
| Related profiles | related_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 metadata | depth, source_username, ig_status, message (not-found items), crawled_at | depth 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_countis available to all users. Instagram may display abbreviated counts (for example,14K Posts), so values should be treated as approximate. If the count is unavailable,post_countis emitted asnull.- 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_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 Facebook profile parsing still fails after retries, the actor keepsfb_profileasnullinstead of throwing. Other lookup failures can still surface asfb_profile.status = "error"orfb_profile.status = "not_found".latest_postsprovides one batch of recent post previews for all users and keeps every valid item available in that batch, without an output cap or automatic pagination.related_profilescontains Instagram's suggested accounts for the profile.- For stable downstream parsing, missing optional scalars remain
nulland known list fields remain arrays. For example,pronouns,hashtags,mentions, andtagged_userare 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:
googlehttps://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 includes recent post previews in latest_posts.
- Default:
true true: skip recent post previews and returnlatest_posts: []false: fetch and return the availablelatest_postspreview items
Latest-post preview fields
code is preserved and shortcode contains the same value. If both upstream fields
are present, a valid shortcode takes precedence. Missing shortcodes are null.
Caption hashtags and mentions are deduplicated in their original order and omit
# and @. Top-level taken_at is UTC ISO 8601; taken_at_timestamp uses seconds.
Media previews expose is_video, image, video_url, dimensions, and
video_duration alongside the original image/video structures. tagged_user[]
keeps its existing fields and adds is_private and profile_pic_id. Each top-level
post has a crawled_at timestamp shared by that batch; carousel children do not.
Known optional scalars and objects use null; known empty lists use [].
Unavailable engagement counts remain null, and play_count, view_count, and
video_view_count retain their separate meanings. Carousel children preserve
existing caption objects and numeric timestamps. Instagram may provide fewer
preview children than carousel_media_count; the actor keeps those previews
without fetching extra media or filling missing children. Upstream user, owner,
engagement, and music details can be absent.
Latest-post scope and limits
latest_postsis a lightweight profile preview, not a complete post-feed scraper. The preview targets 12 recent posts, preserves Instagram's returned order, and does not paginate. Instagram may return fewer items, and pinned or otherwise ranked items may affect which posts appear.- The actor keeps every valid item available in the preview. It does not include missing carousel children, comments, likers, insights, or additional media. Unavailable fields remain absent or use the documented defaults.
- Private, restricted, unavailable, or partially visible profiles can produce
an empty or incomplete preview. An empty
latest_postsarray can also mean thatskipLatestPostsis enabled; it does not by itself prove that the profile has no posts. - Pass-through fields depend on Instagram's current response and may be absent
or change over time. The normalized fields described above keep stable
nulland empty-array defaults where the actor knows the field shape. - Image and video URLs come from Instagram and may expire. Download or process media promptly if your workflow needs durable copies.
skipPostCount (optional)
Controls whether the actor collects post_count.
- Default:
false true: skip collectingpost_countwhen post-count filters are not in usefalse: collectpost_countfor all users when available
The minPosts and maxPosts filters require collecting post_count even when skipPostCount is true.
scrapeDepth (optional)
Controls how many additional related-profile layers are expanded.
0: store the input profile and its direct related profiles1: also expand the related profiles of those related profiles10is the maximum accepted value
maxResultsPerProfile (optional)
Limits the number of saved profiles per input account, including the input account itself and related profiles discovered at any depth.
- Minimum value:
10 - Default: no limit (omit the field or set it to
null) - Each input account has its own limit; duplicate profiles are saved only once.
- Actual results may be lower depending on profile availability, filters, and the run's maximum charge.
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 even though they do not appear in the dataset.
Quick start (Apify Console)
- Add one or more values to
instagramUsernames(either usernames likenypostor URLs likehttps://www.instagram.com/google/). - Adjust
scrapeDepth, the filter fields, ormaxResultsPerProfileonly if you need a deeper crawl or tighter result limits. - 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,"maxResultsPerProfile": 100,"isVerified": "yes","isPrivate": "no"}
Example output
This synthetic example shows one preview item so the output shape remains readable. Production runs keep all valid items available in the recent post preview; they are not limited to the one item shown below. Optional pass-through fields may differ between profiles and as Instagram changes its response.
{"pk": "123","username": "example_profile","full_name": "Example Profile","is_private": false,"is_verified": false,"requested_by_viewer": false,"business_email": null,"profile_pic_url": "https://example.com/avatar.jpg","profile_pic_url_hd": "https://example.com/avatar-hd.jpg","biography": "Example public profile","external_url": null,"post_count": 42,"external_url_linkshimmed": null,"id": "123","url": "https://www.instagram.com/example_profile/","contact_email": null,"followers": 1000,"following": 25,"latest_posts": [{"filter_type": "default","video_codec": "avc1.64001F","video_subtitles_confidence": 0.98,"video_subtitles_enabled": true,"video_subtitles_status": "READY","video_subtitles_uri": "https://example.com/top.vtt","video_subtitles_locale": "en_US","id": "1","code": "SHORT","media_type": 2,"taken_at": "2026-03-05T17:02:14Z","original_width": 640,"original_height": 1137,"image_versions2": {"additional_candidates": {"first_frame": {"url": "https://example.com/top-first-frame.jpg","scans_profile": {"profile": "top-profile"}},"igtv_first_frame": {"url": null},"smart_frame": null,"url": null},"candidates": [{"url": "https://example.com/top-candidate.jpg"}]},"video_versions": [{"url": "https://example.com/top-video.mp4"},{"url": "https://example.com/top-video-2.mp4"}],"caption": "hello #news @caption_mention","carousel_media": [{"filter_type": "ranked","video_codec": "avc1.4D401F","video_subtitles_confidence": 0.85,"video_subtitles_enabled": false,"video_subtitles_status": "DISABLED","video_subtitles_uri": "https://example.com/child.vtt","video_subtitles_locale": "zh_TW","id": "child-1","code": "CHILD","media_type": 1,"original_width": 320,"original_height": 480,"image_versions2": {"additional_candidates": {"first_frame": {"url": "https://example.com/child-first-frame.jpg"}}},"tagged_user": [{"pk": "11","full_name": null,"username": "child_user","profile_pic_url": null,"is_verified": null,"id": "11","is_private": null,"profile_pic_id": null}],"shortcode": "CHILD","taken_at_timestamp": null,"url": "https://www.instagram.com/p/CHILD/","caption": null,"hashtags": [],"mentions": [],"is_video": false,"image": "https://example.com/child-first-frame.jpg","video_url": null,"dimensions": {"height": 480,"width": 320},"accessibility_caption": null,"carousel_parent_id": null,"display_uri": null,"has_liked": null,"has_viewer_saved": null,"inventory_source": null,"is_dash_eligible": null,"like_count": null,"link": null,"logging_info_token": null,"media_overlay_info": null,"number_of_qualities": null,"pk": null,"play_count": null,"preview": null,"previous_submitter": null,"product_type": null,"saved_collection_ids": null,"sharing_friction_info": null,"story_cta": null,"taken_at": null,"user": null,"video_duration": null,"carousel_media": [],"video_versions": [],"organic_tracking_token": "child-organic-token"}],"clips_music_attribution_info": {"artist_name": "Sample Artist","song_name": "Sample Song","uses_original_audio": false,"should_mute_audio": false,"should_mute_audio_reason": null,"audio_id": "audio-1"},"timeline_pinned_user_ids": ["123"],"tagged_user": [{"pk": "10","full_name": "Top User","username": "top_user","profile_pic_url": "https://example.com/u.jpg","is_verified": true,"id": "10","is_private": true,"profile_pic_id": "pic-10"}],"shortcode": "SHORT","hashtags": ["news"],"mentions": ["caption_mention"],"taken_at_timestamp": 1772730134,"url": "https://www.instagram.com/p/SHORT/","is_video": true,"image": "https://example.com/top-candidate.jpg","video_url": "https://example.com/top-video.mp4","dimensions": {"height": 1137,"width": 640},"accessibility_caption": null,"ad_id": null,"affiliate_info": null,"ai_interactive_embodiment_attachment_style_info": null,"ai_label_info": null,"audience": null,"boost_unavailable_identifier": null,"boost_unavailable_reason": null,"boosted_status": null,"can_reshare": null,"can_see_insights_as_brand": null,"can_viewer_reshare": null,"caption_is_edited": null,"carousel_media_count": null,"carousel_parent_id": null,"clips_attribution_info": null,"clips_metadata": null,"comment_count": null,"commenting_disabled_for_viewer": null,"comments_disabled": null,"crosspost_metadata": null,"display_uri": null,"enable_media_notes_production": null,"explore": null,"fb_like_count": null,"feed_demotion_control": null,"feed_recs_demotion_control": null,"follow_hashtag_info": null,"group": null,"has_audio": null,"has_liked": null,"has_viewer_saved": null,"headline": null,"hidden_likes_string_variant": null,"ig_media_sharing_disabled": null,"inventory_source": null,"is_dash_eligible": null,"is_paid_partnership": null,"is_seen": null,"is_shared_from_basel": null,"like_and_view_counts_disabled": null,"like_count": null,"link": null,"location": null,"logging_info_token": null,"main_feed_carousel_starting_media_id": null,"media_cropping_info": null,"media_notes": null,"media_overlay_info": null,"media_repost_count": null,"number_of_qualities": null,"open_carousel_submission_state": null,"photo_of_you": null,"pk": null,"play_count": null,"preview": null,"previous_submitter": null,"product_type": null,"saved_collection_ids": null,"sharing_friction_info": null,"social_context": null,"sponsor_tags": null,"story_cta": null,"thumbnails": null,"title": null,"upcoming_event": null,"user": null,"video_duration": null,"view_count": null,"wearable_attribution_info": null,"all_previous_submitters": [],"clips_tab_pinned_user_ids": [],"coauthor_producers": [],"facepile_top_likers": [],"floating_context_items": [],"invited_coauthor_producers": [],"media_attributions_data": [],"top_likers": [],"crawled_at": "2026-09-27T00:00:00Z","organic_tracking_token": "top-organic-token"}],"related_profiles": [],"fb_profile": null,"ig_status": "ok","crawled_at": "2026-09-27T00:00:00Z","depth": 0,"source_username": null,"is_business": null,"is_professional_account": null,"category": null,"should_show_category": null}
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.
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.