Instagram Posts Scraper Lowcost (0.3$/1K 🤑) avatar

Instagram Posts Scraper Lowcost (0.3$/1K 🤑)

Pricing

from $0.30 / 1,000 posts

Go to Apify Store
Instagram Posts Scraper Lowcost (0.3$/1K 🤑)

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.8

(8)

Developer

Samy

Samy

Maintained by Community

Actor stats

26

Bookmarked

8.4K

Total users

1.3K

Monthly active users

3.8 days

Issues response

3 days ago

Last modified

Share

Instagram Posts Scraper (Low-Cost)

⚡ Fast and cost-efficient Instagram scraper for extracting posts from public profiles. No Instagram account required.

What does Instagram Posts Scraper do?

Instagram Posts Scraper extracts posts from public Instagram profiles: images, videos, carousels, captions, engagement metrics, tagged users and co-authors. It works without an Instagram login.

Why choose this scraper?

  • 🔐 No Instagram login needed - Just enter usernames or profile URLs
  • 💰 Low cost - Lightweight, no browser, small memory footprint
  • 📊 Clean data - Posts, carousels, tagged users, co-authors and engagement metrics in a consistent format
  • 🔄 Automatic pagination - Up to 500 posts per profile
  • 🆕 Incremental scraping - Only fetch posts newer than a given date
  • 🛡️ Built-in reliability - Automatic retries and rate limiting, no tuning required
  • 💾 Resumable - Runs resume where they stopped after a platform migration or a restart

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

  1. Create a free Apify account
  2. Open the Actor in Apify Console
  3. Add Instagram profiles - Enter usernames, @usernames, or full Instagram profile URLs
  4. Configure settings - Set how many posts to fetch per profile
  5. Click "Start" and wait for the scraper to finish
  6. 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
  • Apify plan tier

Cost expectations

Actual charges depend on the Actor's current pricing and your usage; no fixed per-post cost or free-tier capacity is guaranteed. Check the Actor's pricing and your Apify plan before starting a large run.

Input

{
"usernames": ["natgeo", "@nike", "https://www.instagram.com/cristiano/"],
"postsPerProfile": 50,
"newerThan": "2026-01-01T00:00:00Z"
}

Input parameters

FieldTypeRequiredDescription
usernamesArrayYesInstagram usernames, @usernames, or profile URLs. Example: ["natgeo", "@nike", "https://www.instagram.com/cristiano/"]
postsPerProfileIntegerNoExact maximum number of posts exported per profile (1-500). The Actor stops as soon as this limit is reached. Default: 50
newerThanStringNoIncremental 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. Leave it as is: the Actor manages its connections to Instagram itself. To send every request through your own proxies instead, set proxy.proxyUrls ("Own proxies" in the input form).

The former advanced fields (delayBetweenProfiles, delayBetweenRequests, maxRetries, maxConcurrentProfiles) are still accepted so existing integrations keep working, but they have no effect: pacing, retries and concurrency are managed automatically.

Invalid profile entries and duplicates are skipped without stopping valid profiles in the same batch. Profile URLs can include a trailing slash, query parameters, or a fragment. URLs for posts, Reels, Stories, and other non-profile pages are skipped.

Each run writes a RUN_SUMMARY record to its key-value store: the run's status and message, posts exported, profile counts, and for every profile its result (scraped, private_or_empty, not_found, not_scraped, stopped_at_spending_limit) and number of posts.

Incremental scraping behavior

  • newerThan is a pagination cutoff, not a strict dataset filter.
  • Posts from the boundary page can include items older than the cutoff.
  • postsPerProfile is a hard cap. If only part of the final fetched page is needed, the Actor exports only the remaining number of posts.
  • postsPerProfile counts the most recent posts. Posts pinned on the profile are included at their publication date, not at the top: a pinned post is exported only if it is among the most recent posts and newer than newerThan. Pinned posts carry is_pinned: true.

Note: Check the Input tab for the complete list of input fields with descriptions.

Output

The scraper saves posts to the Apify dataset in structured JSON format. Fields are optional and depend on what Instagram returns; profiles that could not be scraped are reported in the log and RUN_SUMMARY, not as dataset rows.

Post data extracted

  • Identifiers: pk, id, code (shortcode for URL)
  • Media files: media_type, image_url, video_url, original_width, original_height
  • Video data: view_count when supplied; see the missing-metadata note below
  • 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
  • Pinned posts: is_pinned

Instagram often omits play_count and video_duration, including for carousel items. Missing values are left empty, never replaced with zero. Locations, tags, co-authors, and other metadata may also be absent.

The dataset's Overview view shows image_url, post_url, user.username, caption.text, engagement, media type, and Unix timestamps. Full JSON exports contain all fields.

Output example

{
"pk": "3284567890123456789",
"id": "3284567890123456789",
"code": "C5xYzAbCdEf",
"taken_at": 1767312000,
"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_url": "https://scontent.cdninstagram.com/example.jpg",
"scraped_username": "natgeo",
"scraped_at": 1791979200,
"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,
"is_pinned": false
}

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

This Actor targets publicly accessible profile posts. Public availability does not itself grant permission to collect or reuse data; legality depends on your use case and applicable rules. The Actor 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

Results can contain personal data even when profiles are public. Collect only what you have a legitimate reason to process; consult legal counsel if you are unsure.

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": 50,
"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

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: 50,
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:

Learn more: Apify Integrations Documentation

FAQ

Does this scraper require an Instagram account?

No. No Instagram login or session is needed.

Can I scrape private accounts?

No. Posts of private profiles are not visible without being logged in. A private profile completes with no posts, like a public profile that has none.

How many posts can I scrape per profile?

You can request an export cap of 1-500 posts per profile. This is an Actor input limit, not a guaranteed Instagram API limit; public visibility, rate limits, or anonymous pagination restrictions may result in fewer posts.

What if I get rate limited?

Nothing to configure: the Actor paces its requests and retries automatically. Profiles that still fail are retried once more at the end of the run.

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?

  1. Check the log and the RUN_SUMMARY record for each profile's result
  2. Verify usernames or profile URLs are correct; a profile that does not exist is reported as profile not found
  3. Resurrect the run to resume where it stopped: posts already exported are not exported or charged again
  4. If the issue persists, contact us through the Actor's Issues tab

You might also like


Need help? Contact Apify Support or check the Apify Documentation.