Instagram Scraper avatar

Instagram Scraper

Pricing

from $1.40 / 1,000 results

Go to Apify Store
Instagram Scraper

Instagram Scraper

Scrape public Instagram profiles, posts, reels, comments, hashtags and places with no login or cookies. Get followers, bio contacts, likes, plays, captions and media links. Bulk input, auto proxy fallback. Export JSON, CSV or Excel for lead generation and influencer research.

Pricing

from $1.40 / 1,000 results

Rating

0.0

(0)

Developer

Data Minds

Data Minds

Maintained by Community

Actor stats

0

Bookmarked

16

Total users

9

Monthly active users

6 days ago

Last modified

Categories

Security

Limited permissions

Share

What is Instagram Scraper?

Instagram Scraper collects public Instagram data from profile links, @usernames, post and reel links, hashtags, topic keywords and places, for influencer research, hashtag monitoring and lead generation. Choose what to return, and it saves profile details, posts, reels, comments and related profiles in separate tables, with no login or cookies. Pay per result, from $0.002 on Free to $0.0014 on Gold.

Typical use cases:

  • ๐Ÿ‘ฅ Influencer research and vetting. Find Instagram influencers and compare followers, engagement rate, posting frequency and top hashtags across many accounts.
  • ๐Ÿ“ˆ Competitor content analysis. Pull the latest posts and reels of rival brands with likes, comments and play counts.
  • ๐Ÿ”” Hashtag monitoring and brand monitoring. Monitor Instagram hashtags and topics, and use the monitoring key so each run returns only new posts.
  • ๐Ÿ“ง Lead generation from Instagram bios. Collect public emails, phone numbers and links shown on business and creator profiles.
  • ๐Ÿ’ฌ Comment and sentiment analysis. Export comment text, authors, likes and reply counts for social listening.
  • ๐Ÿ“ Social media monitoring and market research. Read place details and posts tagged at a location for Instagram market research.

Because it runs on the Apify platform, you also get the Apify API, scheduling, webhooks, integrations and downloads in JSON, CSV, Excel, XML, HTML and RSS.

What can Instagram Scraper do?

  • ๐Ÿ”— Accept many inputs in one run: profile links, @usernames, post and reel links, #hashtags, topic keywords, place links and numeric user ids.
  • ๐Ÿงฉ Scrape public Instagram profiles and return details, posts, reels, comments and related profiles, each in its own table.
  • ๐ŸŽž Scrape Instagram reels with their play counts.
  • ๐Ÿ”Ž Scrape Instagram posts by date, and filter by post type, minimum likes, comments or video plays, caption words, pinned posts and paid partnerships.
  • ๐Ÿ“Š Add profile statistics such as average likes, engagement rate and posting cadence.
  • ๐Ÿ”” Remember what earlier runs returned when you set a monitoring key.
  • ๐Ÿ›‘ Stop at a maximum number of rows per run and respect your spend limit.

What data can Instagram Scraper extract?

Each saved row has a recordType (profile, post, comment, location or keyword) and a scrapedAt time. Every input also gets one free overview row in the inputs table.

Profile fields

DataFields
๐Ÿ‘ค Identityid, username, fullName, url, isVerified, isPrivate, isBusiness, accountType, category, pronouns, isMemorialized
๐Ÿ“ Bio and linksbiography, bioHashtags, bioMentions, externalUrl, bioLinks
๐Ÿ“ง Contactsemails, phones, whatsapp, address
๐Ÿ”ข CountsfollowersCount, followsCount, postsCount, postsCountIsApprox
๐Ÿ“ท Pictures and extrasprofilePicUrl, profilePicUrlHD, hasActiveStory, threadsUsername, fbid
๐Ÿ“ˆ Statisticsstats with postsAnalyzed, avgLikes, medianLikes, avgComments, avgVideoPlays, engagementRate, postsPerWeek, reelShare, paidPartnershipShare, topHashtags, topMentions
๐Ÿ‘ฏ Related accountsrelatedProfiles
๐Ÿงพ Run detailsrecordType, source, scrapedAt, inputUrl
๐Ÿ” Same value, common namesverified, private, isBusinessAccount, businessCategoryName, externalUrls

Post and reel fields

DataFields
๐Ÿ†” Identityid, shortCode, url, type, productType, isReel, isPinned
๐Ÿ“ Text and tagscaption, captionEdited, hashtags, mentions, taggedUsers, coauthors, sponsors, isPaidPartnership
๐Ÿ‘ EngagementlikesCount, likesHidden, commentsCount, videoPlayCount, engagementRate, commentsDisabled
๐Ÿ•’ Timetimestamp, takenAtUnix
๐Ÿ“ท MediadisplayUrl, videoUrl, images, childPosts, width, height, videoDuration, hasAudio, alt, aiLabel, aiLabelText
๐Ÿ‘ค AuthorownerUsername, ownerId, ownerFullName, ownerIsVerified, ownerFollowersCount
๐Ÿ“ Place and musiclocation, locationName, locationId, music
๐Ÿ’ฌ Comments inside the postlatestComments
๐Ÿงพ Run detailsrecordType, source, scrapedAt, inputUrl, searchTerm, dataSource
๐Ÿ” Same value, common namesdimensionsWidth, dimensionsHeight, musicInfo, coauthorProducers, paidPartnership, isCommentsDisabled

Comment fields

DataFields
๐Ÿ’ฌ Commentid, text, hashtags, mentions, timestamp, createdAtUnix, likesCount, repliesCount, parentId, isGif, gifUrl
๐Ÿ‘ค CommenterownerUsername, ownerId, ownerIsVerified, ownerProfilePicUrl, isPostOwner
๐Ÿ”— PostpostShortCode, postUrl, postOwnerUsername
๐Ÿงพ Run detailsrecordType, scrapedAt, inputUrl

Place, topic and input fields

DataFields
๐Ÿ“ Placeid, name, slug, url, category, lat, lng, address, city, zip, phone, website, priceRange, postsCount, hours, source, recordType, scrapedAt, inputUrl
๐Ÿ”– Topickeyword, url, relatedKeywords, description, descriptionSources, searchType, searchTerm, recordType, scrapedAt, inputUrl
๐Ÿงญ Input overviewinput, kind, value, status, rowsSaved, error, errorDescription, notes, seconds

Note: Fields appear only when a value is available. Emails, phones and addresses exist only on profiles that publish them, likesCount is empty when the owner hides likes, and videoPlayCount applies to videos and reels.

What data can't Instagram Scraper extract?

It reads public pages only, so private profiles' posts are not available, and the output has no stories, direct messages or follower lists. Comment likesCount and repliesCount are often empty.


How to scrape Instagram profiles, posts and comments

  1. Create a free Apify account at console.apify.com/sign-up.
  2. Open Instagram Scraper in Apify Console.
  3. Add your inputs to urls: profile links, @usernames, post or reel links, #hashtags, topic keywords or place links.
  4. Pick what to return in resultsType: details, posts, reels, comments or relatedProfiles.
  5. Set resultsLimit for posts per input, commentsLimit for comments per post, and any optional filters.
  6. Click Start and watch rows appear in the Output tab as they are saved.
  7. Download the results as JSON, CSV, Excel, XML, HTML or RSS, or read them through the API.

The scraped site is Instagram.


How much does it cost to scrape Instagram?

Instagram Scraper uses pay-per-event pricing. You pay a small start fee per run plus a fee for each saved result, and your Apify platform usage is billed in addition. Your price per result depends on your Apify plan.

Apify planPrice per resultPrice per 1,000 results
๐Ÿ†“ Free$0.002$2.00
๐Ÿฅ‰ Bronze$0.0018$1.80
๐Ÿฅˆ Silver$0.0016$1.60
๐Ÿฅ‡ Gold$0.0014$1.40

The start event costs $0.00005 per GB of memory, with a minimum of one event. The Actor's default memory is 1024 MB, so each run is charged one start event, $0.00005.

Worked example: on the Gold plan, a run that saves 1,000 results costs 1,000 x $0.0014 = $1.40, plus the $0.00005 start event and platform usage billed in addition.

Profiles, posts, comments, places and topics each count as one result. The inputs overview rows are free.

Is scraping Instagram free?

You can try it without paying. The $5 monthly credit on the Apify Free plan covers about 2,500 results at $0.002 each, before platform usage. See the pricing tab for the current prices.


Input

Only urls is required. Everything else has a default. Open the full input schema for the form layout. This is the prefilled input:

{
"urls": ["https://www.instagram.com/natgeo/"],
"resultsType": ["details", "posts"],
"commentsLimit": 10,
"proxyConfiguration": { "useApifyProxy": false }
}
FieldTypeRequiredDefaultDescription
urlsarrayYesnoneProfile links or @usernames, post and reel links, #hashtags or hashtag links, topic keywords, place links, numeric user ids.
resultsTypearrayNo["details","posts"]details, posts, reels, comments, relatedProfiles.
resultsLimitintegerNo10Posts or reels per profile, hashtag, topic or place (1 to 100000).
commentsLimitintegerNo0Comments per post (0 to 50000). Above 0 turns comments on.
searchstringNoemptyExtra hashtag or topic added to your links.
searchTypestringNohashtaghashtag or keyword.
onlyPostsNewerThanstringNoemptyDate or relative value such as 7 days.
onlyPostsOlderThanstringNoemptyDate or relative value.
skipPinnedPostsbooleanNofalseLeave out pinned posts.
postTypesarrayNoallimage, video, carousel, reel.
minLikesintegerNo0Minimum likes.
minCommentsintegerNo0Minimum comments.
minVideoPlaysintegerNo0Minimum plays for videos and reels.
captionKeywordsarrayNoemptyKeep posts whose caption contains any of these.
excludeCaptionKeywordsarrayNoemptyDrop posts whose caption contains any of these.
onlyPaidPartnershipsbooleanNofalseKeep only paid partnership posts.
commentsNewerThanstringNoemptyKeep comments after this date.
profileStatsbooleanNotrueAdd averages and engagement rate to profile rows.
addParentDatabooleanNofalseAdd a dataSource label to posts.
embedCommentsInPostsbooleanNofalseStore comments in latestComments instead of the comments table.
enrichSearchResultsbooleanNotrueFetch full details for hashtag, topic and reel results.
enrichOwnersbooleanNotrueRead author followers so engagement rate can be calculated.
addReelPlayCountsbooleanNotrueFill play counts of reels found in a profile feed.
playCountLookupPagesintegerNo10How far back to look for older reel play counts (0 to 100).
includeAltTextbooleanNotrueFill the alt field.
maxRelatedProfilesintegerNo30Related profiles kept per profile (1 to 100).
incrementalKeystringNoemptyMonitoring name that returns only new posts and comments.
excludeIdsarrayNoemptyPost ids, short codes or comment ids to skip.
maxTotalRecordsintegerNo1000Hard stop for rows in the whole run.
concurrencyintegerNo4Parallel requests (1 to 10).
requestDelaynumberNo0.4Pause after each request in seconds (0 to 10).
proxyConfigurationobjectNo{"useApifyProxy": false}Optional proxy configuration.

Tricky fields

commentsLimit and resultsType

  • โœ… Good: set commentsLimit to 20 to get comments without ticking anything else.
  • โŒ Bad: leaving commentsLimit at 0 and expecting comments without comments in resultsType.

Warning: Comments count as rows. Raise maxTotalRecords when you ask for many comments per post, or the run stops at the limit.

maxTotalRecords

  • โœ… Good: 5000 for 20 profiles with 10 posts and 20 comments each.
  • โŒ Bad: keeping 1000 and wondering why a large comment run ends early.

incrementalKey

  • โœ… Good: brand-watch on a scheduled run to get only posts not returned before.
  • โŒ Bad: changing the name every run, which returns everything again.

onlyPostsNewerThan

  • โœ… Good: 7 days or 2026-10-01.
  • โŒ Bad: last week, which is not a valid format.

Warning: Pinned posts may still appear in date filters. Use skipPinnedPosts to remove them.


Output

Results appear in the Output tab as separate tables: profiles, posts and reels, comments, places, topics and an inputs overview. The default dataset holds every row in the order it was found. Download any table as JSON, CSV, Excel, XML, HTML or RSS, or read it through the API. A SUMMARY record lists totals such as rows, rowsBilled, rowsByType, durationSeconds, stoppedBecause, inputs and notices.

JSON example

Profile row for the prefilled input (shortened):

{
"recordType": "profile",
"id": "787132",
"username": "natgeo",
"fullName": "Example Profile",
"url": "https://www.instagram.com/natgeo/",
"biography": "Example bio text",
"externalUrl": "https://example.com",
"emails": ["press@example.com"],
"phones": [],
"followersCount": 1000000,
"followsCount": 150,
"postsCount": 32000,
"isVerified": true,
"isPrivate": false,
"accountType": "business",
"stats": { "postsAnalyzed": 10, "avgLikes": 45000.5, "engagementRate": 2.4 },
"source": { "type": "profile", "value": "natgeo" },
"scrapedAt": "2026-10-12T10:00:00.000Z",
"inputUrl": "https://www.instagram.com/natgeo/"
}

Post row (shortened):

{
"recordType": "post",
"id": "3800000000000000000",
"shortCode": "ABC123",
"url": "https://www.instagram.com/p/ABC123/",
"type": "Image",
"caption": "Example caption",
"hashtags": ["example"],
"timestamp": "2026-09-10T12:00:00.000Z",
"likesCount": 79600,
"commentsCount": 577,
"displayUrl": "https://example.com/post.jpg",
"ownerUsername": "natgeo",
"engagementRate": 2.4,
"source": { "type": "profile", "value": "natgeo" },
"scrapedAt": "2026-10-12T10:00:00.000Z",
"inputUrl": "https://www.instagram.com/natgeo/"
}

Comment row (shortened):

{
"recordType": "comment",
"id": "18000000000000000",
"postShortCode": "ABC123",
"postUrl": "https://www.instagram.com/p/ABC123/",
"text": "Example comment",
"timestamp": "2026-09-10T13:00:00.000Z",
"likesCount": 3,
"repliesCount": 0,
"ownerUsername": "example_user",
"isPostOwner": false,
"scrapedAt": "2026-10-12T10:00:00.000Z",
"inputUrl": "https://www.instagram.com/natgeo/"
}

Place row (shortened):

{
"recordType": "location",
"id": "213385402",
"name": "Example Place",
"city": "New York",
"lat": 40.71,
"lng": -74.0,
"postsCount": 12000000,
"url": "https://example.com/place",
"scrapedAt": "2026-10-12T10:00:00.000Z"
}

Topic row (shortened):

{
"recordType": "keyword",
"keyword": "travel",
"searchType": "hashtag",
"relatedKeywords": ["travel photography"],
"url": "https://example.com/topic",
"scrapedAt": "2026-10-12T10:00:00.000Z",
"inputUrl": "#travel"
}

Inputs overview row:

{
"input": "https://www.instagram.com/natgeo/",
"kind": "profile",
"value": "natgeo",
"status": "ok",
"rowsSaved": { "profile": 1, "post": 10 },
"error": null,
"errorDescription": null,
"notes": [],
"seconds": 12.4
}

Notes and limitations

  • It collects public data only and needs no login or cookies.
  • Comment likesCount and repliesCount can be empty.
  • likesCount can be empty when the owner hides likes.
  • Hashtag, topic and place results can include fewer fields unless enrichSearchResults is on.
  • A run stops at maxTotalRecords or at your spend limit. Rows already saved are kept.

Tips and advanced usage

  • Start small: the default of 10 posts per input finishes quickly. Raise resultsLimit once the output looks right.
  • Turn off profileStats, enrichSearchResults, enrichOwners and includeAltText when you do not need them. Each extra detail adds run time.
  • Use postTypes, minLikes and captionKeywords to keep only the posts you need, so you pay for fewer rows.
  • Schedule a run with incrementalKey to monitor a profile or hashtag without paying for the same posts twice.
  • If a run returns fewer rows than expected, check the inputs overview table for the status and notes of each input.

Integrations and API

Can I use Instagram Scraper as an API?

Yes. Start runs and read results with the Apify API or the apify-client packages for Node.js and Python. Open the API tab for ready-made calls.

How to scrape Instagram with Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("data_minds/instagram-scraper").call(run_input={
"urls": ["https://www.instagram.com/natgeo/"],
"resultsType": ["details", "posts"],
"commentsLimit": 10,
"proxyConfiguration": {"useApifyProxy": False},
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

Can I integrate Instagram Scraper with other apps?

Yes. Apify connects with Make, Zapier, Google Sheets and Slack, and supports webhooks that fire when a run finishes. You can also schedule runs, for example a daily hashtag check with a monitoring key.

Can I use Instagram Scraper with AI agents (MCP)?

Yes. Connect it through the Apify MCP server and the MCP tab, so an AI assistant can run it and read the results.


Other Instagram and social media scrapers

ActorWhat it does
๐Ÿ”— Facebook Ads Library ScraperScrape public ads from the Meta Ad Library by keyword, Facebook page or Ad Library link: ad copy, creatives, landing pages, run dates, advertiser...
๐Ÿ”— Facebook Event ScraperScrape public Facebook events in bulk from search queries, search/explore links, page and group event lists or single event links: dates, places...
Facebook Pages ScraperScrapes public Facebook Page data in bulk: name, category, likes, followers, email, phone, website and address.
Facebook Reels ScraperScrapes Facebook Reels from public pages, profiles or reel URLs: captions, play counts, reactions and comments.
๐Ÿ”— X (Twitter) Scraper Unlimited โ€“ No LimitsScrape X (Twitter) posts, profiles, articles, threads and analytics from links, handles or search terms.

FAQ

Scraping publicly available data is generally considered lawful in many places, but the rules depend on your country, the data and how you use it. Avoid collecting private information, and respect Instagram's terms and data protection laws. Read Is web scraping legal?. This is not legal advice.

How does Instagram Scraper work?

You give it Instagram links, usernames, hashtags, topics or places and choose what to return. The Actor then reads the public information for each input and saves one row per profile, post, comment, place or topic. Rows appear in the Output tab as they are saved, and each input gets an overview row.

Why scrape Instagram data?

People scrape Instagram for influencer research, competitor content analysis, hashtag and brand monitoring, lead generation from public bio contacts, and comment analysis. Structured exports let you compare accounts, track engagement rate over time and feed spreadsheets, dashboards or other tools without copying data by hand.

Can you scrape Instagram without login?

Yes. Instagram Scraper needs no login, cookies or Instagram account, and it collects only public information. Private profiles are not available. Add public profile links, hashtags, topics or places, choose what to return, and start the run to get structured rows in your results tables.

Why did I get fewer results than expected?

Several settings can limit a run: resultsLimit, maxTotalRecords, your spend limit and the post filters you set. Check the inputs overview table for each input's status and notes. A profile may also simply have fewer posts than requested, or hide its like counts.

Can I export Instagram data to CSV or Excel?

Yes. Open the Output tab, choose a table such as profiles, posts or comments, and download it as CSV, Excel, JSON, XML, HTML or RSS. You can also fetch the same data through the Apify API for use in spreadsheets, databases or reporting tools.

How do I get only new Instagram posts?

Set incrementalKey to a name such as brand-watch and schedule the Actor. Each later run with the same name skips posts and comments that earlier runs already returned, so you pay only for new rows when monitoring a profile or hashtag over time.

Instagram Scraper is not working. What should I do?

Open the run log and the inputs overview table to see which input failed and why. Check that links are public and spelled correctly, then retry later. If the problem continues, report it in the Issues tab with the run link and your input.


Support and feedback

Found a bug or need a field added? Open the Issues tab. For custom solutions or questions, email hello.dataminds@gmail.com.

Built and maintained by the data_minds team on Apify.

This Actor is an independent tool and is not affiliated with, endorsed by or sponsored by Instagram or Meta. You are responsible for using the data in line with applicable laws and platform terms.