Instagram Scraper avatar

Instagram Scraper

Pricing

from $0.80 / 1,000 contents

Go to Apify Store
Instagram Scraper

Instagram Scraper

Collect public Instagram profiles, posts, reels, hashtags, places, search results, and tagged posts through anonymous web requests.

Pricing

from $0.80 / 1,000 contents

Rating

0.0

(0)

Developer

Kai

Kai

Maintained by Community

Actor stats

0

Bookmarked

10

Total users

5

Monthly active users

a month ago

Last modified

Categories

Share

Collect public Instagram profiles, posts, reels, comments, places, and Explore metadata as structured data. Search for profiles, hashtags, and places, read available posts, or fetch a known post. Each result is one item in the default dataset.

You do not need an Instagram account or login cookies. Collection uses public Instagram data. Instagram can still block a request, even for public content.

Profile posts, reels, tagged posts, comments, and hashtag candidates can continue across pages when Instagram permits access. Place posts use one public batch. For place reels, the Actor can also check one recent batch when the first batch supplies no matching reels. Hashtag results include only posts whose full caption contains the exact hashtag. These results are a sample from public topic pages. They do not provide complete hashtag coverage.

Use cases

  • Creator research: compare public profile details and available engagement counts.
  • Brand monitoring: collect posts from known public accounts.
  • Content research: collect captions, hashtags, images, reels, and carousel media.
  • Location research: collect details and posts from known places.
  • Reporting: export results for analysis in a spreadsheet or another application.

Data you can collect

  • Profiles: username, name, biography, links, profile image, follower and post counts, account flags, and available related profiles.
  • Posts and reels: caption, author, posting time, available like, comment, view, and play counts, media links, dimensions, and video duration.
  • Carousels: images and videos in their original order, inside one post item.
  • Post context: hashtags, text mentions, tagged users, co-authors, location, music details, and comment previews when Instagram supplies them.
  • Comments: text, author, posting time, likes, reply count, and links to the comment and parent post.
  • Places: name, coordinates, address, city, country, website, category, post count, and supplied phone, postal code, price range, hours, and business profile.
  • Hashtags: name, post count, available profile image, and optional statistics from a public post sample.
  • Explore: public sections with ranked topics, profiles, and categories. One record contains the page's sections.

A field can be missing or null when Instagram does not supply it. Full reply collection, live Stories, audio lookup, and private account data are not supported.

Choose how to collect

Set one mode and put its targets in the targets list.

What you wantSet mode toPut in targets
Profile detailsprofileUsernames or profile URLs
One or more known posts or reelspostPost/reel URLs, shortcodes, or numeric media IDs
Comments on a known post or reelcommentsPost/reel URLs, shortcodes, or numeric media IDs
Posts from a profilepostsUsernames or profile URLs
Reels from a profilereelsUsernames or profile/reels URLs
Available posts with an exact hashtaghashtagHashtags or hashtag URLs
Hashtag detailshashtagDetailsHashtags or hashtag URLs
Place detailsplacePlace IDs or place URLs
Posts shown on a place pageplacePostsPlace IDs or place URLs
Profiles, hashtags, or places that match a phrasesearchSearch phrases; select searchType and searchResults
Posts that tag an accountmentionsUsernames or profile URLs
Public Explore metadataexplorehttps://www.instagram.com/explore/

mentions mode collects posts that tag the account. It does not search for text mentions in captions. Place pages can include posts from the surrounding area; each post keeps its own location when available.

Use @123 for a username that contains only digits. Numeric profile IDs are not supported. In post or comments mode, a target that contains only digits is treated as a media ID. Instagram share links are accepted for these two modes.

Profile cards, _u profile links, and Story URLs can select the account for a profile mode. For example, https://www.instagram.com/stories/nasa/ selects nasa. The Actor does not download the Story.

Start a run

  1. Open the Actor's Input tab in Apify Console.
  2. Select a mode and enter its targets, or use one of the JSON examples below.
  3. Set the maximum results and check the proxy settings.
  4. Select Start.
  5. Open Output to view the results. Select Export to download them.

For Console instructions, see Apify's run guide.

Read profile details

{
"mode": "profile",
"targets": ["instagram", "nasa"],
"maxItems": 2
}

Collect recent posts

Collect up to 10 posts from the profile's public page. Keep posts from the last seven days and omit posts marked as pinned.

{
"mode": "posts",
"targets": ["instagram"],
"maxItems": 10,
"onlyNewerThan": "7 days",
"skipPinnedPosts": true,
"addParentData": true
}

Collect reels and save media files

{
"mode": "reels",
"targets": ["instagram"],
"maxItems": 10,
"downloadMedia": true
}

Fetch a known post

Replace the URL with the post or reel you need.

{
"mode": "post",
"targets": ["https://www.instagram.com/p/DZxvMgyH8yR/"],
"maxItems": 1
}

Read place details

{
"mode": "place",
"targets": ["213385402"],
"maxItems": 1
}

Collect post comments

Collect up to 30 public comments on the post. The Actor requests more comment pages when available. Full reply threads are not collected.

{
"mode": "comments",
"targets": ["https://www.instagram.com/p/DZxvMgyH8yR/"],
"maxItems": 30
}

Read Explore metadata

The result contains public topic, profile, and category sections. It does not contain a personalized post feed. Each section marks whether the public page omitted further entries.

{
"mode": "explore",
"targets": ["https://www.instagram.com/explore/"],
"maxItems": 1
}

Add hashtag sample statistics

Collect hashtag details and statistics from up to 12 available posts whose full captions contain #coffee.

{
"mode": "hashtagDetails",
"targets": ["coffee"],
"addHashtagStatistics": true,
"statisticsLimit": 12,
"maxItems": 1
}

Search for a public profile

Search by a phrase, then collect details for the first matching public profile.

{
"mode": "search",
"targets": ["national geographic"],
"searchType": "profile",
"searchResults": "details",
"searchLimit": 1,
"maxItems": 1
}

Use searchType: "place" to find places or searchType: "hashtag" to find hashtags. Set searchResults to posts or reels to collect available media from the matches. Profile search also accepts mentions for tagged posts. Search reads one batch of available matches; it does not return every match. A phrase can have no matches. A public page can have no posts that meet your filters.

Hashtag search puts an exact name match first when Instagram supplies it. It then applies searchLimit. Other matches keep their source order. The Actor ignores case and a leading # for this comparison.

Input

Both mode and targets are required. Invalid targets or incompatible options stop the run before collection.

FieldTypeDefaultBehaviour
modestringRequiredOne mode from the selection table.
targetsstring[]Required1–100 targets of the same type. Duplicate targets are removed.
maxItemsinteger100Maximum saved items across the run. Range: 1–10,000.
maxItemsPerTargetinteger100Maximum saved items for each input target. Range: 1–1,000. A search query is one target.
maxRequestsinteger500Maximum request attempts. Range: 1–10,000. Includes connection setup, retries, detail checks, and downloads.
onlyNewerThanstringNoneKeep posts or comments after a UTC date, timestamp, or relative time such as 7 days.
skipPinnedPostsbooleanfalseOmit posts marked as pinned.
onlyReelsbooleanfalseKeep only posts identified as reels.
addParentDatabooleanfalseAdd the source profile, hashtag, or place to post results, or the parent post to comments.
addProfileStatisticsbooleanfalseAdd statistics from a sample of posts. Profile detail output only.
addHashtagStatisticsbooleanfalseAdd sample statistics to hashtag details, including hashtag search with searchResults: "details".
statisticsLimitinteger12Maximum posts in a profile or hashtag statistics sample. Range: 1–100.
searchTypestringhashtagprofile, hashtag, or place. user is an alias for profile. Search mode only.
searchResultsstringdetailsdetails, posts, or reels. Profile search also accepts mentions.
searchLimitinteger10Maximum matches to process for each search query. Range: 1–250.
downloadMediabooleanfalseSave available post, reel, and carousel media files.
maxMediaBytesinteger26214400Maximum bytes per media file. Default: 25 MiB. Range: 1–104,857,600 bytes.
proxyConfigurationobject{"useProxy":true}Use the managed Decodo proxy, supply HTTP/HTTPS proxyUrls, or set useProxy to false for direct access.

Filters and statistics

Date filters apply to posts and comments. Pinned-post exclusion, reel filters, and downloads apply to post output. These options cannot be used with profile, hashtag, place, or Explore detail output. Items with missing dates are excluded when a date filter is set. Relative dates use the start time of the original run, including after a restart. A month means 30 days; a year means 365 days.

Profile statistics use the first available posts, up to statisticsLimit. The result includes sampleSize, averageLikes, averageComments, and engagementRate. Engagement rate is (average likes + average comments) / followers × 100. Missing counts produce null values. These statistics describe the sample; they do not measure reach or impressions.

Hashtag statistics have source: "public_post_sample". They include sampleSize, averageLikes, averageComments, datedPosts, postsByDate, and relatedTags. Only posts with the exact hashtag in their captions enter the sample. A related tag's posts and share describe its frequency in that sample. The frequency labels mean: frequent at 25% or more, average at 8% to less than 25%, and rare below 8%. These are sample groups, not Instagram-wide reach tiers. postsByDate counts sampled posts by UTC date; it is not a posts-per-day estimate for the whole hashtag.

Proxies and costs

The Actor uses Decodo ISP proxies by default and rotates across 500 ports for requests, retries, and media downloads. No proxy setup is required for the default settings. A proxy does not guarantee access to Instagram. If you supply several custom proxy URLs, the Actor uses the first one. Set proxyConfiguration: {"useProxy": false} for direct access.

A result can require several requests. Use maxItems to limit saved results and maxRequests to limit collection work. Proxy traffic, media transfer, and file storage can add costs.

Output

The default dataset contains one item per profile, post, comment, hashtag, or place. Explore metadata uses one item for the page and keeps sections inside it. The recordType field identifies the type. Reels and carousels use recordType: "post".

View the dataset in Apify Console or export it as JSON, CSV, Excel, XML, or HTML. JSON keeps nested objects and arrays, such as carousel media and comment previews. See Apify's dataset guide for export options.

Output at a glance

GroupMain fields
Every itemrecordType, schemaVersion, id, inputUrl, url, scrapedAt
Profile identity and linksusername, fullName, biography, externalUrl, bioLinks, profilePicUrl
Profile counts and flagsfollowersCount, followingCount, postsCount, isPrivate, isVerified, isBusinessAccount, categoryName
Optional profile dataprofilePicUrlStandard, profilePicUrlHD, businessCategoryName, businessAddress, joinedRecently, igtvVideoCount, fbid, hasChannel, hasPublicStory, relatedProfiles, statistics
Post content and authorshortCode, caption, timestamp, author, hashtags, mentions, taggedUsers, coauthors
Post countslikesCount, commentsCount, viewCount, playCount, shareCount, reshareCount
Post mediamediaType, productType, displayUrl, videoUrl, dimensions, videoDuration, childPosts
Available post contextlocation, musicInfo, firstComment, latestComments, isPinned, isSponsored, isCommentsDisabled, accessibilityCaption
CommentspostId, parentId, text, timestamp, likesCount, childCommentCount, author
Hashtag detailsname, postsCount, profilePicUrl, relatedTags, postsPerDay, optional statistics
Place detailsname, latitude, longitude, address, city, country, website, category, postsCount, optional phone, zipCode, priceRange, hours, businessProfile
Explore metadatasections, with source id, section, title, limited, and ranked entries
Added source and filesparentData, downloads

IDs are strings. Dates use UTC ISO 8601. scrapedAt is the collection time; a post's timestamp is its posting time. Unavailable counts are null. If the full post page omits a count, the Actor keeps an available count from the public feed. A known zero stays 0. Views and plays are separate counts.

profilePicUrl keeps the best available profile image. Separate standard and HD URLs appear only when supplied. A place's hours can contain only a status string, rather than a weekly schedule. Explore entries use entryType: "keyword", "profile", or "category". Their counts describe the source entries. An Explore topic count is not an exact hashtag count.

This example uses fictional values to show a post item. It is not a live result.

{
"schemaVersion": 1,
"recordType": "post",
"id": "1",
"inputUrl": "https://www.instagram.com/example_creator/",
"url": "https://www.instagram.com/p/B/",
"scrapedAt": "2026-09-24T10:00:00.000Z",
"shortCode": "B",
"mediaType": "image",
"productType": "feed",
"timestamp": "2026-09-23T09:00:00.000Z",
"caption": "A sample photo #travel",
"likesCount": 42,
"commentsCount": 3,
"viewCount": null,
"playCount": null,
"author": {
"id": "10",
"username": "example_creator",
"fullName": "Example Creator",
"profilePicUrl": null,
"isVerified": false,
"isPrivate": false
},
"displayUrl": "https://example.com/photo.jpg",
"videoUrl": null,
"dimensions": { "width": 1080, "height": 1080 },
"videoDuration": null,
"childPosts": [],
"hashtags": ["travel"],
"mentions": [],
"downloads": []
}

Carousels, previews, and media files

A carousel counts as one result. Its ordered childPosts array contains each image or video, its URL, dimensions, and available duration. Available comment previews stay inside the post's latestComments array. These previews are not complete comment threads.

With downloadMedia: true, available media files are saved in the run's key-value store. Each downloads entry contains the media ID, file type, source URL, storage key, and download URL. Videos can also include a poster image. Files above maxMediaBytes are rejected. Source media URLs can expire, so save files you need to keep.

Collection behaviour

Limits and duplicate results

For profile posts, reels, tagged posts, comments, and hashtag candidates, the Actor requests more pages until it reaches a selected limit or the end of the available feed. Instagram can refuse a later page. If the first profile post request fails, the Actor can use posts from the public profile page when that page contains valid data. It can then request further public pages when Instagram supplies the required page data.

Place feeds use the first public batch. For reels, the Actor also checks one recent batch if the first batch supplies no matching reels. It does not continue through place history. When these batches contain only part of the feed, saved results are partial. Increasing the result limit does not remove this limit. Hashtag collection can continue through public topic pages, but only exact caption matches are saved. Explore returns the entries supplied in each section of its public page. Filters and duplicate removal can reduce the number of saved results.

Each record type and ID is saved once across all input targets. If the same post appears under two targets, it keeps the first target's inputUrl. It does not count again under the second target. maxItems and maxItemsPerTarget count saved items after filtering.

Access and unsupported features

Only public profiles and media are collected. If the Actor cannot confirm that an account is public, it does not save its profile or posts.

The Actor does not accept account cookies or offer login. It does not collect full reply threads, live Stories, standalone audio details, or profiles by numeric ID. Music fields and comment previews can still appear when Instagram supplies them with a post. Place collection cannot continue through the full feed.

Missing or partial results

Saved results remain available when a later request fails. Open Run summary, the OUTPUT record in the run's key-value store, to see the saved count and the reason collection stopped for each target.

Check that the target exists and is public. Check your date filters and result, request, and budget limits. A valid target can return no results. If Instagram temporarily refuses access, try a smaller run later. A retry does not guarantee access.

Restart an interrupted run

Use the same input and storage to resume an interrupted run. Previously saved items are kept and are not saved again. Relative dates use the original start time. Request counts continue from the saved total.

Restarting does not retry targets already marked complete, partial, or failed. Start a new run to retry those targets or change the input.