Instagram post scraper: pick one by where your posts come from
Published
An Instagram post scraper takes a starting point (a profile, a hashtag or a list of post links) and returns one row per post: its link, date, caption, counts and owner. The most useful question before you pick one is which of those three starting points you actually have. Tools that look identical on a store page differ mostly on this, and a scraper built for profiles will not walk a hashtag for you, however good its output is.
This guide sorts the options by starting point, shows what a scraped post row usually contains, and walks through a run from start to export. It uses Instagram Hashtag Scraper, an Apify actor that returns the recent posts under one hashtag, as the worked example for the hashtag case, and says plainly where a different tool is the better fit.
Three ways to start an Instagram post scraper
Every post scraper needs to be told where to look. There are three common answers:
- From a profile. You name one or more accounts and get their posts. This is what you want for following a competitor, a creator you might hire, or your own account's history.
- From a hashtag. You name a tag and get the posts that used it. This is what you want for a campaign, an event, a contest, a niche or any topic that many accounts post about.
- From post URLs. You already have the links and want the data behind each one. This suits a list somebody handed you, or a second pass over posts you found another way.
Pick the starting point first, then the tool. A profile list will never surface the account you have not heard of yet, and a hashtag will never give you a full account history. Most disappointing runs come from using the right tool on the wrong starting point.
Which tool does which
Here is how a few well-known options line up, as described on their own pages as of October 2026.
| Tool | Starts from | Runs where | What it is |
|---|---|---|---|
| Instagram Post Scraper (Apify) | Usernames, profile URLs or post URLs | Apify cloud | A hosted actor maintained by Apify |
| Instaloader | Profiles, hashtags, locations, your feed | Your own computer | Free, open source Python tool |
| Instagram Hashtag Scraper (this site) | One hashtag | Apify cloud | A hosted actor for one tag's recent posts |
Apify's own Instagram Post Scraper describes its input this way on its store page:
Just add a username, profile URL or post URL, and you're ready to
Its page lists pricing "from $1.00 / 1,000 posts" as of October 2026. If your list is made of accounts or links, it is built for exactly that, and it is the honest first choice.
Instaloader's documentation says it "downloads public and private profiles, hashtags, user stories, feeds and saved media" and is "free open source software written in Python." It suits someone comfortable at a command line who wants the media files on their own disk. Our Instaloader alternatives article covers when that trade stops working.
Instagram Hashtag Scraper does one job: the recent posts under one hashtag, with an exact result limit and a real date window, charged per post delivered. It does not read profiles, comments, followers or stories. If you need those, use one of the tools above.
What a scraped post looks like
Field names differ between tools, but a post row usually carries the same core. Here is the row Instagram Hashtag Scraper writes for each post, which is a fair picture of the minimum to expect from any post scraper:
| Field | What it holds |
|---|---|
shortcode | The post's id, the part of its link after /p/ |
url | The full post link |
takenAt | When it was posted, as an ISO date and time |
takenAtTimestamp | The same moment as a Unix timestamp |
caption | The caption text, or null when there is none |
hashtags | Every hashtag found in the caption |
likeCount | Likes, or null when Instagram did not return the count |
commentCount | Comments, or null when not returned |
ownerUsername | The account that posted it |
mediaType | Photo, video or carousel |
isVideo / containsVideo | Whether the post is a video, or has a video anywhere in a carousel |
carouselCount | How many slides a carousel has |
displayUrl | The cover image link |
Watch how a tool reports a missing number. Instagram hides like counts on some posts. A scraper that writes 0 for a hidden count makes a popular post look like a flop, and an average over those rows is quietly wrong. This scraper writes null instead, so a spreadsheet can tell "no likes" from "not shown". Whatever tool you use, check this before you average anything.
Some fields you might expect are often missing from hashtag tools, this one included: comment text, follower counts of the poster, and the image link of every carousel slide (only the cover comes back). Profile scrapers tend to return more per post, because they read the post page itself.
Scraping posts from a hashtag, step by step
If your starting point is a hashtag, this is the whole run.
- Check the tag first. Paste it into the free hashtag checker to see how active it is before you spend anything. A tag with a handful of posts a week needs a very different window from one with thousands a day.
- Get a session cookie. Instagram only serves hashtag posts to a signed-in browser, so the actor needs the
sessionidandcsrftokencookies from an account you control. The getting started page shows where to find them in your browser's developer tools. Use an account you are willing to have rate limited. - Set the hashtag and a limit. Enter the tag with or without the
#, and setresultsLimitto the most posts you want. The run never delivers more than that number. - Set a date window.
onlyPostsNewerThanaccepts a date like2026-09-01or a span like7 days. The run stops when the feed reaches that date, so a week costs a week of posts. AddonlyPostsOlderThanto cut a window out of the middle. - Run it and read the status. When it ends, the run says why: limit reached, window reached, or Instagram refused the session. A run that stopped early tells you so.
- Export. Download the dataset as CSV, Excel or JSON from Apify, or pull it by API. Our guide to exporting Instagram posts to Excel covers the spreadsheet side.
A run is charged per post delivered, $0.0005 a post, with no fee for starting a run. Duplicates within a run are dropped and not charged, and so are posts past your limit.
Getting posts from a profile instead
If your starting point is a list of accounts, a hashtag tool is the wrong shape, and you will spend effort working around it. Use a profile-based scraper such as Apify's Instagram Post Scraper or Instaloader, and give it the usernames directly.
There is one useful bridge between the two. If you do not know the accounts yet, a hashtag run is a good way to find them: every row carries ownerUsername, so a sort or a pivot on that column lists who posts most often under a tag. Our guide to finding micro influencers from hashtags walks through it. Then hand those usernames to a profile scraper for their full history.
When you do not need a scraper at all
A scraper is overkill for some jobs. Skip it when:
- You need a few dozen posts once. Scrolling the tag page and copying links by hand is slower but free, and fine for a small sample.
- The posts are your own. Instagram's own data download, under your account settings, gives you your whole history without any tool.
- You only want to see posts, not keep them. The app's hashtag page shows them. Our article on seeing all posts under a hashtag explains what it shows and what it leaves out.
A scraper earns its place when the job repeats or the count is large: a weekly report on a campaign tag, a dataset for analysis, a contest with hundreds of entries.
How to choose, in one line each
- You have usernames or post links: use a profile or post URL scraper.
- You want media files on your own machine and can run Python: Instaloader.
- You have a hashtag and want its recent posts, dated and capped: Instagram Hashtag Scraper.
- You need comments, followers or stories: a tool built for those; a post scraper of any kind will not give them to you.
Whichever you pick, run it small first, look at the rows, and check how it handles hidden counts and dates before you trust a large run.