# Instagram Profile Scraper: Bio, Followers, Reels (`deepmine/instagram-profile-scraper`) Actor

Instagram profile scraper: paste usernames or profile URLs and get one row per profile with bio, links, followers, following, posts, engagement rate, category, verified and business flags, story status, latest posts and reels with their views, and the HD picture. No login, no cookies.

- **URL**: https://apify.com/deepmine/instagram-profile-scraper.md
- **Developed by:** [DeepMine](https://apify.com/deepmine) (community)
- **Categories:** Social media, Lead generation
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.69 / 1,000 profiles

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Instagram Profile Scraper: Bio, Followers, Reels

Instagram profile scraper: paste Instagram usernames or profile URLs and get one row per profile with its profile details: bio, website and bio links, category, followers count, following and posts counts, engagement rate, verified, private and business flags, story status, related profiles, its latest 12 posts and its latest reels with their views. No login.

| 🏷️ Username | 👤 Name | 🏢 Category | 👥 Followers | 📸 Posts | 🎬 Reel Views | 🔗 Related |
|---|---|---|---|---|---|---|
| nasa | NASA | – | 104,315,461 | 4,962 | 3,368,272 | 50 |
| humansofny | Humans of New York | – | 12,648,915 | 5,876 | 1,212,292 | 16 |
| levainbakery | Levain Bakery | Bakery | 674,141 | 3,430 | 40,754 | 28 |

<sub>Collected 2026-10-12 with the prefilled input (run jXGTVoAm7VNGCueWH, build 0.8.8). Reel Views = median views of the profile's latest 12 reels.</sub>

**$0.99 per 1,000 profiles** on the Starter plan ($1.15 Free, $0.89 Scale, $0.69 Business). The prefilled run (5 profiles) costs about $0.005 ($0.006 on Free). Latest posts, latest reels with views, related profiles and engagement stats are all included. No start fee, no minimum.

### What you get

- **The profile**: name, full bio (and a 50-character snippet), website and every bio link with its title, category, account type (personal, creator, business), verified, private, business and professional flags, pronouns, Threads handle, linked Facebook page, HD profile picture, user id and Facebook id.
- **Exact counts**: followers count, following and posts, plus average likes and comments of the latest posts, engagement rate and the last post's date.
- **Latest posts**: the latest 12 (pinned ones included), in the shape of Apify's Instagram Profile Scraper: caption, hashtags, mentions, likes, comments, reel plays, video link, time, image and carousel pictures, size, alt text, location, tagged users, coauthors, sponsors, paid partnership and music.
- **Latest reels with views** (up to 12): views, likes, comments and date per reel, plus the median and average reel views and views over followers.
- **Related profiles** (up to 50): the accounts Instagram suggests with the profile, in Apify's shape.
- **Story and address**: whether a story is up right now and when it went up, and the business address when the profile shows one.
- **One row per profile**, charged once even if you list it twice. Rows land in the dataset as each profile is read; `rank` keeps your list's order (sort by it to get your order back). Unknown and age-restricted profiles are listed in the run summary and never charged.
- **Drop-in for Apify's Instagram Profile Scraper input**: the same `usernames` field takes the same values (names or URLs), so a saved input runs unchanged; its paid `includeAboutSection` add-on is not offered and is ignored. Every field its profile rows carry has a column here, except `isRestrictedProfile` and `restrictionReason` (age-restricted profiles are listed in the run summary, never delivered or charged) and its paid `about` add-on. Where both have a field under the same name, it has the same shape (`latestPosts`, `latestIgtvVideos`, `relatedProfiles` and `businessAddress` items carry Apify's keys; the `firstComment` and `latestComments` of its IGTV items, always empty there, are left out). Names differ where ours follow camelCase booleans: `private` is `isPrivate`, `verified` is `isVerified`, `url` is `profileUrl`, `externalUrls` is `bioLinks`, `externalUrlShimmed` is `externalUrlLinkshimmed`, `facebookPage` is `linkedFacebookPage`, `threadsNetProfile` is `isActiveOnThreads`.
- **No login, no cookies, no account of yours involved.** The Actor reads only what Instagram shows any visitor.

**What every row has, and what is best-effort.** Every public profile's row has the profile, the exact counts, the latest 12 posts, the latest reels with views, the story status and the related profiles (for profiles Instagram suggests any for). In our two 80-profile Apify test runs on 2026-10-12, 79 of 80 rows had 12 posts (the other 1 has fewer than 12 posts in all) and 71 of 80 had related profiles (Instagram suggests no one for the other 9, in its app record too where that answered). The related profiles are read on datacenter IPs only: if Instagram refuses that read on every IP tried, the row still goes out, with the app record's related profiles where it answered, else none. Six fields come only from Instagram's app record, which Instagram answers for some profiles and IPs and not others: `highlightReelCount`, `igtvVideoCount`, `hasChannel`, `joinedRecently`, `latestIgtvVideos` (the latest IGTV videos) and the posts' `videoViewCount`. They are null when it doesn't answer: 3-16 of 80 profiles had them in our runs, depending on how hard Instagram was throttling Apify's datacenter IPs. Instagram answers the record for natgeo and levainbakery with its own error, and in a test run on 2026-10-11 Apify's Instagram Profile Scraper returned none of those fields for them either.

Typical uses: tracking competitors' or creators' follower and posting numbers, vetting influencers before outreach, enriching a CRM list of Instagram handles, and monitoring brand accounts on a schedule.

### Input

```json
{
  "usernames": ["nasa", "@humansofny", "https://www.instagram.com/levainbakery/"],
  "includeLatestPosts": true
}
```

- **📇 Instagram profiles**: usernames, @usernames or profile URLs, one per line (up to 1,000 per run).
- **🖼️ Include latest posts**: on by default, included in the price. Off = smaller rows.
- **🎬 Include latest reels and views**: on by default, included in the price.
- **Advanced**: Max profiles (caps the run's cost), Include engagement stats (on), Proxy.

Need emails and phones from the profiles' own websites and link-in-bio pages? That's the [Instagram Email Scraper](https://apify.com/deepmine/instagram-email-scraper). Need lookalike accounts? [Instagram Related Profiles](https://apify.com/deepmine/instagram-related-profiles).

### Output

One row per profile. The dataset's **🪪 Profiles** view shows the bio, website, category, followers count, following, posts, engagement and reel views; **🔎 Details**, **📈 Stats**, **🎬 Reels** and **🗂️ Record** show the rest. The run's OUTPUT record (🧾 Run summary) lists each input's status (found, not found, age-restricted).

#### Output fields

- `profilePicUrl`: profile picture (150x150). Instagram signs picture links; they stop working after a few days.
- `fullName`: display name.
- `biography`: full bio.
- `biographySnippet`: first 50 characters of the bio.
- `username`: the handle, without @.
- `profileUrl`: https://www.instagram.com/<username>/.
- `businessCategoryName`: the category the profile shows (Digital creator, Athlete, Nonprofit organization...); null when it hides it (most creators do: about a third of rows in our runs of the prefilled input have one).
- `externalUrl`: the profile's website (its first bio link).
- `contactEmail`: an email address written in the bio or name, when there is one (about half of the rows in our runs of the prefilled input).
- `contactPhone`: a phone number written in the bio or name, or a WhatsApp number from the bio links, when there is one. Rare for creators.
- `bioLinks`: every link in the bio, as `{url, title, linkType, lynxUrl, isPinned, imageUrl, linkId, mediaType, mediaAccentColorHex, creationSource}`.
- `isVerified`: has the blue check.
- `isPrivate`: private account.
- `isBusinessAccount`: a business account (account type business). Instagram sends its own business flag as false to visitors who aren't logged in, so the Actor sets it from the account type; the Business account filter uses the same rule.
- `isProfessionalAccount`: a business or creator account.
- `accountType`: personal, business or creator.
- `followersCount`: exact follower count.
- `followsCount`: accounts it follows.
- `postsCount`: exact number of posts.
- `hasReels`: the profile has reels (Instagram doesn't show visitors a reel count).
- `avgLikes`: average likes on its latest posts (up to 6; posts that hide likes are left out).
- `avgComments`: average comments on its latest posts.
- `engagementRate`: (average likes + average comments) / followers, in percent (1.09 = 1.09%).
- `lastPostAt`: when its newest post was published (UTC).
- `reelsMedianViews`: median views of its latest reels (up to 12, pinned ones included), as the reels tab shows them. These are Instagram's play counts, so they run higher than the older `videoViewCount` other Actors return (2.6 to 7 times higher on the same 8 reels in our check).
- `reelsAvgViews`: average views of those reels.
- `reelsAvgLikes`: average likes on those reels (reels that hide likes left out).
- `reelsAvgComments`: average comments on those reels.
- `reelsViewsToFollowers`: median reel views over followers, in percent.
- `lastReelAt`: when the newest of those reels was posted (UTC; from the reel's id, accurate to about a minute).
- `highlightReelCount`: the number of story highlights on the profile, when Instagram's app record answers.
- `hasPublicStory`: a story is up right now (its newest story went up in the last 24 hours).
- `igtvVideoCount`: its IGTV (long video) count, when Instagram's app record answers.
- `hasChannel`: it runs a broadcast channel, when Instagram's app record answers.
- `joinedRecently`: Instagram marks the account as new, when its app record answers.
- `latestPosts`: with **🖼️ Include latest posts** on (the default): its latest 12 posts (pinned ones included; fewer when the profile has fewer, none for private profiles), in the shape of Apify's Instagram Profile Scraper: each with id, type (Image, Video, Sidecar), shortCode, url, caption, hashtags, mentions, likesCount, commentsCount, videoViewCount, videoPlayCount, timestamp, displayUrl, images (the carousel's pictures), videoUrl, dimensionsWidth, dimensionsHeight (the original size), alt, productType, isPinned, isCommentsDisabled, paidPartnership, sponsors, coauthorProducers, coauthors, taggedUsers, ownerUsername, ownerId, locationName, locationId, musicInfo, childPostsCount and childPosts. videoPlayCount is a reel's plays (from the reels tab, for the reels it shows); videoViewCount is filled only when Instagram's app record answers.
- `latestIgtvVideos`: with **🖼️ Include latest posts** on (the default): its latest IGTV (long) videos (up to 12), each with the latestPosts keys plus title, videoDuration (seconds) and commentsDisabled, when Instagram's app record answers.
- `latestReels`: its latest reels (up to 12, pinned ones included), each with shortCode, url, playCount (views), likeCount, commentCount, postedAt and isPinned.
- `relatedProfiles`: the profiles Instagram suggests with this one (up to 50), each as `{id, full_name, is_private, is_verified, profile_pic_url, username}` (Apify's shape). None for private profiles and for big brands Instagram suggests nothing for.
- `bioMentions`: usernames the bio links to (@sweat...).
- `bioHashtags`: hashtags the bio links to.
- `pronouns`: pronouns the profile shows.
- `threadsUsername`: Threads handle, when the profile shows its Threads badge.
- `isActiveOnThreads`: the profile shows its Threads badge.
- `linkedFacebookPage`: the Facebook page the profile links, as `{id, name}`, when it shows one.
- `businessAddress`: the business address as `{street_address, city_name, city_id, zip_code, latitude, longitude}` (Apify's shape), when the profile shows one.
- `addressStreet`: business street address, when the profile shows one (rare).
- `city`: business city, when the profile shows an address (rare).
- `zipCode`: business ZIP or postal code, when the profile shows an address (rare).
- `transparencyLabel`: Instagram's label for state-controlled media and similar accounts, when shown (rare).
- `transparencyProduct`: where Instagram shows that label.
- `isMemorialized`: a memorialized account.
- `isEmbedsDisabled`: the profile turned off embedding its posts on other sites.
- `isUnpublished`: Instagram's unpublished-account flag.
- `hasStoryArchive`: the account keeps a story archive (Instagram sends it only to logged-in users, so usually null).
- `hasProfilePic`: the account has a profile picture (usually null for visitors who aren't logged in).
- `latestStoryAt`: when its newest story went up (UTC), when Instagram shows one (a story stays up 24 hours); null when it has none.
- `hideCreatorMarketplaceBadge`: the profile hides its creator marketplace badge.
- `isRegulatedC18`: Instagram marks the account as regulated 18+ content (alcohol, gambling and similar).
- `isCoppaEnforced`: Instagram applies children's-privacy (COPPA) rules to the account (usually null).
- `isCannes`: Instagram's `is_cannes` flag, passed through as sent.
- `hasLongformMedia`: Instagram's `has_longform_media` flag: the account has long-form videos.
- `shouldShowCategory`: the profile shows its category on its page.
- `showAccountTransparencyDetails`: Instagram shows the "About this account" details for it.
- `profilePicGenaiToolInfo`: Instagram's AI-tool info for the profile picture, when it has any.
- `externalUrlLinkshimmed`: the website as Instagram links it (through l.instagram.com).
- `profilePicUrlHD`: full-size profile picture (signed link, expires after a few days).
- `seedUsername`: the input this row answers (the username as read from what you typed; apify's `inputUrl`).
- `depth`: always 0 here (the profile itself; the engine's related-profiles mode counts hops).
- `rank`: the profile's position in your list.
- `discoveredFrom`: always null here (the related-profiles mode's parent).
- `id`: Instagram's numeric user id.
- `fbid`: Instagram's Facebook-wide id for the account.
- `scrapedAt`: when the run collected it (UTC).

Field names match Apify's Instagram Profile Scraper where both have the field (`username`, `fullName`, `biography`, `externalUrl`, `followersCount`, `followsCount`, `postsCount`, `profilePicUrl`, `profilePicUrlHD`, `highlightReelCount`, `igtvVideoCount`, `hasChannel`, `joinedRecently`, `isBusinessAccount`, `businessCategoryName`, `hasPublicStory`, `businessAddress`, `relatedProfiles`, `latestPosts`, `latestIgtvVideos`, `fbid`, `id`), so the two join on `username` or `id`.

Example row (nasa from the run above; latestPosts, latestIgtvVideos and latestReels cut to one each, relatedProfiles to three, and the lists inside a post to one or two here; picture, video and redirect links shortened):

```json
{
  "profilePicUrl": "https://scontent-lax3-2.cdninstagram.com/v/t51.2885-19/29090066_159271188110124_1152068159029641216_n.jpg?…",
  "fullName": "NASA",
  "biography": "Making the seemingly impossible, possible. ✨",
  "biographySnippet": "Making the seemingly impossible, possible. ✨",
  "username": "nasa",
  "profileUrl": "https://www.instagram.com/nasa/",
  "businessCategoryName": null,
  "externalUrl": "https://www.nasa.gov",
  "contactEmail": null,
  "contactPhone": null,
  "bioLinks": [
    {
      "url": "https://www.nasa.gov",
      "title": "NASA.gov Homepage",
      "linkType": "external",
      "lynxUrl": "https://l.instagram.com/?u=https%3A%2F%2Fwww.nasa.gov%2F&…",
      "isPinned": false,
      "imageUrl": null,
      "linkId": "17920263086752176",
      "mediaType": "none",
      "mediaAccentColorHex": null,
      "creationSource": "NONE"
    },
    {
      "url": "https://www.nasa.gov/maxpower",
      "title": "MAX POWER",
      "linkType": "external",
      "lynxUrl": "https://l.instagram.com/?u=https%3A%2F%2Fwww.nasa.gov%2Fmaxpower&…",
      "isPinned": false,
      "imageUrl": null,
      "linkId": "18112845478962969",
      "mediaType": "none",
      "mediaAccentColorHex": null,
      "creationSource": "NONE"
    },
    {
      "url": "https://science.nasa.gov/blogs/roman/",
      "title": "Roman Space Telescope Blog",
      "linkType": "external",
      "lynxUrl": "https://l.instagram.com/?u=https%3A%2F%2Fscience.nasa.gov%2Fblogs%2Froman%2F&…",
      "isPinned": false,
      "imageUrl": null,
      "linkId": "18103052786245620",
      "mediaType": "none",
      "mediaAccentColorHex": null,
      "creationSource": "NONE"
    },
    {
      "url": "http://nasa.gov/ways-to-watch",
      "title": "How to Watch NASA Livestreams",
      "linkType": "external",
      "lynxUrl": "https://l.instagram.com/?u=https%3A%2F%2Fnasa.gov%2Fways-to-watch&…",
      "isPinned": false,
      "imageUrl": null,
      "linkId": "18166975096479802",
      "mediaType": "none",
      "mediaAccentColorHex": null,
      "creationSource": "NONE"
    },
    {
      "url": "https://science.nasa.gov/feature/artemis-ii-preliminary-lunar-science-report/",
      "title": "Artemis II Preliminary Lunar Science Report",
      "linkType": "external",
      "lynxUrl": "https://l.instagram.com/?u=https%3A%2F%2Fscience.nasa.gov%2Ffeature%2Fartemis-ii-preliminary-lunar-science-report%2F&…",
      "isPinned": false,
      "imageUrl": null,
      "linkId": "1034821412909488",
      "mediaType": "none",
      "mediaAccentColorHex": null,
      "creationSource": "NONE"
    }
  ],
  "isVerified": true,
  "isPrivate": false,
  "isBusinessAccount": true,
  "isProfessionalAccount": true,
  "accountType": "business",
  "followersCount": 104315461,
  "followsCount": 90,
  "postsCount": 4962,
  "hasReels": true,
  "avgLikes": 293766,
  "avgComments": 1798,
  "engagementRate": 0.28,
  "lastPostAt": "2026-10-11T16:30:01Z",
  "reelsMedianViews": 3368272,
  "reelsAvgViews": 4720196,
  "reelsAvgLikes": 129658,
  "reelsAvgComments": 1240,
  "reelsViewsToFollowers": 3.23,
  "lastReelAt": "2026-10-10T05:21:53Z",
  "highlightReelCount": null,
  "hasPublicStory": false,
  "igtvVideoCount": null,
  "hasChannel": null,
  "joinedRecently": null,
  "latestPosts": [
    {
      "id": "4001971394119634476",
      "type": "Image",
      "shortCode": "DeJ28eTxo4s",
      "url": "https://www.instagram.com/p/DeJ28eTxo4s/",
      "caption": "Brewing up new stars 🪄\n \n@NASAWebb’s unique view of the stellar nursery known as NGC 7129 reveals numerous stars formerl…",
      "hashtags": [],
      "mentions": [
        "NASAWebb"
      ],
      "likesCount": 226471,
      "commentsCount": 665,
      "videoViewCount": null,
      "videoPlayCount": null,
      "timestamp": "2026-10-06T13:10:11Z",
      "displayUrl": "https://scontent-dfw6-1.cdninstagram.com/v/t51.82787-15/838879752_18633093571001809_7013098794556155636_n.jpg?…",
      "images": [],
      "videoUrl": null,
      "dimensionsWidth": 2000,
      "dimensionsHeight": 1872,
      "alt": null,
      "productType": null,
      "isPinned": true,
      "isCommentsDisabled": null,
      "paidPartnership": false,
      "sponsors": [],
      "coauthorProducers": [
        {
          "id": "65495240044",
          "is_verified": true,
          "profile_pic_url": "https://scontent-dfw5-1.cdninstagram.com/v/t51.2885-19/437785305_1498177207718392_5285428334541669140_n.jpg?…",
          "username": "nasauniverse"
        },
        {
          "id": "528817151",
          "is_verified": true,
          "profile_pic_url": "https://scontent-dfw6-1.cdninstagram.com/v/t51.2885-19/29090066_159271188110124_1152068159029641216_n.jpg?…",
          "username": "nasa"
        }
      ],
      "coauthors": [
        "nasauniverse",
        "nasa"
      ],
      "taggedUsers": [
        {
          "full_name": "NASA",
          "id": "528817151",
          "is_verified": true,
          "profile_pic_url": "https://scontent-dfw6-1.cdninstagram.com/v/t51.2885-19/29090066_159271188110124_1152068159029641216_n.jpg?…",
          "username": "nasa"
        },
        {
          "full_name": "NASA Universe",
          "id": "65495240044",
          "is_verified": true,
          "profile_pic_url": "https://scontent-dfw5-1.cdninstagram.com/v/t51.2885-19/437785305_1498177207718392_5285428334541669140_n.jpg?…",
          "username": "nasauniverse"
        }
      ],
      "ownerUsername": "nasawebb",
      "ownerId": "549313808",
      "locationName": null,
      "locationId": null,
      "musicInfo": null,
      "childPostsCount": null,
      "childPosts": []
    }
  ],
  "latestIgtvVideos": null,
  "latestReels": [
    {
      "shortCode": "DeTUk4sDSp-",
      "url": "https://www.instagram.com/reel/DeTUk4sDSp-/",
      "playCount": 8153349,
      "likeCount": 571993,
      "commentCount": 5510,
      "postedAt": "2026-10-10T05:21:53Z",
      "isPinned": false
    }
  ],
  "relatedProfiles": [
    {
      "id": "1131654366",
      "full_name": "NASA Armstrong",
      "is_private": false,
      "is_verified": true,
      "profile_pic_url": "https://scontent-dfw6-2.cdninstagram.com/v/t51.2885-19/481334268_1002508118359709_6926010525909147150_n.jpg?…",
      "username": "nasaarmstrong"
    },
    {
      "id": "58700439306",
      "full_name": "national archaeology",
      "is_private": false,
      "is_verified": false,
      "profile_pic_url": "https://scontent-dfw5-2.cdninstagram.com/v/t51.82787-19/619959112_17979095837959307_3504569474369666830_n.jpg?…",
      "username": "national.archaeology"
    },
    {
      "id": "10167330907",
      "full_name": "SpaceX & Space News",
      "is_private": false,
      "is_verified": false,
      "profile_pic_url": "https://scontent-dfw6-2.cdninstagram.com/v/t51.82787-19/714243895_18210776791338908_64371814279386689_n.jpg?…",
      "username": "spacex_spacenews"
    }
  ],
  "bioMentions": null,
  "bioHashtags": null,
  "pronouns": null,
  "threadsUsername": "nasa",
  "isActiveOnThreads": true,
  "linkedFacebookPage": null,
  "businessAddress": null,
  "addressStreet": null,
  "city": null,
  "zipCode": null,
  "transparencyLabel": null,
  "transparencyProduct": null,
  "isMemorialized": false,
  "isEmbedsDisabled": false,
  "isUnpublished": false,
  "hasStoryArchive": null,
  "hasProfilePic": null,
  "latestStoryAt": null,
  "hideCreatorMarketplaceBadge": false,
  "isRegulatedC18": false,
  "isCoppaEnforced": null,
  "isCannes": false,
  "hasLongformMedia": false,
  "shouldShowCategory": true,
  "showAccountTransparencyDetails": true,
  "profilePicGenaiToolInfo": null,
  "externalUrlLinkshimmed": "https://l.instagram.com/?u=https%3A%2F%2Fwww.nasa.gov%2F&…",
  "profilePicUrlHD": "https://scontent-lax3-2.cdninstagram.com/v/t51.2885-19/29090066_159271188110124_1152068159029641216_n.jpg?…",
  "seedUsername": "nasa",
  "depth": 0,
  "rank": 3,
  "discoveredFrom": null,
  "id": "528817151",
  "fbid": "17841401474538262",
  "scrapedAt": "2026-10-12T00:55:01Z"
}
```

### Pricing

Pay per result: you pay for each profile delivered, never for usernames that don't exist or that Instagram hides (age-restricted accounts), and never twice for the same profile.

| Plan | Per 1,000 profiles (bio, links, counts, engagement, latest posts and reels with views included) |
|---|---|
| Free | $1.15 |
| Starter | $0.99 |
| Scale | $0.89 |
| Business | $0.69 |

Set a maximum cost on the run and the Actor stops at or before it. Proxies are included: Apify's datacenter proxy reads everything; a profile no datacenter source names (rare) is looked up once on Apify's residential proxy, at no extra cost to you.

### Good to know

- **Logged out only**: the Actor never logs in, so it returns what Instagram shows visitors who aren't logged in. Two things need a login and are not in the rows: share counts, and the Contact button's own email and phone. Emails written in the bio are in `contactEmail`.
- **Private accounts** come with their name, bio, follower and following counts (Instagram shows no posts or reels for them).
- **Not found**: unknown or renamed usernames and age-restricted accounts (alcohol brands, for example) are listed in the run summary and not charged; the rest of the run continues.
- **Picture links**: Instagram signs picture and video links; they stop working after a few days, so download what you need.
- **Speed**: rows stream into the dataset as each profile is read. In our runs on Apify (2026-10-12, default 256 MB) the prefilled 5 profiles took 5.8 s and 80 profiles 39-54 s.

### Feedback

Found a bug or a missing field? Open an issue in the Issues tab. If the Actor saves you time, a short review on its Store page helps others find it.

# Actor input Schema

## `usernames` (type: `array`):

Profiles to scrape, one per line: a username (natgeo), @username or profile URL (https://www.instagram.com/natgeo/). One row per profile. You pay per profile delivered; unknown and age-restricted profiles are free.

## `includeLatestPosts` (type: `boolean`):

Adds each profile's latest 12 posts with caption, hashtags, likes, comments, reel plays, time, image, location, tagged users, coauthors and music, and its latest IGTV videos when Instagram's app record answers. Included in the price; off = smaller rows.

## `includeReels` (type: `boolean`):

Adds each profile's latest reels (up to 12) with views, likes and comments, plus median and average reel views and the last reel's date. Included in the price.

## `maxResults` (type: `integer`):

Stop after this many profiles. You pay per profile, so this caps the run's cost. Profiles start in the order of your list.

## `includeStats` (type: `boolean`):

Adds exact post counts, average likes and comments, engagement rate and last post date. Included in the price; off = slightly faster.

## `mode` (type: `string`):

profiles = one row per input profile (this listing's job); related = the accounts Instagram suggests for them instead.

## `includeDetails` (type: `boolean`):

Adds each profile's full bio, bio links, website, category, account type, contact email (when the bio shows one), following count, linked Facebook page and more. Included in the price; turn it off only for a slightly faster list.

## `includeProfileRecord` (type: `boolean`):

Adds story status, IGTV count, channel, joined-recently and related profiles from Instagram's logged-out profile record.

## `includeContactDetails` (type: `boolean`):

Adds emails and phones found on the profile's own website and link-in-bio page (the Instagram Email Scraper's job). Off here.

## `proxyConfiguration` (type: `object`):

Leave as is: Apify Proxy (datacenter) reads everything. Where Instagram refuses a datacenter IP, the Actor retries on a little Apify residential on its own, at no extra cost to you.

## Actor input object example

```json
{
  "usernames": [
    "cristiano",
    "natgeo",
    "nasa",
    "humansofny",
    "levainbakery"
  ],
  "includeLatestPosts": true,
  "includeReels": true,
  "maxResults": 10000,
  "includeStats": true,
  "mode": "profiles",
  "includeDetails": true,
  "includeProfileRecord": true,
  "includeContactDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "usernames": [
        "cristiano",
        "natgeo",
        "nasa",
        "humansofny",
        "levainbakery"
    ],
    "includeLatestPosts": true,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("deepmine/instagram-profile-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "usernames": [
        "cristiano",
        "natgeo",
        "nasa",
        "humansofny",
        "levainbakery",
    ],
    "includeLatestPosts": True,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("deepmine/instagram-profile-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "usernames": [
    "cristiano",
    "natgeo",
    "nasa",
    "humansofny",
    "levainbakery"
  ],
  "includeLatestPosts": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call deepmine/instagram-profile-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,deepmine/instagram-profile-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/1KZWzXLQKCUEM7zyC/builds/5MgUggagZOA1qkNxS/openapi.json
