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

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.

FieldDescription
๐Ÿ‘ค username, fullName, id, url, inputUrlAccount identity, profile link and the input that produced the row.
๐Ÿ“ biography, bioHashtags, bioMentions, externalUrl, bioLinksBio text, hashtags and mentions in the bio, and the links on the profile.
๐Ÿ“ž emails, phones, whatsappPublic contact details found in the bio, links and contact fields.
๐Ÿ“ˆ followersCount, followsCount, postsCount, postsCountIsApproxAudience size and post count (rounded when Instagram shows a figure such as 32K).
โœ… isVerified, isPrivate, isBusiness, accountType, categoryVerified badge, privacy, business or creator type and category.
๐Ÿข address, pronouns, threadsUsername, fbid, hasActiveStory, isMemorializedExtra profile details when shown.
๐Ÿ“ท profilePicUrl, profilePicUrlHDProfile picture links.
๐Ÿ“Š stats, relatedProfilesAverages over collected posts (likes, comments, plays, engagement rate, posting rate, top hashtags) and suggested accounts.
๐Ÿ”– shortCode, type, productType, isReel, isPinnedPost identity, kind (Image, Video, Sidecar), reel flag and pinned flag.
๐Ÿ“„ caption, hashtags, mentions, captionEdited, altCaption text, tags, mentions and Instagram's image description.
๐Ÿ’— likesCount, likesHidden, commentsCount, videoPlayCount, engagementRateEngagement numbers; likes are empty when the owner hides them.
๐Ÿ•’ timestamp, takenAtUnixPublish time in ISO 8601 (UTC) and unix seconds.
๐ŸŒ„ displayUrl, videoUrl, images, childPosts, width, height, videoDuration, hasAudioMedia links, carousel items, size and length.
๐Ÿ™‹ ownerUsername, ownerId, ownerFullName, ownerIsVerified, ownerFollowersCountThe post author.
๐Ÿค coauthors, taggedUsers, isPaidPartnership, sponsorsCollaborations, tagged accounts and paid partnerships.
๐ŸŽต music, location, aiLabel, aiLabelText, commentsDisabled, latestCommentsReel audio, tagged place, AI label, comment switch and embedded comments.
๐Ÿ’ฌ postShortCode, postUrl, postOwnerUsername, text, createdAtUnix, likesCount, repliesCount, parentId, isPostOwner, isGif, gifUrlComment rows: text, time, replies and links.
๐Ÿ™‚ ownerUsername, ownerId, ownerIsVerified, ownerProfilePicUrlThe commenter on comment rows.
๐Ÿ“ name, slug, lat, lng, city, zip, phone, website, priceRange, hours, postsCountPlace rows: details, coordinates and contacts.
๐Ÿ”Ž keyword, searchType, relatedKeywords, description, descriptionSources, searchTermTopic rows for searched hashtags and topics.
๐Ÿงญ source, dataSourceWhere 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

  1. Add creator links to urls and keep resultsType on Profile details and Posts.
  2. Leave profileStats on to get average likes, comments, plays, engagement rate and posting frequency per profile.
  3. Export the Profiles table to CSV and rank creators by followersCount and stats.

๐Ÿ”” Hashtag monitoring and social media monitoring

  1. Add #hashtags or topic keywords to urls, or use search with searchType.
  2. Set incrementalKey to a name such as brand-watch and schedule the run daily.
  3. Each run returns only posts that earlier runs with the same key have not returned yet.

๐Ÿ“ˆ Track Instagram followers and run market research

  1. Add the profiles you follow to urls and schedule the run weekly.
  2. Compare followersCount and postsCount between runs to track Instagram followers over time.
  3. Read topHashtags in stats to find the top Instagram hashtags in your niche.

๐Ÿ’ฌ Comment analysis and sentiment analysis

  1. Add post or reel links to urls and set commentsLimit above 0.
  2. Use commentsNewerThan to keep recent comments only.
  3. Export the Comments table for sentiment analysis or customer research.

๐Ÿ“ž Lead generation from Instagram bios

  1. Add business profile links and pick Profile details.
  2. Read emails, phones, externalUrl and category from each profile row.
  3. Filter the export to rows where isBusiness is true.

๐Ÿ“Š Competitor analysis and social media analytics

  1. Add competitor profiles and set onlyPostsNewerThan to 30 days to scrape Instagram posts by date.
  2. Use postTypes, minLikes and captionKeywords to keep the posts that matter.
  3. Compare likesCount, commentsCount and engagementRate across accounts.

How do I use Instagram Scraper?

  1. Open Instagram Scraper on Apify and click Try for free.
  2. Paste links, @usernames, #hashtags or topic keywords into Instagram links or names (urls).
  3. Choose What to return (resultsType): Profile details, Posts, Reels, Comments or Related profiles.
  4. Set Posts per input (resultsLimit) and Maximum rows per run (maxTotalRecords).
  5. Add optional filters such as dates, post types or minimum likes.
  6. Click Start and wait for the run to finish.
  7. 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.

PlanPrice per resultPer 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.

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

FieldTypeRequiredDescriptionDefault / example
urlsarrayYesProfile links or @usernames, post and reel links, #hashtags, topic keywords, place links or numeric user ids.["https://www.instagram.com/natgeo/"]
resultsTypearrayNoProfile details, Posts, Reels, Comments, Related profiles. Values: details, posts, reels, comments, relatedProfiles.["details","posts"]
resultsLimitintegerNoPosts or reels to collect for each profile, hashtag, topic or place (1 to 100000).10
commentsLimitintegerNoComments per post (0 to 50000). Above 0 turns comments on; with Comments ticked and 0, it reads 10 per post.0
searchstringNoExtra hashtag or topic term added to your links.street food bangkok
searchTypestringNohashtag or keyword for the search term.hashtag
onlyPostsNewerThanstringNoKeep posts after a date (2026-01-31) or a relative value such as 7 days. Times are UTC; pinned posts may still appear.empty
onlyPostsOlderThanstringNoKeep posts before a date; combine with the field above for a range.empty
skipPinnedPostsbooleanNoLeave out posts pinned to the top of a profile.false
postTypesarrayNoimage, video, carousel, reel. Empty keeps all.empty
minLikesintegerNoKeep posts with at least this many likes.0
minCommentsintegerNoKeep posts with at least this many comments.0
minVideoPlaysintegerNoKeep videos and reels with at least this many plays.0
captionKeywordsarrayNoKeep posts whose caption contains any of these words or phrases.empty
excludeCaptionKeywordsarrayNoDrop posts whose caption contains any of these words or phrases.empty
onlyPaidPartnershipsbooleanNoKeep only posts marked as paid partnerships.false
commentsNewerThanstringNoKeep comments after a date or relative value such as 3 days.empty
profileStatsbooleanNoAdd averages for likes, comments, plays, engagement rate, posting rate and top hashtags to every profile row.true
addParentDatabooleanNoAdd a dataSource field to every post.false
embedCommentsInPostsbooleanNoStore comments in each post's latestComments instead of the Comments table.false
enrichSearchResultsbooleanNoFetch likes, date, tags and music for hashtag, topic and reel results (adds run time).true
enrichOwnersbooleanNoRead each post author's follower count so engagement rate can be calculated (adds run time).true
addReelPlayCountsbooleanNoFill the play count of reels found in a profile feed.true
playCountLookupPagesintegerNoHow far back to look for older reels' play counts (0 to 100). Higher takes longer.10
includeAltTextbooleanNoFill the alt field with Instagram's image description (adds run time).true
maxRelatedProfilesintegerNoMost related profiles to keep per profile (1 to 100).30
incrementalKeystringNoA name such as brand-watch. Returns only posts and comments earlier runs with the same name have not returned.empty
excludeIdsarrayNoPost ids, short codes or comment ids that must never be returned.empty
maxTotalRecordsintegerNoHard stop for the whole run; profiles, posts and comments all count (1 to 1000000).1000
concurrencyintegerNoRequests at the same time (1 to 10). Lower it if Instagram slows you down.4
requestDelaynumberNoPause after each request in seconds (0 to 10).0.4
proxyConfigurationobjectNoOptional. 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 likesCount and repliesCount on comments are usually empty.
  • likesCount is empty when the owner hides likes (likesHidden is 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 playCountLookupPages to look further back.
  • Date and like filters on hashtag, topic and reel results need enrichSearchResults switched on.
  • Profile feeds stop at the deepest post Instagram shows to visitors.
  • maxTotalRecords counts profiles, posts and comments together, so raise it when you collect many comments.

FAQ

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.

ActorUse it to
๐ŸŽฌ Facebook Reels ScraperScrape Facebook Reels from public pages, profiles or reel URLs: captions, play counts, reactions, comments and video links.
๐Ÿ“˜ Facebook Pages ScraperScrape public Facebook Page data in bulk: category, followers, email, phone, website and address.
๐Ÿ’ญ YouTube Comments ScraperExtract YouTube video comments and replies with author, text, likes and publish date.
๐ŸŽฅ YouTube Shorts ScraperExtract 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