Instagram Profile Scraper avatar

Instagram Profile Scraper

Pricing

from $3.49 / 1,000 results

Go to Apify Store
Instagram Profile Scraper

Instagram Profile Scraper

Scrape public Instagram profiles and optional posts with exact audience metrics, engagement, media, canonical URLs, and typed exports.

Pricing

from $3.49 / 1,000 results

Rating

0.0

(0)

Developer

Happy B

Happy B

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

What is Instagram Profile Scraper?

Instagram Profile Scraper turns public Instagram profiles into clean, typed data for creator research, competitive analysis, monitoring, and reporting. Submit usernames, @handles, or profile URLs to collect stable profile IDs, exact audience counts, bios, account classification, canonical URLs, and optional public posts.

Every successful profile is saved as a profile row. When Include posts is enabled, each public post is saved as a separate post row with engagement metrics, media URLs, publication time, and embedded profile context. The Profiles and Posts dataset views make the same records easy to use in Apify Console, API responses, JSON, and CSV.

What Instagram data can you collect?

Profile rows include:

  • Stable Instagram ID and username
  • Full name, biography, category, and structured bio links
  • Exact follower, following, and media counts
  • Verified, private, and business flags
  • Account type code and readable account type
  • Standard and HD profile-picture URLs
  • Canonical profile URL and public external URL
  • Input position, dataset position, and scrape timestamp

Optional post rows include:

  • Stable post ID, shortcode, and canonical post URL
  • Caption and publication time in Unix and ISO 8601 formats
  • Likes, comments, plays, and views when available
  • Photo or video URL, dimensions, and media type
  • Typed carousel slides with their positions, media URLs, and dimensions
  • Author identity and the parent profile’s public context
  • Input position, post position, dataset position, and scrape timestamp

Numeric zero is kept as 0. A value that was not available is returned as null, so missing information is never confused with an observed zero.

Use cases

  • Influencer research: compare exact follower counts, account categories, verification, bios, and public posting activity before shortlisting creators.
  • Competitive monitoring: schedule repeat runs and compare audience size, profile positioning, and content engagement over time.
  • Creator analytics: calculate post-level engagement from likes, comments, plays, and views without parsing abbreviated numbers.
  • Lead enrichment: add public profile URLs, biographies, websites, and structured bio links to an existing CRM or research table.
  • Content audits: export a profile’s public photos, videos, and carousels for format and performance analysis.
  • Data pipelines: load stable IDs, canonical URLs, typed values, and timestamps into a warehouse without cleaning undocumented fields.

Input

ParameterTypeDefaultDescription
profileUrlsstring[]requiredOne to 50 Instagram usernames, @handles, or profile URLs. Case-insensitive duplicates are removed.
includePostsbooleanfalseSave public posts as additional dataset rows.
maxPostsPerProfileinteger50Maximum unique post rows per profile when posts are enabled. Range: 1–5,000.

Profile URLs must point directly to an Instagram profile. Post, Reel, Story, and hashtag URLs are not profile inputs.

Sample input

{
"profileUrls": [
"https://www.instagram.com/nasa/",
"@natgeo"
],
"includePosts": true,
"maxPostsPerProfile": 25
}

Output

All result rows use a closed, documented schema. Operational request fields, authentication values, and pagination state are not part of the dataset.

Schema-valid profile row

{
"recordType": "profile",
"position": 1,
"inputPosition": 1,
"pk": "528817151",
"username": "nasa",
"fullName": "NASA",
"biography": "Exploring Earth and the universe.",
"profilePicUrl": "https://images.example/nasa-profile.jpg",
"hdProfilePicUrl": "https://images.example/nasa-profile-hd.jpg",
"profileUrl": "https://www.instagram.com/nasa/",
"externalUrl": "https://www.nasa.gov/",
"followerCount": 104300000,
"followingCount": 91,
"mediaCount": 4849,
"isVerified": true,
"isPrivate": false,
"isBusiness": true,
"category": "Government organization",
"accountType": 2,
"accountTypeName": "business",
"bioLinks": [
{
"title": "NASA",
"url": "https://www.nasa.gov/",
"linkType": "external"
}
],
"scrapeTimestamp": "2026-08-30T12:00:00.000Z"
}

Schema-valid post row

{
"recordType": "post",
"position": 2,
"inputPosition": 1,
"postPosition": 1,
"pk": "3712345678901234567",
"code": "DNasaExample",
"postUrl": "https://www.instagram.com/p/DNasaExample/",
"mediaType": 8,
"mediaTypeName": "carousel",
"caption": "A new view of our home planet.",
"takenAt": 1788091200,
"takenAtIso": "2026-08-30T12:00:00.000Z",
"likeCount": 245000,
"commentCount": 1850,
"playCount": 0,
"viewCount": 0,
"imageUrl": "https://images.example/nasa-post.jpg",
"videoUrl": null,
"imageWidth": 1080,
"imageHeight": 1080,
"carouselMedia": [
{
"position": 1,
"imageUrl": "https://images.example/nasa-slide-1.jpg",
"videoUrl": null,
"mediaType": 1,
"mediaTypeName": "photo",
"width": 1080,
"height": 1080
}
],
"authorPk": "528817151",
"authorUsername": "nasa",
"profilePk": "528817151",
"profileUsername": "nasa",
"profileFullName": "NASA",
"profileBiography": "Exploring Earth and the universe.",
"profilePicUrl": "https://images.example/nasa-profile.jpg",
"profileUrl": "https://www.instagram.com/nasa/",
"profileExternalUrl": "https://www.nasa.gov/",
"profileFollowerCount": 104300000,
"profileFollowingCount": 91,
"profileMediaCount": 4849,
"profileIsVerified": true,
"profileIsPrivate": false,
"profileIsBusiness": true,
"profileCategory": "Government organization",
"profileAccountType": 2,
"profileAccountTypeName": "business",
"scrapeTimestamp": "2026-08-30T12:00:00.000Z"
}

Download the default dataset as JSON, CSV, Excel, XML, or HTML, or read it through the Apify API. The run key-value store also contains METADATA, which reports COMPLETE, PARTIAL, or FAILED, delivered row totals, spending-limit state, and customer-safe error summaries.

Pricing

You pay once when a run starts and once for each successful row delivered to the default dataset. Profile and post rows have the same result price. Unavailable profiles, rejected rows, duplicates, and results that are not stored do not create a result charge.

Apify tierPer resultPer 1,000 results
Free$0.00349$3.49
Bronze$0.00349$3.49
Silver$0.00349$3.49
Gold$0.00349$3.49
Platinum$0.00349$3.49
Diamond$0.00349$3.49

The Actor Start event is $0.001 per run. There is no minimum total charge and no premium add-on event.

ExampleApproximate event cost
10 profiles, no posts$0.0409
1 profile and 50 posts$0.2045
10 profiles and 50 posts each$2.0359

Set maxPostsPerProfile and Apify’s maximum total charge to keep exploratory runs bounded.

Run status and reliability

The Actor saves progress between pages and validates every row before storage. It removes duplicate profiles and overlapping posts deterministically. If a run is interrupted, migrated, or resurrected, it reconciles already stored rows before continuing so the same result is not stored or charged twice.

METADATA.status means:

  • COMPLETE: every requested profile reached a terminal result and no spending boundary stopped the run.
  • PARTIAL: some data was delivered, but a spending boundary or retryable failure prevented full delivery.
  • FAILED: no requested data was delivered.

An empty post feed does not erase the profile row. A run never reports success merely because the process exited normally.

API example

Start a run and return its dataset items with Apify’s synchronous endpoint:

curl -X POST \
"https://api.apify.com/v2/acts/happy_b~instagram-profile-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"profileUrls": ["nasa", "https://www.instagram.com/natgeo/"],
"includePosts": false,
"maxPostsPerProfile": 50
}'

For longer runs, start the Actor asynchronously and retrieve items from the run’s default dataset. See the Apify API documentation for JavaScript, Python, and HTTP clients.

Integrations

Use Apify integrations to send results to Google Drive, Make, Zapier, Slack, webhooks, or your own data pipeline. Stable string IDs and canonical URLs are suitable for database keys; scrapeTimestamp makes repeated runs suitable for change tracking.

Limitations

  • Only information available from public Instagram surfaces at scrape time can be returned.
  • Private or unavailable accounts may expose limited profile information and do not expose private posts.
  • Instagram can omit engagement or media values; unavailable optional values are null.
  • Media URLs can expire. Download permitted media promptly if your workflow requires durable files.
  • Posts are returned in the order made available during the run; the requested maximum is a ceiling, not a guarantee.
  • Stories, comments, follower lists, following lists, and private analytics are not supported.

Responsible use

Public profile data can still be personal data. Use the Actor only for a lawful purpose, minimize what you retain, honor deletion and access obligations, and comply with applicable privacy laws and Instagram’s terms.

Use Instagram Search Scraper to discover public users, hashtags, and posts by keyword, then send discovered usernames here for complete profile rows and optional post history.

Support

If a run behaves unexpectedly, open an issue from the Actor page and include the run ID, a secret-free input example, the expected result, and the observed METADATA.status.