Instagram Profile Scraper avatar

Instagram Profile Scraper

Pricing

from $5.00 / 1,000 results

Go to Apify Store
Instagram Profile Scraper

Instagram Profile Scraper

Extract comprehensive data from Instagram profiles including posts, reels, photos, and engagement metrics.

Pricing

from $5.00 / 1,000 results

Rating

5.0

(1)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

0

Bookmarked

160

Total users

25

Monthly active users

2 days ago

Last modified

Share

Extract complete profile information and posts from any public Instagram account with a single username. Get follower counts, bio, verification and business status, bio links, and detailed post data — captions, engagement metrics, media URLs, hashtags, mentions, tagged users, location, and music attribution. Supports usernames with or without the @ symbol.

What this actor does

  • Full profile data — bio, follower/following/post counts, verification and business status, bio links, and business contact info when available
  • Rich post data — caption, hashtags, mentions, tagged users, collaborators, paid-partnership status, location, and music/audio attribution
  • All post types — photos, videos, reels, carousels, and IGTV, with every individual media item captured for carousels
  • Profile-only mode — set maxPosts to 0 to fetch just the account data without scraping any posts
  • Private account handling — returns the available profile metadata with a clear status instead of failing the run
  • Reliable — built-in retry logic and automatic managed session rotation

Authentication

This actor works out of the box without any setup. You can either:

  1. Paste your own cookies — export from a logged-in browser session using a tool such as Cookie-Editor and paste the JSON into the cookies field.
  2. Leave the cookies field blank — the actor will automatically use a managed pool of shared Instagram sessions. This is the recommended option for most users.

If your cookies expire mid-run, re-export them from your browser and restart the actor.

Output

This actor pushes two kinds of records to the dataset: one profile record per run, and one post record per scraped post.

Profile record

Pushed once per run — the only record returned when maxPosts is 0.

  • author_meta — full profile data of the scraped account (see fields below)

Post record

Pushed once per post when maxPosts is greater than 0.

Always present

  • post_url — direct URL to the Instagram post
  • statussuccess, not_found, age_restricted, error, blocked, or invalid_url
  • author_meta — full profile data of the post's author (same fields as the profile record)

Present only when status is success

  • shortcode — Instagram shortcode identifying the post
  • post_id — internal Instagram media ID
  • username — Instagram username of the post author
  • caption — full caption text of the post
  • hashtags — hashtags extracted from the caption
  • mentions — @mentions extracted from the caption
  • tagged_users — usernames tagged in the post
  • collaborators — usernames listed as co-authors of the post
  • sponsor_tags — sponsor usernames tagged for paid partnerships
  • is_paid_partnershiptrue if the post is marked as a paid partnership
  • is_adtrue if the post is marked as an ad
  • caption_is_editedtrue if the caption was edited after posting
  • pub_date — publication date (ISO 8601)
  • media_typePhoto, Video, Carousel, Reel, or IGTV
  • media_count — number of media items in the post
  • thumbnail_url — direct URL to the post's cover image
  • media_items — every image/video in the post, in order, each with url, width, height, and (for video) duration/play_count
  • accessibility_caption — Instagram's auto-generated alt-text for the media
  • like_count — number of likes on the post
  • comment_count — number of comments on the post
  • likes_hiddentrue if the author hid the like count
  • comments_disabledtrue if commenting is disabled on the post
  • location — tagged location (name, coordinates), when present
  • music — music/audio attribution, when present (reels)
  • scraped_at — ISO 8601 timestamp of when this record was collected

author_meta fields

Always present

  • username — Instagram username
  • full_name — full display name
  • biography — profile bio text
  • profile_pic_url — CDN URL of the profile picture
  • is_verifiedtrue if the account has a verified badge
  • is_privatetrue if the account is private
  • is_businesstrue if the account is registered as a Business account
  • followers_count — number of followers
  • following_count — number of accounts followed
  • posts_count — total posts on the profile
  • profile_url — full URL to the Instagram profile
  • external_urls — all links in the bio, as an array (empty array if none)

Present only when Instagram exposes them on the profile

  • email — public business email
  • phone — public business phone number
  • category — account category, e.g. "Nutritionist"

email, phone, and category are only included in the output when Instagram makes them available on the profile itself — if a profile doesn't show one of these, the field is omitted entirely rather than returned as empty or null.

Input

FieldTypeDefaultDescription
usernamestringrequiredInstagram username to scrape, with or without the @ symbol
maxPostsinteger12Posts to extract (0500). Set to 0 for profile data only
cookiesstringInstagram cookies in JSON format. Leave blank to use the managed session pool
sessionNamestringKey-value store key for a previously saved session (advanced use)

Example: scrape a profile with default settings

{
"username": "cristiano",
"maxPosts": 12
}

Example: profile data only, no posts

{
"username": "nike",
"maxPosts": 0
}

Example: full crawl with your own cookies

{
"username": "natgeo",
"maxPosts": 500,
"cookies": "[{\"name\":\"sessionid\",\"value\":\"YOUR_SESSION_ID\",...}]"
}

Example output

Post record

{
"post_url": "https://www.instagram.com/p/DXxFT1zPFQC/",
"shortcode": "DXxFT1zPFQC",
"post_id": "3123456789012345678",
"status": "success",
"username": "instagram",
"author_meta": {
"username": "instagram",
"full_name": "Instagram",
"biography": "Discover what's new on Instagram",
"profile_pic_url": "https://scontent.cdninstagram.com/.../profile.jpg",
"is_verified": true,
"is_private": false,
"is_business": false,
"followers_count": 700870854,
"following_count": 175,
"posts_count": 8423,
"profile_url": "https://www.instagram.com/instagram/",
"external_urls": ["http://help.instagram.com/"]
},
"caption": "Make your pics look like film with @meta.ai",
"hashtags": [],
"mentions": ["meta.ai"],
"tagged_users": [],
"collaborators": [],
"sponsor_tags": [],
"is_paid_partnership": false,
"is_ad": false,
"caption_is_edited": false,
"pub_date": "2026-04-30T19:06:13",
"media_type": "Reel",
"media_count": 1,
"thumbnail_url": "https://scontent.cdninstagram.com/.../thumbnail.jpg",
"media_items": [
{
"index": 1,
"type": "Reel",
"url": "https://scontent.cdninstagram.com/.../video.mp4",
"width": 1080,
"height": 1920,
"duration": 12.4,
"has_audio": true,
"play_count": 2450000
}
],
"accessibility_caption": null,
"like_count": 131990,
"comment_count": 3600,
"likes_hidden": false,
"comments_disabled": false,
"location": null,
"music": null,
"scraped_at": "2026-05-01T12:32:03.229693"
}

Profile record (maxPosts: 0)

{
"author_meta": {
"username": "abbysnutritionhub",
"full_name": "Abby's Nutrition Hub",
"biography": "Better ingredients, better you",
"profile_pic_url": "https://scontent.cdninstagram.com/.../profile.jpg",
"is_verified": true,
"is_private": false,
"is_business": true,
"followers_count": 30213,
"following_count": 12,
"posts_count": 89,
"profile_url": "https://www.instagram.com/abbysnutritionhub/",
"external_urls": [],
"category": "Nutritionist"
}
}

Profile field availability

Instagram's profile API doesn't return complete data for every account — a small number of accounts (regardless of size or verification status) trigger an error on Instagram's own backend when that API is queried. When this happens, the actor falls back to Instagram's public profile page, which still provides full follower/following/post counts, bio, verification, and privacy status, but doesn't expose business contact details.

Situationemail / phone / categoryOther author_meta fields
Instagram's profile API succeeds (most accounts)Present when set on the profilePresent
Instagram's profile API errors for this accountAbsentPresent

This is a restriction on Instagram's side with no available workaround — the actor always returns the fullest profile data it can retrieve.

Use cases

  • Influencer vetting — verify follower counts, engagement rates, and account authenticity before a collaboration
  • Competitor analysis — track competitor content strategy, posting frequency, and business details
  • Content research — analyze what post types and topics drive the most engagement
  • Brand monitoring — audit brand accounts and measure content performance over time
  • Audience insights — understand posting patterns and community engagement
  • Media archival — collect post media URLs and captions for backup or record-keeping
  • Lead generation — collect public business contact info from accounts in your niche
  • Location and trend research — surface tagged locations and trending audio across an account's posts

FAQ

Do I need an Instagram account to use this actor? No. The actor authenticates automatically — you can leave the cookies field empty and it will work out of the box using the managed session pool.

Will this work on private accounts? Posts cannot be scraped from private accounts. The actor returns the available profile metadata along with a status noting that posts aren't accessible.

How many posts can I extract per run? Up to 500 posts per run. Set maxPosts to any value from 1 to 500, or 0 to fetch only the profile data.

What post types are supported? All post types: images, videos, reels, and carousels. For carousel posts, every individual media item is included in the media_items array, in order.

Why are email, phone, and category missing from some profiles? These fields are only included when Instagram exposes them on the profile itself. If a profile doesn't have public business contact info or a category set, or if Instagram's profile API errors for that account (see Profile field availability), the fields are omitted rather than returned empty.

What happens if a profile does not exist? The scraper fails with a clear error message: Profile @username does not exist or is not available. No dataset record is pushed.

How fresh is the data? Data is scraped live at the time of the run. Profile and post data reflect the current state of the account at the moment of scraping.

Is this actor affiliated with Instagram or Meta? No. This is an independent third-party tool that automates interaction with the public Instagram website. It is not endorsed by or affiliated with Meta Platforms, Inc.

Other Instagram Scrapers

Want to get other data from Instagram? Check out our complete suite of Instagram scrapers:

ActorDescription
Instagram Post ScraperScrape public posts, reels, IGTV, and carousel posts from direct URLs — no login or cookies required
Instagram Comment ScraperScrape comments from any Instagram post or reel
Instagram Followers & Following ScraperScrape followers and following lists from any profile
Instagram Tagged Posts ScraperCollect posts where a user has been tagged
Instagram Hashtag ScraperScrape posts and profiles by hashtag
Instagram Story DownloaderDownload stories from Instagram profiles
Instagram Downloader APIDownload photos, videos, and reels from Instagram
Instagram Keyword ScraperSearch and scrape posts by keyword
Instagram Keyword Search ScraperSearch Instagram accounts and posts by keyword
Instagram Transcript ScraperExtract transcripts from Instagram video content