Instagram Posts Scraper Goat
Pricing
from $2.00 / 1,000 post scrapeds
Instagram Posts Scraper Goat
Scrape Instagram posts in bulk by username. Extract full captions, like and comment counts, post dates, media URLs (images, videos, every carousel slide) and reel flags. Video views, locations and tagged users are not included. No Instagram API key, login, or cookies required.
Pricing
from $2.00 / 1,000 post scrapeds
Rating
5.0
(1)
Developer
Goutam Soni
Maintained by CommunityActor stats
0
Bookmarked
79
Total users
9
Monthly active users
5 days ago
Last modified
Categories
Features
Share
Instagram Posts Scraper Goat - Bulk Export Posts, Captions, Likes, Comments & Media
Scrape Instagram posts in bulk by username. Extract full captions, like and comment counts, post dates, media URLs (images, videos and every carousel slide), dimensions and reel flags - all without an Instagram API key, login, or cookies.
What it does not include: video view counts, locations, tagged users, coauthors and paid-partnership flags. The sources this actor reads do not carry them, so those columns are always empty.
What this Instagram posts scraper does
Pass a list of Instagram usernames (or @handles, or profile URLs - mix freely) and the actor returns one clean JSON record per post, with all engagement metrics and media URLs. Pagination is handled automatically across multiple pages, and runs use multiple independent data sources with automatic failover for high reliability.
Perfect for content analysis, competitor monitoring, influencer vetting, brand monitoring, and growth research on Instagram at scale.
Why use this Instagram scraper
- No API key, no login, no cookies - works on any public Instagram profile.
- Bulk by username - scrape one or many Instagram accounts in a single run.
- Auto-pagination - request 12 posts or 12,000, the scraper fetches every page.
- Accurate date filtering -
onlyPostsNewerThanfilters by each post's real timestamp, so old pinned posts are correctly excluded and pagination stops once the feed passes your cutoff. - Multi-source failover - if one upstream is rate-limited, the actor automatically falls back to another, so runs almost always finish.
- Residential proxies built in (Apify proxy or your own).
- One flat JSON object per post with a
usernamefield, so multi-account runs are easy to group/filter. - Carousel-aware - every slide of a multi-image post is returned with its own media URL.
What data you get per Instagram post
| Field | Type | Description |
|---|---|---|
username | string | The Instagram username this post belongs to |
id | string | Post ID |
shortcode | string | URL slug (instagram.com/p/{shortcode}) |
mediaType | string | "image", "video", or "carousel" |
timestamp | integer | When posted (unix epoch) |
caption | string | Full caption text (with hashtags, mentions, emojis) |
displayUrl | string | Main image URL (full resolution) |
thumbnailUrl | string | Square thumbnail URL |
videoUrl | string | MP4 video URL (if video) |
dimensions | object | {"height": 1080, "width": 1080} |
likeCount | integer | Number of likes |
commentCount | integer | Number of comments |
isReel | boolean | The post is a reel |
children | object[] | Carousel slides (media URL, type, dimensions) |
These columns stay in every row so existing integrations keep working, but they are always empty because no source the actor reads carries them: videoViewCount, location, taggedUsers, coauthors, isPaidPartnership, commentsDisabled, productType, accessibilityCaption.
How to use the Instagram Posts Scraper
- Click Try for free on the actor page.
- Enter Instagram usernames in the
usernamesinput. URLs, @handles, and plain usernames all work and are deduped. - Set
maxPostsPerUser(default 12). Set to0to fetch all posts. - Optional: set
onlyPostsNewerThan(YYYY-MM-DD) to only return recent posts - filtered by real timestamp, so pinned/old posts are excluded. - Tune
concurrency(default 5) anddelayBetweenRequests(default 1s) if you're chasing speed. - Click Save & start. Download the dataset in JSON, CSV, Excel, XML, or HTML.
Top use cases
- Content strategy - analyse caption length, hashtag patterns, posting cadence on top accounts in your niche.
- Competitor monitoring - track every post a competitor publishes and their engagement.
- Influencer vetting - real engagement-rate calculation (likes ÷ followers) for agency outreach.
- Brand monitoring - find posts mentioning your brand in captions, hashtags and mentions.
- Hashtag and trend research - extract trending captions and tag clusters at scale.
- AI training data - clean Instagram caption corpus for model fine-tuning.
- Influencer marketing audits - track posting cadence and engagement per post over time.
Integrations
Apify API
$curl "https://api.apify.com/v2/datasets/{DATASET_ID}/items?format=json"
Python
from apify_client import ApifyClientfrom itertools import groupbyfrom operator import itemgetterclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("goat255/instagram-posts-scraper").call(run_input={"usernames": ["example_user_1", "example_user_2"],"maxPostsPerUser": 24,})posts = list(client.dataset(run["defaultDatasetId"]).iterate_items())posts.sort(key=itemgetter("username"))for username, user_posts in groupby(posts, key=itemgetter("username")):user_posts = list(user_posts)avg_likes = sum(p.get("likeCount", 0) or 0 for p in user_posts) / len(user_posts)print(f"@{username}: {len(user_posts)} posts, avg {avg_likes:.0f} likes")
JavaScript / Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('goat255/instagram-posts-scraper').call({usernames: ['example_user_1', 'example_user_2'],maxPostsPerUser: 24,});const { items } = await client.dataset(run.defaultDatasetId).listItems();
No-code integrations
Send results directly to Google Sheets, Slack, Zapier, Make, Amazon S3, or any webhook via Apify Integrations.
Pricing
Pay-per-event. No subscription.
| Event | Price |
|---|---|
| Post scraped (primary) | $0.002 |
Apify's $5 platform free credit applies on first use - ~2,500 free posts to start.
FAQ
Do I need an Instagram account or API key?
No. This scraper works on any public Instagram profile without login, cookies, or the Instagram Graph API.
Can it scrape private Instagram accounts?
No. Only public profiles' posts are accessible. A private account returns one row with "error": "private" and is not charged.
What happens if an account does not exist or has no posts?
Every username gets an answer. Besides post rows you can see one row per account with an error field: not_found (no such account), private, no_posts (a public account with no posts yet), invalid_username (the input cannot be an Instagram username) or upstream_unavailable (the account could not be reached on this run; try again later). These rows are never charged.
How many posts can I scrape per profile?
Unlimited - Instagram allows pagination across the entire feed. Set maxPostsPerUser: 0 to fetch everything, or pick a number.
How fast is it?
A typical 3-post run on one username finishes in ~5 seconds. Larger runs scale linearly with concurrency.
Does it return Instagram Reels and carousels?
Yes - carousels appear as one record per post with each slide nested in children[]. Reels appear as mediaType: "video" with videoUrl populated.
Can I export to CSV / Google Sheets / Excel?
Yes - JSON, CSV, Excel, XML, HTML are all supported, plus direct integrations to Google Sheets, Zapier, Make, Slack, S3.
Will Instagram block this?
Multi-source failover plus rotating residential proxies handle Instagram's rate limits automatically. Recent 30-day success rate is 95%+.
Related Apify actors
- 👤 Instagram Profile Scraper - bios, follower counts, public emails, phone numbers, business info.
- 📷 Instagram Stories & Highlights Scraper - active stories and full highlight reels.
- 🧰 Instagram Full Profile Scraper - profile + posts + stories + highlights in one call.
Support
Found a bug or missing field? Open an issue on the actor page. Reviews are read and replied to.
Privacy
To improve our actors we collect anonymized usage telemetry (run stats and input patterns). No personal account data is collected.