Instagram Scraper avatar

Instagram Scraper

Deprecated

Pricing

from $2.49 / 1,000 results

Go to Apify Store
Instagram Scraper

Instagram Scraper

Deprecated

Instagram Scraper SD - Instagram Scraper is a social media data tool that extracts posts, reels, profiles, comments, hashtags and locations from any public Instagram URL or search term in one run - Instagram data extractor.

Pricing

from $2.49 / 1,000 results

Rating

0.0

(0)

Developer

Neuro Scraper

Neuro Scraper

Maintained by Community

Actor stats

1

Bookmarked

13

Total users

0

Monthly active users

2 days ago

Last modified

Share

Instagram Scraper — posts, reels, profiles, comments, tags and places

The Instagram Scraper is the all-in-one Instagram data tool: give it any mix of profile, post, reel, hashtag and location links or search terms, choose what to return, and it exports clean rows for each.

It runs on Apify, needs no Instagram login and no cookies, and exports to JSON, CSV, Excel or an API call. Every session key it needs (tokens, query ids, cursors) is read from Instagram on each run, so it keeps working when Instagram ships new code.

What the Instagram Scraper does

  • Posts mode: profile grids, single posts, hashtag pages and location pages.
  • Reels mode: the Reels tab of each profile.
  • Details mode: one row per profile (followers, bio, links) or per post.
  • Comments mode: comments of post and reel links, paginated.

Who uses the Instagram Scraper

  • Teams that want one Instagram tool instead of many.
  • Analysts mixing profiles, hashtags and places in one dataset.
  • Developers needing one API for Instagram data.

How the Instagram Scraper works

Instagram serves every public page to logged-out visitors together with the queries that fill it.

The Actor loads the page the way a browser does, reads the session values Instagram puts into it, and then asks Instagram's own GraphQL endpoint for the next page with the cursor the previous page returned.

Query ids that a page does not preload are read from the JavaScript bundles that page lists. Large files from Instagram's CDN (images, videos) are fetched directly with their signed links, so proxy traffic stays small.

Nothing is guessed: if Instagram stops publishing a value the Instagram Scraper needs, the run log names it and the item is skipped instead of being filled with a stale value.

What is new in the Instagram Scraper (October 2026)

These features were added on 2026-10-03 after comparing the Instagram Scraper with the ten most used Actors of its kind on the Apify Store. Defaults keep the earlier behaviour.

  • Date filters: onlyPostsNewerThan / onlyPostsOlderThan take a date, an ISO time or "7 days"; profile lists stop paging once older posts arrive.
  • skipPinnedPosts leaves out posts pinned to the top of a profile - Instagram flags them in its own post list.
  • searchType (hashtag, profile, user) and searchLimit: a hashtag search reads the tag page plus related tags Instagram suggests (measured: "travel" + "transfer travel", 3 posts each).
  • resultsType: "mentions" lists who each profile mentions, tags and collaborates with.
  • addParentData adds a dataSource label (profile, post, hashtag, location, comment, search) to every row.
  • Posts carry isPinned, paidPartnership, sponsors, musicInfo, audioUrl, images, coauthorProducers, latestComments and place coordinates; profile rows carry businessCategoryName, accountType, isBusinessAccount, profilePicUrlHD and hasPublicStory.

Input of the Instagram Scraper

FieldTypeDefaultWhat it does
directUrlsarray["https://www.instagram.com/nasa/"]Profiles, posts, reels, hashtag (/explore/tags/...) or location URLs - mix freely.
searcharray[]Keywords or hashtags. With "details" returns matching profiles (found through Google), otherwise posts.
resultsTypestringpostsRows produced for each URL.
resultsLimitinteger20Limit for each input URL or search term.
includeDetailsbooleanTrueReads each post's own data (likes, comments count, date, caption, tagged users, location, audio, video link). One extra request per post. Turn off for the faste
searchTypestringautoWhat a search term looks for. Instagram's place search needs a login, so places are not offered: add location URLs instead.
searchLimitinteger0Hashtag search: the term's own tag page plus this many minus one related tags Instagram suggests. Profile search: this many profiles.
onlyPostsNewerThanstring—Leave out posts published before this date: 2026-09-01, an ISO time (2026-09-01T10:00:00Z) or relative ("7 days", "2 weeks", "1 month"). UTC. Profile lists stop
onlyPostsOlderThanstring—Leave out posts published after this date (same formats). Combine with "newer than" for a date range.
skipPinnedPostsbooleanFalseLeave out the posts a profile pinned to the top of its grid (often months old). Instagram flags them in the profile's post list.
addParentDatabooleanFalseAdds a dataSource field to every row: profile, post, hashtag, location, comment or search.
maxItemsinteger0Stops the whole run after this many dataset rows. 0 means only the per-target limits apply.
proxyConfigurationobject{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}Instagram limits logged-out visitors per IP address. Residential proxies (the default) give the most reliable results; the Actor switches to a fresh IP when Ins

Example input for the Instagram Scraper:

{
"directUrls": [
"https://www.instagram.com/nasa/"
],
"resultsType": "posts",
"resultsLimit": 20,
"includeDetails": true
}

Output of the Instagram Scraper

Each dataset row is one post, reel, profile or comment (depending on "What to return"). These are the fields the Instagram Scraper produced in its test runs:

FieldMeaning
altTextaltText
audioMusic or original audio used
captionCaption text
carouselCountcarouselCount
childPostsItems of a carousel
coauthorsCollab co-authors
commentsCountComments count
detailsAvailabledetailsAvailable
displayUrlImage link (largest size)
hashtaghashtag
hashtagsHashtags found in the caption
heightheight
idPlatform id of the item
inputUrlinputUrl
inputUsernameinputUsername
likesAndViewsHiddenlikesAndViewsHidden
likesCountLikes (or reactions) count
locationIdlocationId
locationNameTagged place
mentions@accounts mentioned in the caption
ownerFullNameOwner display name
ownerIdOwner account id
ownerUsernameAccount that posted it
productTypeproductType
scrapedAtWhen this row was read
shortCodeInstagram short code
sourcesource
taggedUsersAccounts tagged in the media
timestampPublication time (UTC, ISO 8601)
topicstopics
typeImage, Video or Sidecar (carousel)
urlPublic link of the item
videoDurationSecVideo length in seconds
videoPlayCountVideo plays
videoUrlVideo file link (signed CDN link, expires)
widthwidth
bioLinksAll bio links
biographyBio text
externalUrlFirst bio link
fbidfbid
audioUrlAudio-only track link (signed CDN link, expires)
captionIsEditedCaption was edited after posting
coauthorProducersCollab co-authors with name, id and verified flag
firstCommentText of the newest comment
hasAudioThe video has sound
imagesEvery image link of the post (carousel items too)
isPinnedPinned to the top of the profile (Instagram's own flag)
latestCommentsNewest comments (about 13-15) with author, likes and date
locationLatLatitude of the tagged place
locationLngLongitude of the tagged place
musicInfoAudio: id, title, artist, original or licensed, explicit, trending
ownerIsVerifiedOwner has the verified badge
ownerProfilePicUrlOwner profile picture link
paidPartnershipMarked as a paid partnership
sponsorsBrands of the paid partnership
positionRank of the post on Instagram's page
accountTypepersonal, business or creator
biographyHashtags#hashtags in the bio
biographyMentions@accounts in the bio
businessCategoryNameBusiness category shown on the profile
externalUrlShimmedFirst bio link through Instagram's redirect (l.instagram.com)
followersCountFollowers
followsCountAccounts followed
fullNameDisplay name
hasPublicStoryHas a story from the last 24 hours
hasReelshasReels
highlightshighlights
highlightsCounthighlightsCount
isBusinessAccountBusiness account
isEmbedsDisabledThe owner blocked embedding
isMemorializedisMemorialized
isPrivatePrivate account
isProfessionalAccountBusiness or creator account
isVerifiedVerified badge
latestPostslatestPosts
latestStoryAtlatestStoryAt
profilePicUrlProfile picture link
profilePicUrlHDProfile picture in full size
pronounspronouns
threadsBadgethreadsBadge
usernameAccount username
commentUrlPermalink of the comment (Instagram asks logged-out visitors to log in first)
parentCommentIdparentCommentId
postCommentsCountComments on the post
postOwnerUsernamepostOwnerUsername
postShortCodepostShortCode
postUrlPost the comment belongs to
repliesCountReplies under the comment
textPost or video text
dataSourceWhere the row came from (profile, post, hashtag, location, comment, search)
searchTermSearch term the row belongs to
captionExcerptcaptionExcerpt
mentionTypementionType
mentionedProfileUrlmentionedProfileUrl
mentionedUsernamementionedUsername
postDisplayUrlImage link of the post
postIdMedia id of the post
postIsPinnedThe post is pinned on the profile
postLikesCountpostLikesCount
postPaidPartnershipThe post is a paid partnership
postTimestamppostTimestamp
postTypeImage, Video or Sidecar
sourceUsernamesourceUsername

Fields that Instagram does not publish for an item are left empty rather than guessed. Download the dataset as JSON, CSV, Excel, XML or HTML, or read it through the Apify API.

Example row from a Instagram Scraper test run

A real row from the local test run (long values shortened):

{
"id": "3996242083173720380",
"shortCode": "Dd1gQBsCWE8",
"url": "https://www.instagram.com/reel/Dd1gQBsCWE8/",
"type": "Video",
"productType": "clips",
"caption": "What happens when we detect an asteroid that could pose a threat to Earth?\n\nIn early 20...",
"hashtags": [],
"mentions": [],
"likesCount": 102351,
"commentsCount": 877,
"videoPlayCount": 5052144,
"timestamp": "2026-09-28T15:27:08.000Z",
"ownerUsername": "nasa",
"ownerId": "528817151",
"ownerFullName": "NASA",
"displayUrl": "https://instagram.fdac5-1.fna.fbcdn.net/v/t51.82787-15/825320801_18652458124049152_7299...",
"videoUrl": "https://instagram.fdac5-1.fna.fbcdn.net/o1/v/t2/f2/m86/AQOuHqPy8zAIe_zxT0betsc1P_MC0UbW...",
"videoDurationSec": 38.61,
"width": 608,
"height": 1080,
"altText": "Video by NASA on September 28, 2026. May be an image of poster and text.",
"childPosts": null
}

Data quality of the Instagram Scraper

  • Every value in a Instagram Scraper row is read from Instagram during your run; nothing is filled from a cache or an old snapshot.
  • Rows are de-duplicated by id inside a run, so the same post, reel, profile or comment never appears twice in one dataset.
  • Counts are numbers you can sort and sum (not "1.2K" text) wherever Instagram publishes the exact number.
  • Dates are UTC in ISO 8601 format, which Excel, Google Sheets, Python and SQL all read directly.

Instagram Scraper test results

These numbers come from live test runs of the Instagram Scraper on 2026-10-03 (home connection, no proxy). Runs on the Apify platform use residential proxies and can be faster or slower.

TestRowsTime
prefill input (regression)2015 s
mixed URLs, posts2720 s
details of profiles110 s
comments of a post3011 s
reels of a profile1320 s
NEW hashtag search + addParentData + skip pinned912 s
NEW mentions results + date filter1110 s

Instagram Scraper limits, stated plainly

  • Search terms in Details mode (or searchType "profile") find profiles through Google, so they need Apify's Google SERP proxy (available on paid plans). Instagram's place search needs a login, so searchType "place" is not offered - add location links instead.
  • Location pages show logged-out visitors one page of posts.
  • Measured locally: 27 rows from a mixed set of profile, hashtag and post links in 30 seconds.

How to run the Instagram Scraper

  1. Open the Instagram Scraper in Apify Console and fill in the input fields described above.
  2. Keep the default residential proxy unless you have a reason to change it; Instagram limits logged-out visitors per IP address.
  3. Start the run, watch the log, and download the dataset when the status says Done.
  4. To automate it, call the Instagram Scraper from the Apify API, schedule it, or connect it to Make, Zapier, n8n or Google Sheets through an integration or webhook.

Python example with the Apify API client:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"directUrls": [
"https://www.instagram.com/nasa/"
],
"resultsType": "posts",
"resultsLimit": 20,
"includeDetails": True
}
run = client.actor("neuro-scraper/instagram-video-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

Instagram Scraper pricing

The Instagram Scraper uses pay-per-event pricing: you pay per dataset row (event "result"), plus the Apify platform usage of your run. Free-plan users get up to 30 rows per run, which is enough to test the Instagram Scraper on real data.

Set a maximum cost per run in Apify and the Instagram Scraper stops cleanly when it is reached.

Tips for large runs of the Instagram Scraper

  • Start with a small limit to check the Instagram Scraper output, then raise it; the first rows arrive within seconds.
  • Split very large jobs into several inputs and run them in parallel tasks; each run gets its own proxy sessions.
  • Set a maximum cost per run in Apify; the Instagram Scraper stops cleanly when the budget is reached and keeps every row it already saved.
  • Schedule repeat runs instead of one huge run when you track the same targets over time.
  • Keep the residential proxy: datacenter IPs are refused by Instagram far more often for logged-out visitors.

Instagram Scraper compared with copying by hand

Instagram ScraperManual work
SpeedSeconds per page of resultsMinutes per item
FieldsEvery public field, same order every timeWhatever you copy
FormatJSON, CSV, Excel, APISpreadsheet you build yourself
RepeatableSchedule it dailyStart again each time
ErrorsLogged per itemUnnoticed typos

Using the Instagram Scraper in a workflow

  • Send every new row to Google Sheets or Airtable with the Apify integration and keep a live table.
  • Trigger a Make, Zapier or n8n scenario with a webhook when the run finishes.
  • Load the JSON export into Python or BigQuery for analysis and dashboards.
  • Use the Apify API: start the Instagram Scraper with a POST request and read the dataset items endpoint when the run finishes.
  • Chain it: pass the Instagram Scraper output to another Apify Actor (for example a downloader or a transcript Actor) in an Apify task.
  • Export straight to Excel from the dataset tab when you only need a one-off report.

Troubleshooting the Instagram Scraper

  • The run ends with no rows: open the log. The Instagram Scraper writes one line per target saying what Instagram returned, for example a login wall or a missing item.
  • Fewer rows than expected: the target may have fewer public items, or Instagram may stop serving more pages to logged-out visitors. The log names the reason.
  • Slow run: large limits mean many pages; the Instagram Scraper waits briefly between pages so Instagram keeps answering. Split big jobs into several runs.
  • Proxy errors: keep the RESIDENTIAL group. The Instagram Scraper already switches to a fresh IP when one is blocked.
  • Free plan stops at 30 rows: that is the free-plan cap of the Instagram Scraper; any paid Apify plan removes it.

What changed in this version of the Instagram Scraper

  • Rebuilt in October 2026 on Instagram's logged-out web endpoints; every token, query id and cursor is read at run time.
  • Pay-per-event pricing (one event per row) replaces the old monthly rental; free-plan users can test with 30 rows per run.
  • Residential proxy by default, with automatic switch to a fresh IP when Instagram blocks one.
  • October 2026 feature round: new filters and fields matching the most used Instagram Actors on the Store, every one measured in a live test; existing inputs and fields are unchanged.

The Instagram Scraper reads only data that Instagram shows to any logged-out visitor. It never logs in and never touches private content. Personal data may still be in public posts, so check GDPR and the other laws that apply to you before you store or reuse it, and respect Instagram's terms.

ActorLink
Instagram Profile Scraperneuro-scraper/instagram-reels-scraper-downloader-pro
Instagram Posts Scraperneuro-scraper/instagram-posts-scraper
Instagram Reels Scraperneuro-scraper/instagram-reels-scraper
Instagram Hashtag Scraperneuro-scraper/instagram-reeel-scraper
Instagram Comments Scraperneuro-scraper/instagram-reels-scraper-and-downloader-premium
Instagram Search Scraperneuro-scraper/instagram-video-scraper-advanced
Instagram Video Downloaderneuro-scraper/instagram-video-downloader
Instagram Reels Downloaderneuro-scraper/instagram-reels-downloader
Instagram Image Downloaderneuro-scraper/instagram-video-scraper-and-downloader
Instagram Transcript Scraperneuro-scraper/instagram-video-scraper-and-downloader-pro
Instagram Mentions Scraperneuro-scraper/instagram-video-scraper-and-downloader-premium
Instagram Keyword Scraperneuro-scraper/instagram-video-scraper-and-downloader-fastest

Leave a review

If the Instagram Scraper saved you time, please leave a star rating and a short review on its Apify page. Reviews help other users find the Instagram Scraper and tell us what to improve next.

Frequently asked questions

Profile links, post and reel links (/p/, /reel/), hashtag links (/explore/tags/) and location links (/explore/locations/).

Does the Instagram Scraper need my Instagram login?

No. The Instagram Scraper works logged out and never asks for your password or cookies. It reads only what Instagram shows to any visitor.

Do I need my own proxy for the Instagram Scraper?

No. The Instagram Scraper uses Apify residential proxies by default and switches to a fresh IP when Instagram blocks one. You can choose another proxy in the input.

What formats can I export from the Instagram Scraper?

JSON, CSV, Excel, XML, HTML and RSS from the dataset tab, or any format through the Apify API, webhooks and integrations.

How fast is the Instagram Scraper?

In the test runs above the Instagram Scraper took between 10 and 20 seconds per run. Speed depends on how many items you ask for and on the proxy.

Why did the Instagram Scraper return fewer rows than I asked for?

The Instagram Scraper stops when Instagram has nothing more to show logged out, when your limit is reached, or when the free-plan cap of 30 rows applies. The run log always says which one happened.

Can I schedule the Instagram Scraper?

Yes. Create a schedule in Apify Console to run the Instagram Scraper daily or hourly and send the results to Google Sheets, Make, Zapier or n8n through an integration.

Can the Instagram Scraper read private accounts or private groups?

No. The Instagram Scraper reads public data only. Private content needs a login, and the Instagram Scraper never logs in.

What happens when Instagram changes its website?

The Instagram Scraper reads every key it needs from Instagram at run time, so routine changes are picked up automatically. If something can no longer be read, the log says so instead of returning wrong data.

Can I use the Instagram Scraper with Make, Zapier or n8n?

Yes. Add the Instagram Scraper as an Apify step in Make, Zapier or n8n, or send a webhook when the run finishes and fetch the dataset items from the Apify API.

Does the Instagram Scraper work in every country?

The Instagram Scraper reads Instagram through residential proxies that rotate across countries. Content that Instagram restricts by country follows those rules.

How do I collect only new items with the Instagram Scraper?

Schedule the Instagram Scraper and keep the item ids from earlier runs. Every row has a stable id, so a simple de-duplication against your previous export keeps only the new ones.

Can the Instagram Scraper process many targets in one run?

Yes. Put as many targets as you like in the input; the Instagram Scraper handles them one after another and a failing target never stops the others.

Can the Instagram Scraper filter posts by date?

Yes. Set onlyPostsNewerThan and / or onlyPostsOlderThan (2026-09-01 or "7 days"). On profiles the Instagram Scraper stops paging as soon as it reaches older posts, which keeps runs short.

Can the Instagram Scraper skip pinned posts?

Yes. Turn on skipPinnedPosts. Instagram marks pinned posts in its own post list, and the Instagram Scraper leaves them out.

Can the Instagram Scraper search places?

No. Instagram's place search answers "Unauthorized logged out query" without a login. Add location links (instagram.com/explore/locations/...) to directUrls instead.