Instagram Scraper
Pricing
from $1.40 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
20 hours ago
Last modified
Categories
Share
Instagram Scraper is an Apify Actor that extracts public Instagram profiles, posts, reels, comments, hashtags, topics and places with no login or cookies. Paste links, @usernames, #hashtags or topic keywords and get profile details, bio contacts, likes, plays, captions and media links in separate tables, ready to export as JSON, CSV or Excel. Pricing starts from $1.40 per 1,000 results on the Gold plan ($2.00 on the Free plan). ๐ Try it free
What can Instagram Scraper do?
- ๐ Scrape Instagram in bulk - add one or hundreds of profile links, @usernames, post and reel links, #hashtags, topic keywords, place links and numeric user ids in one run.
- ๐ค Instagram profile scraper - Instagram followers count, bio, verified and business flags, category and statistics.
- ๐ Instagram email scraper and phone number scraper - public contact details found in bios, links and contact fields.
- ๐ฌ Post and reel data - captions, likes, comments, Instagram video plays, reel play counts, media links, hashtags, mentions and music.
- ๐ฌ Instagram comments scraper - comment text, author and time for every post you collect, as separate rows or inside the post.
- ๐ Instagram location scraper - place details with address, coordinates and contacts, plus related profiles for every account.
- ๐ Monitoring - a monitoring key returns only posts and comments that earlier runs did not return yet.
- ๐ฏ Filters - date range, post types, minimum likes, comments and plays, caption keywords, pinned posts and paid partnerships.
- ๐ Export and integrations - JSON, CSV, Excel, XML and HTML, plus the Apify API, schedules and webhooks.
What data can I extract from Instagram?
Every saved row lands in one results table and also in its own table (Profiles, Posts and reels, Comments, Places, Topics). Each row has a recordType field and a scrapedAt time.
| Field | Description |
|---|---|
๐ค username, fullName, id, url, inputUrl | Account identity, profile link and the input that produced the row. |
๐ biography, bioHashtags, bioMentions, externalUrl, bioLinks | Bio text, hashtags and mentions in the bio, and the links on the profile. |
๐ emails, phones, whatsapp | Public contact details found in the bio, links and contact fields. |
๐ followersCount, followsCount, postsCount, postsCountIsApprox | Audience size and post count (rounded when Instagram shows a figure such as 32K). |
โ
isVerified, isPrivate, isBusiness, accountType, category | Verified badge, privacy, business or creator type and category. |
๐ข address, pronouns, threadsUsername, fbid, hasActiveStory, isMemorialized | Extra profile details when shown. |
๐ท profilePicUrl, profilePicUrlHD | Profile picture links. |
๐ stats, relatedProfiles | Averages over collected posts (likes, comments, plays, engagement rate, posting rate, top hashtags) and suggested accounts. |
๐ shortCode, type, productType, isReel, isPinned | Post identity, kind (Image, Video, Sidecar), reel flag and pinned flag. |
๐ caption, hashtags, mentions, captionEdited, alt | Caption text, tags, mentions and Instagram's image description. |
๐ likesCount, likesHidden, commentsCount, videoPlayCount, engagementRate | Engagement numbers; likes are empty when the owner hides them. |
๐ timestamp, takenAtUnix | Publish time in ISO 8601 (UTC) and unix seconds. |
๐ displayUrl, videoUrl, images, childPosts, width, height, videoDuration, hasAudio | Media links, carousel items, size and length. |
๐ ownerUsername, ownerId, ownerFullName, ownerIsVerified, ownerFollowersCount | The post author. |
๐ค coauthors, taggedUsers, isPaidPartnership, sponsors | Collaborations, tagged accounts and paid partnerships. |
๐ต music, location, aiLabel, aiLabelText, commentsDisabled, latestComments | Reel audio, tagged place, AI label, comment switch and embedded comments. |
๐ฌ postShortCode, postUrl, postOwnerUsername, text, createdAtUnix, likesCount, repliesCount, parentId, isPostOwner, isGif, gifUrl | Comment rows: text, time, replies and links. |
๐ ownerUsername, ownerId, ownerIsVerified, ownerProfilePicUrl | The commenter on comment rows. |
๐ name, slug, lat, lng, city, zip, phone, website, priceRange, hours, postsCount | Place rows: details, coordinates and contacts. |
๐ keyword, searchType, relatedKeywords, description, descriptionSources, searchTerm | Topic rows for searched hashtags and topics. |
๐งญ source, dataSource | Where a row was found (and a source label when you switch it on). |
Rows also carry alias copies of some fields (for example verified, private, dimensionsWidth, musicInfo, locationName, locationId) so the output is easy to swap in for other Instagram tools. Only public data is returned.
What can you do with the data from Instagram?
๐ฏ Find Instagram influencers and vet them
- Add creator links to
urlsand keepresultsTypeon Profile details and Posts. - Leave
profileStatson to get average likes, comments, plays, engagement rate and posting frequency per profile. - Export the Profiles table to CSV and rank creators by
followersCountandstats.
๐ Hashtag monitoring and social media monitoring
- Add #hashtags or topic keywords to
urls, or usesearchwithsearchType. - Set
incrementalKeyto a name such as brand-watch and schedule the run daily. - Each run returns only posts that earlier runs with the same key have not returned yet.
๐ Track Instagram followers and run market research
- Add the profiles you follow to
urlsand schedule the run weekly. - Compare
followersCountandpostsCountbetween runs to track Instagram followers over time. - Read
topHashtagsinstatsto find the top Instagram hashtags in your niche.
๐ฌ Comment analysis and sentiment analysis
- Add post or reel links to
urlsand setcommentsLimitabove 0. - Use
commentsNewerThanto keep recent comments only. - Export the Comments table for sentiment analysis or customer research.
๐ Lead generation from Instagram bios
- Add business profile links and pick Profile details.
- Read
emails,phones,externalUrlandcategoryfrom each profile row. - Filter the export to rows where
isBusinessis true.
๐ Competitor analysis and social media analytics
- Add competitor profiles and set
onlyPostsNewerThanto 30 days to scrape Instagram posts by date. - Use
postTypes,minLikesandcaptionKeywordsto keep the posts that matter. - Compare
likesCount,commentsCountandengagementRateacross accounts.
How do I use Instagram Scraper?
- Open Instagram Scraper on Apify and click Try for free.
- Paste links, @usernames, #hashtags or topic keywords into Instagram links or names (
urls). - Choose What to return (
resultsType): Profile details, Posts, Reels, Comments or Related profiles. - Set Posts per input (
resultsLimit) and Maximum rows per run (maxTotalRecords). - Add optional filters such as dates, post types or minimum likes.
- Click Start and wait for the run to finish.
- Open the Output or Dataset tab and export as JSON, CSV or Excel, or call the API.
To scrape public Instagram profiles, use profile links and Profile details. To learn how to scrape Instagram profile feeds, add Posts or Reels. For comments, set commentsLimit. To scrape Instagram hashtags, add a #hashtag. To scrape Instagram locations, add a place link. For Instagram data collection in bulk, put many inputs in urls.
How much does it cost to scrape Instagram?
Instagram Scraper uses pay-per-event pricing: you pay for each result row saved to the results table, and your plan sets the price. Platform usage is billed in addition.
| Plan | Price per result | Per 1,000 results |
|---|---|---|
| ๐ Free | $0.002 | $2.00 |
| ๐ฅ Bronze | $0.0018 | $1.80 |
| ๐ฅ Silver | $0.0016 | $1.60 |
| ๐ฅ Gold, Platinum and Diamond | $0.0014 | $1.40 |
Each run also charges a start event of $0.00005 per GB of memory, minimum one. The default memory is 1 GB (1024 MB), so one start event costs $0.00005.
Example: 500 rows on the Bronze plan cost 500 x $0.0018 = $0.90, plus the $0.00005 start event and platform usage. The per-input overview rows are not charged as results, and inputs that fail return no result rows.
Is scraping Instagram free?
Instagram Scraper is not free to run: results are billed per saved row by plan, from $2.00 per 1,000 on the Free plan to $1.40 per 1,000 on Gold, Platinum and Diamond. Platform usage is billed in addition. Set a maximum spend per run and the Actor stops cleanly when that limit is reached.
How much does Instagram Scraper cost per 1,000 results?
One result is one saved profile, post, reel, comment, place or topic row. 1,000 results cost $2.00 on Free, $1.80 on Bronze, $1.60 on Silver and $1.40 on Gold, Platinum and Diamond, plus the start event and platform usage. Lowering Maximum rows per run caps the number of results you can be charged for.
Input
Instagram Scraper takes a list of Instagram links or names and a choice of what to return. Only urls is required; every other field has a default. All inputs below can be mixed in the same run.
Scrape profiles, posts and reels by link
Add profile links or @usernames, post and reel links, place links or numeric user ids to urls. Profile inputs return the account card and, if selected, its posts, reels, comments and related profiles. Post and reel links always return the post itself.
Discover posts by hashtag or topic
Add #hashtags or topic keywords to urls, or put one term in search and pick searchType (Hashtag or Topic keyword). You get the posts for that term and, with Profile details selected, one topic row. Results come in the order Instagram ranks them, not by date.
Input fields
| Field | Type | Required | Description | Default / example |
|---|---|---|---|---|
urls | array | Yes | Profile links or @usernames, post and reel links, #hashtags, topic keywords, place links or numeric user ids. | ["https://www.instagram.com/natgeo/"] |
resultsType | array | No | Profile details, Posts, Reels, Comments, Related profiles. Values: details, posts, reels, comments, relatedProfiles. | ["details","posts"] |
resultsLimit | integer | No | Posts or reels to collect for each profile, hashtag, topic or place (1 to 100000). | 10 |
commentsLimit | integer | No | Comments per post (0 to 50000). Above 0 turns comments on; with Comments ticked and 0, it reads 10 per post. | 0 |
search | string | No | Extra hashtag or topic term added to your links. | street food bangkok |
searchType | string | No | hashtag or keyword for the search term. | hashtag |
onlyPostsNewerThan | string | No | Keep posts after a date (2026-01-31) or a relative value such as 7 days. Times are UTC; pinned posts may still appear. | empty |
onlyPostsOlderThan | string | No | Keep posts before a date; combine with the field above for a range. | empty |
skipPinnedPosts | boolean | No | Leave out posts pinned to the top of a profile. | false |
postTypes | array | No | image, video, carousel, reel. Empty keeps all. | empty |
minLikes | integer | No | Keep posts with at least this many likes. | 0 |
minComments | integer | No | Keep posts with at least this many comments. | 0 |
minVideoPlays | integer | No | Keep videos and reels with at least this many plays. | 0 |
captionKeywords | array | No | Keep posts whose caption contains any of these words or phrases. | empty |
excludeCaptionKeywords | array | No | Drop posts whose caption contains any of these words or phrases. | empty |
onlyPaidPartnerships | boolean | No | Keep only posts marked as paid partnerships. | false |
commentsNewerThan | string | No | Keep comments after a date or relative value such as 3 days. | empty |
profileStats | boolean | No | Add averages for likes, comments, plays, engagement rate, posting rate and top hashtags to every profile row. | true |
addParentData | boolean | No | Add a dataSource field to every post. | false |
embedCommentsInPosts | boolean | No | Store comments in each post's latestComments instead of the Comments table. | false |
enrichSearchResults | boolean | No | Fetch likes, date, tags and music for hashtag, topic and reel results (adds run time). | true |
enrichOwners | boolean | No | Read each post author's follower count so engagement rate can be calculated (adds run time). | true |
addReelPlayCounts | boolean | No | Fill the play count of reels found in a profile feed. | true |
playCountLookupPages | integer | No | How far back to look for older reels' play counts (0 to 100). Higher takes longer. | 10 |
includeAltText | boolean | No | Fill the alt field with Instagram's image description (adds run time). | true |
maxRelatedProfiles | integer | No | Most related profiles to keep per profile (1 to 100). | 30 |
incrementalKey | string | No | A name such as brand-watch. Returns only posts and comments earlier runs with the same name have not returned. | empty |
excludeIds | array | No | Post ids, short codes or comment ids that must never be returned. | empty |
maxTotalRecords | integer | No | Hard stop for the whole run; profiles, posts and comments all count (1 to 1000000). | 1000 |
concurrency | integer | No | Requests at the same time (1 to 10). Lower it if Instagram slows you down. | 4 |
requestDelay | number | No | Pause after each request in seconds (0 to 10). | 0.4 |
proxyConfiguration | object | No | Optional. Choose an Apify proxy or your own if you want requests to go through one. | {"useApifyProxy": false} |
Example input:
{"urls": ["https://www.instagram.com/natgeo/","#travel","https://www.instagram.com/p/EXAMPLE123/"],"resultsType": ["details", "posts", "comments"],"resultsLimit": 20,"commentsLimit": 10,"onlyPostsNewerThan": "30 days","postTypes": ["image", "reel"],"minLikes": 100,"profileStats": true,"maxTotalRecords": 500}
Output
Results go to the Apify Dataset, and you can export them as JSON, CSV, Excel, XML or HTML from the Console or the API. The Output tab shows one table per type: Profiles, Posts and reels, Comments, Places, Topics, an Inputs overview with one row per input, All results (every row in order) and a Run summary.
The Posts table has views for Overview, Engagement, Media, People and tags, Place and music, and Where found. The Profiles table has Overview, Bio and contact, Statistics and Related views.
Profile
{"recordType": "profile","id": "1000001","username": "example_user","url": "https://www.instagram.com/example_user/","fullName": "Example User","biography": "Travel and food. Contact: hello@example.com","bioHashtags": ["travel"],"bioMentions": ["example_friend"],"externalUrl": "https://example.com","bioLinks": [{"title": null, "url": "https://example.com"}],"emails": ["hello@example.com"],"phones": [],"whatsapp": [],"followersCount": 125000,"followsCount": 320,"postsCount": 840,"postsCountIsApprox": false,"isVerified": false,"isPrivate": false,"isBusiness": true,"accountType": "business","category": "Travel","address": null,"pronouns": [],"profilePicUrl": "https://example.com/pic.jpg","profilePicUrlHD": "https://example.com/pic_hd.jpg","hasActiveStory": false,"threadsUsername": null,"fbid": null,"isMemorialized": false,"stats": {"postsAnalyzed": 10, "avgLikes": 4500.5, "avgComments": 120.3, "engagementRate": 3.7},"relatedProfiles": [{"username": "example_friend", "id": "1000002", "fullName": "Example Friend", "isVerified": false, "url": "https://www.instagram.com/example_friend/"}],"source": {"type": "profile", "value": "example_user"},"scrapedAt": "2026-10-17T10:00:00.000Z","inputUrl": "https://www.instagram.com/example_user/"}
Post or reel
{"recordType": "post","id": "3800000000000000000","shortCode": "EXAMPLE123","url": "https://www.instagram.com/reel/EXAMPLE123/","type": "Video","productType": "clips","isReel": true,"caption": "Sunset by the sea #travel","hashtags": ["travel"],"mentions": [],"timestamp": "2026-09-10T12:00:00.000Z","takenAtUnix": 1789000000,"isPinned": false,"likesCount": 4800,"likesHidden": false,"commentsCount": 130,"videoPlayCount": 52000,"videoDuration": 30.5,"engagementRate": 3.9,"displayUrl": "https://example.com/post.jpg","videoUrl": "https://example.com/post.mp4","images": ["https://example.com/post.jpg"],"childPosts": [],"width": 1080,"height": 1920,"alt": "Photo of a beach at sunset.","ownerUsername": "example_user","ownerId": "1000001","ownerFullName": "Example User","ownerIsVerified": false,"ownerFollowersCount": 125000,"coauthors": [],"taggedUsers": [],"isPaidPartnership": false,"sponsors": [],"music": {"title": "Original audio", "artist": "example_user", "isOriginalAudio": true},"location": {"id": "213385402", "name": "Example Beach", "city": "Example City"},"captionEdited": false,"commentsDisabled": false,"hasAudio": true,"aiLabel": false,"latestComments": [],"source": {"type": "profile", "value": "example_user"},"scrapedAt": "2026-10-17T10:00:00.000Z","inputUrl": "https://www.instagram.com/example_user/"}
Comment
{"recordType": "comment","id": "18000000000000000","postShortCode": "EXAMPLE123","postUrl": "https://www.instagram.com/reel/EXAMPLE123/","postOwnerUsername": "example_user","text": "Great shot!","hashtags": [],"mentions": [],"timestamp": "2026-09-10T13:00:00.000Z","createdAtUnix": 1789003600,"likesCount": null,"repliesCount": null,"parentId": null,"ownerUsername": "example_fan","ownerId": "1000003","ownerIsVerified": false,"ownerProfilePicUrl": "https://example.com/pic.jpg","isPostOwner": false,"isGif": false,"gifUrl": null,"scrapedAt": "2026-10-17T10:00:00.000Z","inputUrl": "https://www.instagram.com/p/EXAMPLE123/"}
Place and topic
{"recordType": "location","id": "213385402","name": "Example City","slug": "example-city","url": "https://www.instagram.com/explore/locations/213385402/example-city","category": null,"lat": 40.71,"lng": -74.0,"address": null,"city": "Example City","zip": null,"phone": null,"website": null,"priceRange": null,"postsCount": 12000000,"hours": null,"source": {"type": "location", "value": "213385402"},"scrapedAt": "2026-10-17T10:00:00.000Z","inputUrl": "https://www.instagram.com/explore/locations/213385402/"}
{"recordType": "keyword","keyword": "travel","url": "https://www.instagram.com/popular/travel/","relatedKeywords": ["travel photography"],"description": null,"descriptionSources": null,"searchType": "hashtag","searchTerm": "travel","scrapedAt": "2026-10-17T10:00:00.000Z","inputUrl": "#travel"}
Inputs overview and run summary
The Inputs overview table has one row per input with input, kind, value, status, rowsSaved, error, errorDescription, notes and seconds. Failed inputs are listed there with a plain reason. The run summary record (SUMMARY) holds finishedAt, rows, rowsByType, durationSeconds, stoppedBecause, inputs and notices.
Notes and limitations
- Only public data is returned; private profiles return the profile card but no posts, reels or comments.
- Instagram shows visitors without an account only part of a post's comments, and no like or reply counts, so
likesCountandrepliesCounton comments are usually empty. likesCountis empty when the owner hides likes (likesHiddenis true).- Hashtag and topic searches return posts in Instagram's ranking, only for terms that have a public results page, and are not chronological.
- Place details are returned, but posts for a place are often not available without an account.
- Play counts of older reels can stay empty; raise
playCountLookupPagesto look further back. - Date and like filters on hashtag, topic and reel results need
enrichSearchResultsswitched on. - Profile feeds stop at the deepest post Instagram shows to visitors.
maxTotalRecordscounts profiles, posts and comments together, so raise it when you collect many comments.
FAQ
Is it legal to scrape Instagram?
Instagram Scraper collects publicly visible data only, but laws such as GDPR and CCPA, and Instagram's terms, still apply to how you use personal data. This is not legal advice. Read Is web scraping legal? and ask a lawyer if you are unsure about your use case.
Can you scrape Instagram without login, cookies or an API key?
Yes. Instagram Scraper works without an Instagram account, login, cookies or Instagram API key, and you only need an Apify account to run it. Because it reads what any visitor can see, private profiles and content that Instagram hides from visitors are not available, and some fields stay empty.
How many results can I get per run?
Set Posts per input (resultsLimit, default 10, up to 100000) for each profile, hashtag, topic or place. Maximum rows per run (maxTotalRecords, default 1000, up to 1,000,000) stops the whole run, counting profiles, posts and comments together. Raise both when you need larger exports, and check results on a small run first.
Can I export Instagram data to CSV or Excel?
Yes. Every run saves rows to an Apify Dataset. Open the Output or Dataset tab and export as JSON, CSV, Excel, XML or HTML, or download the data through the API. Each table (Profiles, Posts and reels, Comments, Places, Topics) can be exported on its own, which keeps spreadsheets clean and easy to filter.
Can I schedule runs or use webhooks and integrations?
Yes. Use Apify schedules to run Instagram Scraper hourly, daily or weekly, and webhooks to start other tasks when a run finishes. Apify integrations let you send results to tools such as Make, n8n or Zapier. Combine a schedule with incrementalKey to receive only new posts and comments on every run.
Can I use Instagram Scraper with the Apify API or an MCP server?
Yes. You can start runs and read results from your own code through the Apify API, and AI assistants can call the Actor through Apify's MCP server. See the Apify API documentation for the endpoints, clients and authentication, and the API tab of this Actor for ready-made examples.
Is Instagram Scraper an Instagram API alternative?
For public data, yes: it needs no developer app, token or approval, and it returns profiles, posts, reels, comments, places and topics as JSON, CSV or Excel. It reads public pages only, so it cannot publish, send messages or read private accounts. Some figures, such as comment likes, may be empty.
Why am I getting fewer results than expected?
Common causes are a low Posts per input, a filter that removes posts (the Inputs overview notes show which one), a private profile, or Instagram showing visitors only part of a feed or comment list. Raise resultsLimit, loosen filters, switch on enrichSearchResults for date filters, and raise maxTotalRecords.
Instagram Scraper not working?
Check the run log and the Inputs overview table first: each failed input has an errorDescription, such as a profile that does not exist or is unavailable. If a valid public input still fails, open the Issues tab with your input and run link, and we will look into it. Lowering concurrency can also help when Instagram slows requests.
Related Actors
| Actor | Use it to |
|---|---|
| ๐ฌ Facebook Reels Scraper | Scrape Facebook Reels from public pages, profiles or reel URLs: captions, play counts, reactions, comments and video links. |
| ๐ Facebook Pages Scraper | Scrape public Facebook Page data in bulk: category, followers, email, phone, website and address. |
| ๐ญ YouTube Comments Scraper | Extract YouTube video comments and replies with author, text, likes and publish date. |
| ๐ฅ YouTube Shorts Scraper | Extract YouTube Shorts from any channel: views, likes, comments and hashtags. |
Support and disclaimer
Found a bug or need a feature? Open an issue in the Issues tab. For custom solutions, integrations or questions, contact hello.dataminds@gmail.com. Instagram Scraper is independent and not affiliated with Instagram or Meta; trademarks belong to their owners. It collects publicly available data, and you are responsible for complying with applicable laws and the terms of Instagram.
Last updated: 2026-10-17