Instagram Posts Scraper Lowcost (0.3$/1K π€)
Pricing
from $0.30 / 1,000 posts
Instagram Posts Scraper Lowcost (0.3$/1K π€)
Cost-optimized Instagram scraper for public profiles. Extract posts, captions, engagement metrics, coauthors, and media without authentication. HTTP-only (no browser), 10x cheaper than alternatives. Supports batch scraping with residential proxies and smart rate limiting.
Pricing
from $0.30 / 1,000 posts
Rating
4.6
(8)
Developer
Samy
Maintained by CommunityActor stats
21
Bookmarked
5.3K
Total users
688
Monthly active users
4.4 days
Issues response
4 days ago
Last modified
Categories
Share
Instagram Posts Scraper (Low-Cost)
β‘ Ultra-fast and cost-efficient Instagram scraper for extracting posts from public profiles. No Instagram account or browser required - pure HTTP API access.
Recently Updated (v1.5): Profile lookup and pagination now use one efficient username feed route, usernames and Instagram profile URLs are accepted, Apify Proxy uses automatic selection by default, output limits are exact, and profile concurrency is capped at 50.
What does Instagram Posts Scraper do?
Instagram Posts Scraper extracts comprehensive post data from public Instagram profiles using Instagram's native mobile APIs. It retrieves images, videos, carousels, captions, engagement metrics, tagged users, and complete user information - all without requiring any Instagram authentication.
Why choose this scraper?
- β‘ Lightning fast - Powered by Bun runtime (3x faster than Node.js)
- π° Ultra cost-efficient - 512MB memory vs 4-8GB for browser scrapers
- π No session needed - Works without Instagram login or cookies
- π Complete data extraction - Posts, carousels, tagged users, co-authors, engagement metrics
- π Automatic pagination - Fetch 1-500 posts per profile with smart pagination
- π Incremental cutoff - Stop paginating once fetched pages are older than your
newerThanboundary - π‘οΈ Smart rate limiting - Adaptive delays and exponential backoff to avoid blocks
- π Apify Proxy - Automatic proxy selection with session pooling
- πΎ State persistence - Resume scraping after interruptions or migrations
Why scrape Instagram posts?
Instagram post data extraction unlocks powerful business use cases:
π Marketing & Analytics
- Competitor analysis - Track what content performs best for rival brands
- Content strategy - Identify winning post types, captions, and hashtags
- Engagement benchmarking - Compare your performance against industry standards
- Trend forecasting - Spot emerging visual trends before competitors
π€ Influencer Marketing
- Influencer research - Discover creators with authentic engagement for partnerships
- Campaign tracking - Monitor branded content and collaboration performance
- Audience insights - Analyze what resonates with target demographics
π― Business Intelligence
- Brand monitoring - Track mentions, tags, and brand sentiment
- Lead generation - Find potential customers engaging with relevant content
- Market research - Analyze visual trends and consumer preferences in your industry
- UGC collection - Gather user-generated content for marketing campaigns
How to scrape Instagram profiles
- Create a free Apify account
- Open the Actor in Apify Console
- Add Instagram profiles - Enter usernames, @usernames, or full Instagram profile URLs
- Configure settings - Set how many posts to fetch per profile
- Click "Start" and wait for the scraper to finish
- Download your data - Export as JSON, CSV, Excel, or HTML
How much does it cost to scrape Instagram?
This scraper is engineered for maximum cost efficiency using HTTP-only requests instead of browser automation.
π° Pricing factors
- Number of profiles you scrape
- Posts per profile you extract (each ~12 posts = 1 API request)
- Proxy configuration and transferred data
- Apify plan tier
β‘ Cost advantages over alternatives
| Feature | This Actor | Browser-based Scrapers |
|---|---|---|
| Memory footprint | 512MB | 4-8GB |
| CPU usage | Minimal | High (rendering) |
| Proxy efficiency | Excellent | Poor (TLS handshakes) |
| Requests per run | Optimized | 10x more (assets) |
| Cost per 1000 posts | ~$0.10 | ~$2-5 |
π Free tier
With the Apify Free plan, you get monthly compute credits to scrape thousands of Instagram posts at no cost. Perfect for testing and small-scale projects.
Estimated free tier capacity: ~5,000-10,000 posts/month depending on configuration.
Owner-managed proxy policy
If you publish this Actor and provide your own external proxy, free users still stay on Apify Proxy, while paying users start on your external proxy and fall back to Apify if the external path keeps failing:
EXTERNAL_PROXY_URL: External proxy used for paying usersFREE_USER_APIFY_PROXY_GROUPS=RESIDENTIAL: Optional comma-separated override for free-tier users. Leave unset to use Apify's automatic proxy selection.FREE_USER_APIFY_PROXY_COUNTRY=US: Optional country override for the free-tier Apify proxy branchDECODO_FAILOVER_WEBHOOK_URL=https://<your-worker>.workers.dev/?token=<token>: Optional webhook called once when the proxy switches to ApifyRUN_TELEMETRY_WEBHOOK_URL=https://<your-worker>.workers.dev/telemetry/run: Optional run-end telemetry endpointRUN_TELEMETRY_TOKEN=<token>: Optional bearer token for the telemetry endpoint
The Actor detects free vs paying users from APIFY_USER_IS_PAYING at runtime. Free-tier runs always use Apify Proxy, and paying-tier runs start on the external proxy before switching to Apify Proxy once retries on the external path are exhausted.
Input
{"usernames": ["natgeo", "@nike", "https://www.instagram.com/cristiano/"],"postsPerProfile": 24,"newerThan": "2026-01-01T00:00:00Z","proxy": {"useApifyProxy": true},"delayBetweenProfiles": 0,"delayBetweenRequests": 0,"maxRetries": 2}
Input parameters
| Field | Type | Required | Description |
|---|---|---|---|
usernames | Array | Yes | Instagram usernames, @usernames, or profile URLs. Example: ["natgeo", "@nike", "https://www.instagram.com/cristiano/"] |
postsPerProfile | Integer | No | Exact maximum number of posts exported per profile (1-500). The Actor stops as soon as this limit is reached. Default: 24 |
newerThan | String | No | Incremental pagination cutoff. Accepts ISO date/time, YYYY-MM-DD, Unix seconds, or Unix milliseconds. This is a pagination boundary, not a strict per-post filter. |
proxy | Object | No | Apify Proxy configuration. Automatic proxy selection is enabled by default. |
delayBetweenProfiles | Integer | No | Delay in milliseconds between profile starts. Default: 0 |
delayBetweenRequests | Integer | No | Delay in milliseconds between pagination requests. Default: 0 |
maxRetries | Integer | No | Maximum retry attempts for failed requests. Default: 2 |
Profile concurrency is fixed internally at 50 and is not configurable from Actor input.
Profile inputs are normalized to Instagram usernames before scraping. Profile URLs can include a trailing slash, query parameters, or a fragment. URLs for posts, Reels, Stories, and other non-profile pages are rejected.
Incremental scraping behavior
newerThanis a pagination cutoff, not a strict dataset filter.- Posts from the boundary page can include items older than the cutoff.
postsPerProfileis a hard cap. If only part of the final fetched page is needed, the Actor exports only the remaining number of posts.
Note: Check the Input tab for the complete list of input fields with descriptions.
Output
The scraper saves all extracted data to the Apify dataset in structured JSON format. Each post includes:
Post data extracted
- Identifiers:
pk,id,code(shortcode for URL) - Media files:
media_type,image_versions2,video_versions,original_width,original_height - Video data:
video_duration,view_count,play_count - Content:
caption.text,caption.pk - Engagement:
like_count,comment_count - Metadata:
taken_at(timestamp),product_type,location - Author info:
user.pk,user.username,user.full_name,user.is_verified,user.profile_pic_url - Carousel posts:
carousel_media[](for multi-image/video posts with individual media items) - Tagged users:
usertags.in[](tagged users with X/Y positions) - Collaborations:
coauthor_producers[],invited_coauthor_producers[] - Scraper metadata:
scraped_username,scraped_at,post_url - Incremental metadata:
newer_than_cutoff,newer_than_cutoff_iso,is_newer_than_cutoff
Output example
{"pk": "3284567890123456789","id": "3284567890123456789","code": "C5xYzAbCdEf","taken_at": 1704067200,"media_type": 1,"product_type": "feed","caption": {"pk": "18012345678901234","text": "Exploring the beauty of nature π² #wildlife #photography"},"like_count": 45892,"comment_count": 1247,"user": {"pk": "25025320","username": "natgeo","full_name": "National Geographic","is_verified": true,"profile_pic_url": "https://scontent.cdninstagram.com/..."},"image_versions2": {"candidates": [{"width": 1080,"height": 1350,"url": "https://scontent.cdninstagram.com/..."}]},"scraped_username": "natgeo","scraped_at": 1704067200,"post_url": "https://www.instagram.com/p/C5xYzAbCdEf/","newer_than_cutoff": 1767225600,"newer_than_cutoff_iso": "2026-01-01T00:00:00.000Z","is_newer_than_cutoff": true}
Export formats
Download your data in multiple formats:
- JSON - Structured data for APIs and databases
- CSV - For Excel and data analysis tools
- Excel - Ready-to-use spreadsheets
- HTML - Human-readable tables
- XML - Legacy system integration
Is it legal to scrape Instagram?
Yes, when done ethically. This scraper only accesses publicly available data that Instagram exposes for SEO, link previews, and website embeds. It does not:
- β Extract private user data (emails, phone numbers, private posts)
- β Bypass login walls or authentication
- β Access content from private accounts
- β Store personal data unnecessarily
However, you should:
- β Review Instagram's Terms of Service
- β Respect rate limits and implement delays
- β Comply with GDPR if scraping EU users
- β Have a legitimate purpose for data collection
- β Not use data for spam, harassment, or unauthorized contact
Our scrapers are ethical and only extract what users have chosen to share publicly. If you're unsure about your use case, consult legal counsel.
Learn more: Is web scraping legal? (Apify Blog)
Using Instagram Posts Scraper with the Apify API
The Apify API gives you programmatic access to the Apify platform. Run any Actor, manage runs, access datasets, and more from your applications.
Run the Actor via API:
curl -X POST https://api.apify.com/v2/acts/YOUR_USERNAME~instagram-posts-scraper-lowcost/runs \-H "Authorization: Bearer YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"usernames": ["natgeo", "https://www.instagram.com/nike/"],"postsPerProfile": 24,"newerThan": "2026-01-01T00:00:00Z"}'
Fetch results:
curl https://api.apify.com/v2/datasets/YOUR_DATASET_ID/items \-H "Authorization: Bearer YOUR_API_TOKEN"
Client libraries
- Node.js:
apify-clientNPM package - Python:
apify-clientPyPI package
Example (Node.js):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('YOUR_USERNAME/instagram-posts-scraper-lowcost').call({usernames: ['natgeo', 'https://www.instagram.com/nike/'],postsPerProfile: 24,newerThan: '2026-01-01T00:00:00Z',});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Resources:
Integrations
Connect Instagram Posts Scraper to your favorite tools:
- Make (Integromat) - No-code automation workflows
- Zapier - Connect to 5,000+ apps
- Webhooks - Get notified when runs finish
- Slack - Send scraped data to Slack channels
- Google Sheets - Export directly to spreadsheets
- Airbyte - Data pipeline integration
- Keboola - ETL and data warehousing
Learn more: Apify Integrations Documentation
Advanced configuration
Proxy settings
The default and tested configuration uses Apify automatic proxy selection:
{"proxy": {"useApifyProxy": true}}
Datacenter proxies (cheaper but higher block rate):
{"proxy": {"apifyProxyGroups": ["SHADER"]}}
Custom proxies:
{"proxy": {"useApifyProxy": false,"proxyUrls": ["http://proxy1.com:8080", "http://proxy2.com:8080"]}}
Rate limiting
Adjust delays to balance speed vs reliability:
{"delayBetweenProfiles": 2000,"delayBetweenRequests": 1000,"maxRetries": 5}
- Lower delays = Faster scraping, higher block risk
- Higher delays = Slower but more reliable
Concurrency
Profile concurrency is fixed internally at 50. It is not exposed as a user-configurable input.
FAQ
Does this scraper require an Instagram account?
No. This scraper accesses Instagram's public APIs that don't require authentication. It works without any Instagram login or session cookies.
Can I scrape private accounts?
No. Private Instagram profiles are not accessible without authentication. The scraper will return an error for private accounts.
How many posts can I scrape per profile?
You can scrape 1-500 posts per profile. Instagram's API pagination has practical limits beyond this range.
What if I get rate limited?
Increase the delayBetweenRequests and delayBetweenProfiles parameters. Keep Apify automatic proxy selection enabled unless you have tested a specific proxy group on your plan.
Can I scrape Stories or Highlights?
No. Stories and Highlights require authentication. This scraper only accesses public feed posts.
How do I scrape comments?
This Actor focuses on posts only. For comment scraping, check out other Apify Instagram scrapers with comment extraction features.
What data format is supported?
Data is saved to Apify datasets and can be exported as:
- JSON (for APIs)
- CSV (for Excel/analysis)
- Excel (.xlsx)
- HTML (readable tables)
- XML (legacy systems)
Can I schedule recurring scraping?
Yes! Use Apify Schedules to run the scraper automatically (hourly, daily, weekly, etc.).
The scraper failed. What do I do?
- Check the log for error messages
- Verify usernames or profile URLs are correct and profiles are public
- Increase delays if you see rate limit errors
- Keep Apify automatic proxy selection enabled unless you have tested another proxy configuration
- If the issue persists, open an Issue on GitHub
You might also like
- Instagram Profile Scraper - Official Apify Instagram scraper with more features
- Instagram Hashtag Scraper - Scrape posts by hashtag
- Twitter Scraper - Extract tweets and profiles
- TikTok Scraper - Scrape TikTok videos and profiles
- YouTube Scraper - Extract YouTube video data
Need help? Contact Apify Support or check the Apify Documentation.