Instagram Profile & Posts Scraper avatar

Instagram Profile & Posts Scraper

Pricing

from $0.03 / 1,000 item extracteds

Go to Apify Store
Instagram Profile & Posts Scraper

Instagram Profile & Posts Scraper

📸 Scrape public Instagram profiles, recent posts, reels, captions, engagement counts, media URLs, and profile metadata from handles or URLs.

Pricing

from $0.03 / 1,000 item extracteds

Rating

0.0

(0)

Developer

Hanna Nosova

Hanna Nosova

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 hours ago

Last modified

Share

Scrape public Instagram profiles, recent posts, reels, captions, and engagement metrics from public handles or profile URLs.

What does Instagram Profile & Posts Scraper do?

Instagram Profile & Posts Scraper helps you collect public profile metadata and recent public media previews from Instagram profiles. It is designed for teams that need structured exports instead of manual copy and paste.

You can enter handles like nasa or profile URLs like https://www.instagram.com/nasa/. The actor returns profile rows and post rows in a clean dataset.

Who is it for?

  • 📣 Social media marketers monitoring public creator or brand accounts.
  • 🧑‍💼 Brand teams checking public profile positioning and recent campaigns.
  • 📊 Analysts comparing public engagement signals across accounts.
  • 🛡️ Compliance teams archiving public posts for review workflows.
  • 📰 Researchers tracking public media URLs, captions, and timestamps.

Why use this scraper?

Manual Instagram monitoring is slow and inconsistent. This actor gives you repeatable exports with stable field names. You can schedule it, connect it to datasets, or call it from the Apify API.

What data can you extract?

CategoryExample fields
Profile identityhandle, profile URL, full name
Profile metadatabio, avatar URL, external URL
Public countsfollowers, following, posts
Account flagsverified, private
Post identitypost URL, shortcode
Post contentcaption, timestamp, media type
Engagementlikes, comments, views when visible
Mediathumbnail URL, media URL

Pricing

This Actor uses Apify pay-per-event pricing. The prices below come from the current Actor pricing configuration. Apify public plans map to Store discount tiers, so the table shows both the user-facing plan context and the pricing tier name. The final price shown in Apify depends on the user account plan and any custom agreement.

EventWhat is chargedPrice
startOne-time fee charged when a run starts. Covers fixed startup cost (init, proxy warmup, first HTTP setup).$0.005
EventWhat is chargedFree / no discountStarter / BronzeScale / SilverBusiness / GoldCustom / PlatinumCustom / Diamond
itemCharged per public Instagram profile or post item saved to the dataset.$0.0629 / 1,000$0.05469 / 1,000$0.04266 / 1,000$0.03281 / 1,000$0.02188 / 1,000$0.01531 / 1,000

Apify may also charge platform usage for compute, storage, proxies, or data transfer outside this Actor pricing. Check the Actor run and the Apify Pricing tab for the exact cost shown to your account.

Quick start

  1. Open the actor on Apify.
  2. Add Instagram handles such as nasa or natgeo.
  3. Keep maxPostsPerProfile low for your first run.
  4. Start the run.
  5. Export the dataset as JSON, CSV, Excel, or via API.

Input options

Profile URLs or handles

Use this when you already know the usernames. You can include or omit the @ sign.

Instagram profile URLs

Use this when your source list contains full links. The actor extracts the handle from each URL.

Maximum profiles

Controls how many unique profiles are processed. Duplicate handles and URLs are deduplicated.

Include recent posts

When enabled, the actor saves recent public post or reel preview rows returned for the profile.

Include reels/videos

Disable this option if you only want image and carousel-style posts.

Maximum posts per profile

Controls the number of recent post rows saved per profile. Keep this low for smoke tests.

Proxy configuration

Apify Proxy is enabled by default for cloud reliability because Instagram can rate-limit shared datacenter traffic. You can override the proxy configuration if your account requires a specific proxy setup.

Example input

{
"profileUrlsOrHandles": ["nasa", "natgeo"],
"maxProfiles": 2,
"includePosts": true,
"includeReels": true,
"maxPostsPerProfile": 5,
"proxyConfiguration": {
"useApifyProxy": true
}
}

Output example

{
"type": "profile",
"profileUrl": "https://www.instagram.com/nasa/",
"username": "nasa",
"fullName": "NASA",
"biography": "Public profile bio when visible",
"followersCount": 90000000,
"isVerified": true,
"scrapedAt": "2026-07-03T00:00:00.000Z"
}
{
"profileUrl": "https://www.instagram.com/nasa/",
"username": "nasa",
"postUrl": "https://www.instagram.com/p/SHORTCODE/",
"shortCode": "SHORTCODE",
"caption": "Caption text when visible",
"timestamp": "2026-07-03T00:00:00.000Z",
"likesCount": 12345,
"commentsCount": 123,
"type": "image",
"thumbnailUrl": "https://...",
"scrapedAt": "2026-07-03T00:00:00.000Z"
}

Output fields

  • typeprofile for profile rows, post, image, carousel, video, or another visible Instagram source type for media rows.
  • profileUrl — public Instagram profile URL.
  • username — Instagram username.
  • fullName — public display name when visible.
  • biography — public bio text when visible.
  • profilePicUrl — profile picture URL when visible.
  • externalUrl — public external link when visible.
  • followersCount — follower count when visible.
  • followingCount — following count when visible.
  • postsCount — public post count when visible.
  • isVerified — verification flag when visible.
  • isPrivate — private account flag when visible.
  • postUrl — public post URL for post rows.
  • shortCode — Instagram shortcode.
  • caption — caption text when visible.
  • timestamp — post timestamp when visible.
  • likesCount — like count when visible.
  • commentsCount — comment count when visible.
  • videoViewCount — video view/play count when visible.
  • thumbnailUrl — public thumbnail URL when visible.
  • imageUrls — public image URLs when visible.
  • scrapedAt — time the row was saved.

Tips for better results

  • Start with 1-2 handles before running a larger list.
  • Use public profiles only.
  • Avoid private or login-only accounts.
  • Keep post limits modest for scheduled monitoring.
  • Export CSV for spreadsheets and JSON for automation.

Scheduling workflows

Run the actor daily or weekly to monitor public account changes. Store each run in Apify datasets. Connect the dataset to downstream reporting, alerting, or archival tools.

Integrations

Google Sheets

Export dataset results to CSV or connect through the Apify API. This is useful for campaign tracking sheets.

BI dashboards

Load JSON or CSV exports into dashboards for profile and engagement trend reports.

Compliance review

Archive public captions, URLs, and timestamps for later review.

CRM enrichment

Add public profile URLs, bios, and follower counts to creator or partner records.

API usage

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/instagram-profile-posts-scraper').call({
profileUrlsOrHandles: ['nasa'],
maxProfiles: 1,
maxPostsPerProfile: 5
});
console.log(run.defaultDatasetId);

Python

from apify_client import ApifyClient
import os
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/instagram-profile-posts-scraper').call(run_input={
'profileUrlsOrHandles': ['nasa'],
'maxProfiles': 1,
'maxPostsPerProfile': 5,
})
print(run['defaultDatasetId'])

cURL

curl -X POST "https://api.apify.com/v2/acts/fetch_cat~instagram-profile-posts-scraper/runs?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"profileUrlsOrHandles":["nasa"],"maxProfiles":1,"maxPostsPerProfile":5}'

MCP usage

Use the Apify MCP server with tools scoped to this actor:

https://mcp.apify.com/?tools=fetch_cat/instagram-profile-posts-scraper

Add it to Claude Code:

$claude mcp add apify-instagram-profile-posts https://mcp.apify.com/?tools=fetch_cat/instagram-profile-posts-scraper

Claude Desktop JSON configuration:

{
"mcpServers": {
"apify-instagram-profile-posts": {
"url": "https://mcp.apify.com/?tools=fetch_cat/instagram-profile-posts-scraper"
}
}
}

Example prompts:

  • "Run the Instagram Profile & Posts Scraper for nasa and summarize the latest captions."
  • "Export recent public post URLs for these brand handles."
  • "Compare public follower counts for this creator shortlist."

Data quality notes

Instagram may hide some fields for some accounts, regions, or request contexts. When a public field is not visible, the actor leaves it empty instead of guessing. Counts can change frequently and should be treated as point-in-time values.

Limitations

  • Public profiles only.
  • No private posts.
  • No login-only stories or highlights.
  • No direct messages.
  • Recent post previews depend on what Instagram returns publicly.

Troubleshooting

Why did a handle return no rows?

The handle may be invalid, private, blocked, renamed, unavailable in your region, or temporarily unavailable from Instagram. Try the public profile URL in a browser and lower your run limits.

Why are some engagement counts missing?

Instagram does not expose every metric for every media item in every public response. The actor saves metrics only when they are visible.

Why should I keep low limits first?

Low limits make it easier to verify output and avoid unnecessary proxy or compute usage. Increase limits once your input list is clean.

Legality

This actor is intended for public data collection. Use it responsibly and respect Instagram terms, privacy rights, and applicable laws. Do not use it to collect private, login-only, sensitive, or personal data in a way that violates rights or policies.

FAQ

Can I scrape private accounts?

No. This actor is public-only.

Do I need cookies?

No. V1 is designed without cookies or user login.

Can I schedule it?

Yes. Use Apify schedules for recurring monitoring.

Can I export to Excel?

Yes. Apify datasets support Excel, CSV, JSON, XML, and RSS exports.

Does it scrape comments?

No. It returns comment counts when visible, not full comment threads.

Does it download media files?

No. It returns media and thumbnail URLs when visible.

Can I use URLs instead of handles?

Yes. Add public Instagram profile URLs to profileUrlsOrHandles.

What happens with duplicate inputs?

Duplicate handles and URLs are deduplicated before scraping.

Is this an official Instagram API?

No. This is an Apify actor for public web data extraction.

How should I start?

Run one public handle with five posts, inspect the dataset, then scale up.