# Instagram Profile Scraper · No Login · $0.49/1k (`alfalfa/instagram-profile-scraper`) Actor

Public Instagram profiles by username, ID or URL, no login: exact follower counts, biography with links and any email or phone written into it, HD photo, business category, related profiles and 12 recent posts with metrics. Optional About add-on: country, join month, former usernames.

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

## Pricing

from $0.49 / 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 (No Login)

Scrape public **Instagram profiles** by **username**, **profile URL** or **numeric ID** and get clean profile data: exact follower and following counts, biography with links and any email or phone written into it, HD profile picture, verification and business flags, related accounts, and the **12 most recent posts with likes, comments, timestamps and media URLs**. No Instagram account, login or cookies needed. **Same field names and types as the official Instagram Profile Scraper**, with `null` wherever Instagram hides a value from a signed-out visitor, at **$0.49 per 1,000 profiles**. A profile with its recent posts arrives in about five seconds.

Optional **About account add-on**: the country the account is registered in, the month it was created and how many times it changed its username, straight from Instagram's "About this account" panel.

Not affiliated with, endorsed by or connected to Meta Platforms, Inc. Instagram is a trademark of Meta.

### What you can do with Instagram profile data

- **Influencer research and vetting**: follower counts, engagement rate over the last 12 posts, posting frequency, business category and any email or phone written into the biography, in one record per creator.
- **Lead generation**: email addresses and phone numbers that profiles in your niche write into their biography, with the links they publish. Across a random batch fewer than one profile in ten has an email in the bio. In a niche picked for it, such as wedding vendors, most do.
- **Instagram API replacement**: Meta's Graph API only returns data for accounts you own. This scraper returns public profile data for any account through the Apify API, webhooks and integrations.
- **Brand and competitor monitoring**: track follower growth, post cadence and recent post performance of any set of accounts on a schedule.
- **Account verification and fraud checks**: with the About add-on, see when an account was created, where it is registered and whether it has changed its handle.
- **Export to Google Sheets, CSV or Excel**: one flat record per profile, nested posts as JSON, ISO timestamps.

### What data do you get

Every record has all 37 fields of the official Instagram Profile Scraper's output schema, with the same names and JSON types, plus contact and analytics fields on top.

| Group | Fields |
|---|---|
| Identity | `id`, `username`, `fullName`, `url`, `biography`, `profilePicUrl`, `profilePicUrlHD`, `verified`, `private`, `isBusinessAccount`, `businessCategoryName` |
| Counts | `followersCount`, `followsCount`, `postsCount`, `highlightReelCount`, `igtvVideoCount` |
| Links and contacts | `externalUrl`, `externalUrls` (bio links), `publicEmails` and `publicPhones` (email addresses and international phone numbers, in practice the ones written in the biography), `businessAddress` when Instagram publishes it, which is rare. `businessEmail`, `businessPhoneNumber` (the contact buttons), `facebookPage` and `threadsNetProfile` are normally `null` without login. |
| Related | `relatedProfiles`: up to 50 accounts Instagram suggests next to this one, with id, username, name and verification |
| Recent posts | `latestPosts`: up to 12 posts with `id`, `shortCode`, `type`, `caption`, `likesCount`, `commentsCount`, `timestamp`, `displayUrl`, `videoUrl`, `videoViewCount`, carousel children, hashtags, mentions, pinned flag |
| Engagement analytics | `engagementRate`, `engagementSampleSize`, average and median likes and comments, posting frequency, last post date, video share, most engaged post, frequent hashtags and mentions |
| About add-on | `about`: `country`, `date_joined`, `date_joined_as_timestamp`, `former_usernames`, `is_verified` |

Set `maxPostDetails` from 1 to 12 to also fetch recent comments and additional media details for that many posts. Fields Instagram does not publish for a profile, or shows only to logged-in users, are `null`, never guessed: an exact `postsCount` is never replaced by a rounded one, and an unpublished country stays `null` rather than being inferred from the biography or language.

### How to scrape Instagram profiles

1. Paste usernames, profile URLs or numeric IDs into the input, one per line, or send them over the API.
2. Optionally set `maxPostDetails` for recent comments, or switch on the About account add-on.
3. Run. Every profile lands in the dataset as one record; download it as JSON, CSV, Excel or XML, or read it from your integration.

### Input

```json
{
  "usernames": ["nasa", "natgeo", "528817151"],
  "startUrls": [{ "url": "https://www.instagram.com/google/" }],
  "maxProfiles": 100,
  "maxPostDetails": 0,
  "includeAboutSection": false
}
```

| Field | Meaning |
|---|---|
| `usernames` | Usernames or numeric profile IDs. A leading `@` and full profile URLs are accepted too. |
| `startUrls` | Profile URLs. Post and reel URLs are not profiles and are rejected with a clear message. |
| `maxProfiles` | Maximum number of successful profiles in one run. |
| `maxPostDetails` | 0 to 12. How many recent posts get the optional comment and media detail lookup. |
| `includeAboutSection` | Adds the `about` object. Paid Apify plans only; on a free plan the run continues without it and says so. |
| `proxyConfiguration` | Optional country for the residential exit. |

Duplicate usernames are scraped once.

### Output

One record per profile. Abbreviated real output for `nasa` with the About add-on on:

```json
{
  "id": "528817151",
  "username": "nasa",
  "fullName": "NASA",
  "url": "https://www.instagram.com/nasa",
  "biography": "Making the seemingly impossible, possible. ✨",
  "followersCount": 104347893,
  "followsCount": 91,
  "postsCount": 4928,
  "verified": true,
  "private": false,
  "isBusinessAccount": true,
  "businessCategoryName": "Government Agencies",
  "profilePicUrlHD": "https://...",
  "externalUrls": [{ "title": "nasa.gov", "url": "https://www.nasa.gov/", "link_type": "external" }],
  "publicEmails": [],
  "relatedProfiles": [{ "id": "5435768227", "username": "astro_seal", "full_name": "Chris Cassidy", "is_verified": true }],
  "latestPosts": [
    {
      "id": "3983374110243288826",
      "shortCode": "DdHyaYAifb6",
      "type": "Sidecar",
      "caption": "...",
      "likesCount": 107351,
      "commentsCount": 593,
      "timestamp": "2026-09-10T21:20:24.000Z",
      "displayUrl": "https://...",
      "isPinned": true,
      "hashtags": [],
      "childPosts": [{ "id": "...", "type": "Image", "displayUrl": "https://..." }]
    }
  ],
  "engagementRate": 0.2395,
  "engagementSampleSize": 12,
  "averageLikes": 249104.58,
  "medianLikes": 191683,
  "postsPerWeek": 7.83,
  "videoShare": 41.67,
  "lastPostAt": "2026-09-20T17:20:00.000Z",
  "mostEngagedPostUrl": "https://www.instagram.com/p/DdWyDLcGiqo/",
  "about": {
    "id": 528817151,
    "username": "nasa",
    "is_verified": true,
    "country": "United States",
    "date_joined": "August 2013",
    "date_joined_as_timestamp": 1375315200,
    "former_usernames": 0,
    "date_verified": null,
    "date_verified_as_timestamp": null,
    "accounts_with_shared_followers": null
  }
}
```

A profile that could not be scraped produces a diagnostic record with `error` and `errorDescription`, so a batch never silently drops an input. The `error` code says why: `not_found` when no public profile exists under that username right now, because it is misspelled, renamed, removed or never used, `invalid_input` for a post or reel URL, and `request_failed` when the lookup failed on our side. Those records are not charged. The run fails only when not a single profile succeeded and at least one failed on our side.

### Pricing

**$0.49 per 1,000 profiles** plus **$0.001 per run**, on every plan. Platform usage and residential proxies are included.

**About account add-on:** $3.49 per 1,000 panels on Starter, $2.99 on Scale, $2.49 on Business and above. Charged only for a profile whose About panel was actually returned. Available on paid Apify plans.

#### What that buys you

| Allowance you have | Profiles it covers |
|---|---|
| $5, which is what the free plan includes | about 10,000 in batches, about 3,300 if you run one profile per run |
| $49 | about 100,000 in batches |
| $199 | about 400,000 in batches |

Recent posts, related accounts, biography contacts and the engagement analytics are inside the profile price. The only optional charge is the About add-on.

#### What you are never charged for

- Diagnostic rows: a username with no public profile right now, whether misspelled, renamed, removed or never used (`not_found`), an input that is not a profile (`invalid_input`) or a lookup that failed on our side (`request_failed`). The row lands in your dataset with the reason and costs nothing.
- An input that returns nothing at all.
- Compute time and proxy traffic.
- An About lookup that returned no panel.

#### The cap is a cap

`maxProfiles` and the run budget are checked before a profile is fetched, so a run cannot overshoot the number you type. Set the maximum cost per run in the Actor settings and the scraper works out how many profiles fit and stops there.

For comparison, the official Instagram Profile Scraper charges $2.60 per 1,000 profiles on the free plan and $1.60 on Business, and its About add-on $7.00 and $4.00 per 1,000 respectively.

### Switching from the official Instagram Profile Scraper

1. Replace the Actor ID in your integration and keep your input: `usernames`, `startUrls`, `maxProfiles`, `includeAboutSection` all work as before.
2. Every field of the official dataset schema is present with the same name and type. Fields Instagram normally withholds without login, such as the contact-button email and phone, `facebookPage` and `threadsNetProfile`, and fields the public API no longer serves for some profiles, such as an exact `postsCount`, highlight titles or IGTV counts, are `null` rather than estimated.
3. `about` has the official shape. `date_verified` and `accounts_with_shared_followers` are always `null`; the other fields are filled.

### Limitations

- A private account returns no posts.
- The email and phone behind the contact buttons, the linked Facebook page and the Threads profile are normally `null` without login. In practice, emails and phone numbers come from the biography text.
- Stories, highlights content and follower lists are not part of a profile record.
- `postsCount` can be `null` for some profiles; the newer public API sometimes omits the exact total. A rounded count is never substituted.
- The About add-on needs a paid Apify plan and depends on a data source with finite capacity; when it is unavailable the run says so before scraping anything, and nothing is charged.
- Recent posts may differ from a logged-in view, which is personalised.

### FAQ

#### Is there an Instagram API for follower counts of any account?

Meta's Graph API returns data only for accounts you own or manage. For any public account, this scraper gives you exact follower and following counts, recent posts and biography links through the Apify API, with schedules and webhooks.

#### Can I scrape Instagram profiles without logging in?

Yes. This scraper reads only what Instagram shows a signed-out visitor, the same public data anyone sees without an account. You never provide an account, a password or cookies, so there is nothing of yours to get banned.

#### How do I find out when an Instagram account was created?

Switch on the About account add-on. It returns the month the account was created, the country it is registered in and how many times it changed its username, from Instagram's own "About this account" panel.

#### Can I get the email address of an Instagram profile?

In practice only when the account writes it into its biography. `publicEmails` and `publicPhones` collect the email addresses and international phone numbers found in the biography text, plus the contact-button email and phone whenever Instagram returns them, which without login it normally does not. Nothing is guessed or enriched from other sources.

#### How many profiles can I scrape at once?

Any number. A run of a few hundred profiles is typical; `maxProfiles` and the run budget stop the run where you set them.

#### Is scraping Instagram profiles legal?

The scraper collects only publicly available data, without logging in or bypassing any access control. Whether you may use that data depends on your purpose and jurisdiction; personal data is subject to laws such as GDPR. Read Apify's [legal guide](https://blog.apify.com/is-web-scraping-legal/) and consult a lawyer for your case.

### Use it from n8n, Make, Zapier or an AI agent

- **n8n, Make, Zapier**: add the Apify node, pick `alfalfa/instagram-profile-scraper` as the Actor, paste the same JSON input as above and read the run's dataset in the next step. A scheduled workflow that refreshes follower counts every morning and appends them to Google Sheets takes three nodes. See the [Apify integrations docs](https://docs.apify.com/platform/integrations).
- **AI agents and MCP (Claude, Cursor, VS Code, ChatGPT)**: connect the Apify MCP server with this Actor as a tool, `https://mcp.apify.com/?tools=alfalfa/instagram-profile-scraper`, and the agent can call it by describing what it wants in plain language. The input and output schemas are published, so the agent knows every field. See [Apify MCP docs](https://docs.apify.com/platform/integrations/mcp).
- **API and scheduling**: every run is available through the [Apify API](https://docs.apify.com/api/v2) and the Apify CLI; schedules, webhooks and dataset exports (JSON, CSV, Excel, XML) are built into the platform.

### Examples you can run in one click

Each example opens with its input already filled in and a sample of the results, so you can change any field and run it right away.

- [Emails from Instagram bios for lead lists](https://apify.com/alfalfa/instagram-profile-scraper/examples/instagram-bio-email-extractor)
- [Export Instagram profiles to Excel](https://apify.com/alfalfa/instagram-profile-scraper/examples/export-instagram-profiles-to-excel)
- [Instagram account creation date and country](https://apify.com/alfalfa/instagram-profile-scraper/examples/instagram-account-creation-date-and-country)
- [Instagram engagement rate of influencers](https://apify.com/alfalfa/instagram-profile-scraper/examples/instagram-engagement-rate-calculator)
- [Instagram follower count checker](https://apify.com/alfalfa/instagram-profile-scraper/examples/instagram-follower-count-checker)
- [Instagram profile API for any public account](https://apify.com/alfalfa/instagram-profile-scraper/examples/instagram-profile-api)
- [Instagram user ID lookup](https://apify.com/alfalfa/instagram-profile-scraper/examples/instagram-user-id-lookup)
- [Recent posts of an Instagram profile](https://apify.com/alfalfa/instagram-profile-scraper/examples/instagram-recent-posts-of-a-profile)
- [Similar Instagram accounts of a seed profile](https://apify.com/alfalfa/instagram-profile-scraper/examples/similar-instagram-accounts-finder)
- [Track competitor Instagram accounts](https://apify.com/alfalfa/instagram-profile-scraper/examples/instagram-competitor-tracking)

Need something the examples do not cover? Every field is on the Input tab, and any example input works unchanged in an API call or an n8n, Make or Zapier workflow.

### Was this useful?

If this Actor saved you time, a short review on its Store page helps others find it and tells me what to improve next. Missing a field or stuck on an input? Open an Issue on the Actor page; issues are answered within a day.

### More scrapers by Alfalfa

All read only what the site shows a signed-out visitor, use the same field names as the official Apify Actors, and charge only for records that reach your dataset.

| Actor | What it returns | Price |
|---|---|---|
| [Facebook Events Scraper](https://apify.com/alfalfa/facebook-events-scraper) | Events by keyword, city, page or URL: dates, venue with GPS, tickets, organizer, going counts, every date of a recurring event, optional organizer email | $3 / 1,000 events |
| [Facebook Posts Scraper](https://apify.com/alfalfa/facebook-posts-scraper) | Posts from pages and profiles: text, media, reaction breakdown, comments, shares, top comments, co-authors | $2 / 1,000 posts |
| [Facebook Pages Scraper](https://apify.com/alfalfa/facebook-pages-scraper) | Page profile: email, phone, website, address, likes, followers, rating, price range, About text, recent posts | from $2.50 / 1,000 pages |
| [Facebook Comments Scraper](https://apify.com/alfalfa/facebook-comments-scraper) | Comments and reply threads of any public post: text, author, date, likes, replies with parent links, three sort modes, date filter without surcharge | $0.30 / 1,000 comments |
| [Facebook Ads Library Scraper](https://apify.com/alfalfa/facebook-ads-library-scraper) | Ads from the Meta Ad Library by keyword, advertiser page or URL, with creatives, dates, platforms and EU reach | $0.45 / 1,000 ads |
| [Google Ads Transparency Scraper](https://apify.com/alfalfa/google-ads-transparency-scraper) | Every Google ad of an advertiser or website domain with format, dates, regions, previews and YouTube video ids | $0.30 / 1,000 ads |
| [Google Maps Scraper](https://apify.com/alfalfa/google-maps-scraper) | Places from any search and location with address, phone, website, rating and hours, plus reviews and website emails | $0.07 / 1,000 places |
| [Amazon Product Scraper](https://apify.com/alfalfa/amazon-product-scraper) | Products from searches, Best Sellers lists and ASINs in 22 Amazon stores with price, rating, BSR and details | $0.28 / 1,000 products |
| [LinkedIn Jobs Scraper](https://apify.com/alfalfa/linkedin-jobs-scraper) | Public LinkedIn job postings by keyword, location, date, company or URL, with full description, salary, applicants, seniority and poster | $0.30 / 1,000 jobs |
| [LinkedIn Company Scraper](https://apify.com/alfalfa/linkedin-company-scraper) | LinkedIn company pages from URLs, names, websites or a filtered keyword search with size, employee count, followers, offices and recent posts | $1 / 1,000 companies |
| [YouTube Scraper](https://apify.com/alfalfa/youtube-scraper) | Videos of a search, channel, playlist or URL list with views, likes, date, tags, plus transcripts and comments; no API key | $0.50 / 1,000 rows |

### Not working?

Instagram changes things regularly. If a run returns nothing for a profile that opens on instagram.com, open an issue in the Issues tab with the input you used; fixes are usually deployed within a day. If the scraper saved you time, a short review on the Actor page helps other users find it.

# Changelog

This Actor's version history is a separate document: https://apify.com/alfalfa/instagram-profile-scraper/changelog.md

# Actor input Schema

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

Public usernames such as nasa or natgeo, or numeric profile IDs such as 528817151. One profile per entry.

## `startUrls` (type: `array`):

Profile URLs such as https://www.instagram.com/nasa/. Post and reel URLs are not accepted.

## `maxProfiles` (type: `integer`):

Maximum successful profile records in one run.

## `maxPostDetails` (type: `integer`):

Optional extra details for this many recent posts, including recent comments and additional media details. Available public likes, comment counts, timestamps and media URLs are included for all recent posts by default. 0 skips optional requests.

## `includeAboutSection` (type: `boolean`):

Adds the About this account panel: country of registration, the month the account was created and how many former usernames it has. Instagram does not publish this panel to anonymous visitors, so the add-on is served by a paid data source and each enabled profile costs one extra lookup. This feature is for paying users only. Verification date and shared-follower accounts are not available and stay null.

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

Optional country for residential proxy requests.

## Actor input object example

```json
{
  "usernames": [
    "nasa"
  ],
  "maxProfiles": 1,
  "maxPostDetails": 0,
  "includeAboutSection": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `profiles` (type: `string`):

Profile records as JSON. Add ?format=csv for CSV.

# 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": [
        "nasa"
    ],
    "maxProfiles": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("alfalfa/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": ["nasa"],
    "maxProfiles": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("alfalfa/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": [
    "nasa"
  ],
  "maxProfiles": 1
}' |
apify call alfalfa/instagram-profile-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,alfalfa/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/W2BCadDTtepfbqwcw/builds/QeigOOXaXEnSsVeX9/openapi.json
