# Instagram Profile Details Scraper – Data Export (`scrapingmonkey/instagram-profile-details`) Actor

Extract public Instagram profiles by username. Get biographies, follower counts, links, recent posts, verification, categories, and published business contacts.

- **URL**: https://apify.com/scrapingmonkey/instagram-profile-details.md
- **Developed by:** [ScrapingMonkey](https://apify.com/scrapingmonkey) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

Extract complete public Instagram profile data by username, including biography, follower counts, links, recent post previews, verification, and business contact fields when the account publishes them. **Instagram Profile Scraper** produces one clean dataset row per submitted profile without requiring Instagram credentials or cookies.

It is designed for enrichment, creator research, lead qualification, brand monitoring, and public profile databases. Missing optional values remain `null` or empty instead of being guessed.

| At a glance | Details |
|---|---|
| 📥 Input | One or more plain Instagram usernames |
| 📤 Output | Identity, audience, bio, links, business fields, account flags, and recent post previews |
| 🔐 Login required | No |
| ⚡ Processing | Up to 5 profiles concurrently with automatic retries and fallback handling |
| 💾 Delivery | One Apify dataset row per unique processed username |

### What the Instagram profile scraper extracts 👤

The Actor turns a public profile into client-ready fields instead of exposing a raw platform response. It covers personal, creator, professional, and business accounts while keeping a consistent output schema.

Available data can include:

- Instagram ID, PK, username, name, canonical URL, and standard or HD profile picture
- Biography, follower count, following count, and total post count
- Private, verified, Meta Verified, unpublished, and memorialized states
- Business, professional, and creator classification flags
- Category names, category enum, and overall or business categories
- Public email, phone number, address, and preferred contact method
- External URL, structured external links, and pinned-link state
- Pronouns, Threads username, Facebook ID, and product-availability flags
- Transparency and embedding settings
- Recent public post previews and the number returned

### How to scrape Instagram profile details 🚀

1. Add plain usernames such as `nike` or `openai`.
2. Do not include `@` or full profile links.
3. Start the Actor.
4. Review success and failed rows in the dataset.
5. Export the data or connect the run to an automated workflow.

```json
{
  "inputList": [
    "nike",
    "openai",
    "nasa"
  ]
}
```

Duplicate usernames are collapsed case-insensitively. Each valid unique username is handled independently, so one unavailable account does not stop the rest of the batch.

### Profile data fields and complete output 📦

| Field group | Included data |
|---|---|
| Identity | Username, name, IDs, profile URL, standard and HD pictures |
| Audience | Followers, following, total posts |
| Account type | Private, verified, business, professional, creator, Meta Verified |
| Business | Categories, contact method, email, phone, structured address |
| Links | External URL and structured links with title and pinned state |
| Features | Reels, channel, guides, highlights, embeds, count visibility |
| Context | Pronouns, Threads username, Facebook ID, transparency fields |
| Recent content | Post previews and `posts_returned` |

Complete representative success item:

```json
{
  "input": "nike",
  "status": "success",
  "type": "profile",
  "profile_picture_url": "https://instagram.example/nike.jpg",
  "profile_picture_url_hd": "https://instagram.example/nike-hd.jpg",
  "username": "nike",
  "name": "Nike",
  "profile_url": "https://www.instagram.com/nike/",
  "id": "13460080",
  "pk": "13460080",
  "biography": "Serving athletes since 1972.",
  "followers": 300000000,
  "following": 150,
  "posts_count": 1200,
  "account_type": "business",
  "is_private": false,
  "is_verified": true,
  "is_business_account": true,
  "is_professional_account": true,
  "is_creator_account": false,
  "category_name": "Clothing (Brand)",
  "category_enum": "CLOTHING",
  "overall_category_name": "Business",
  "business_category_name": "Clothing (Brand)",
  "business_contact_method": "EMAIL",
  "business_email": "public-contact@example.com",
  "business_phone_number": null,
  "business_address": {
    "street_address": "One Bowerman Drive",
    "city_name": "Beaverton",
    "city_id": "10001",
    "zip_code": "97005",
    "latitude": 45.4871,
    "longitude": -122.8037
  },
  "should_show_category": true,
  "should_show_public_contacts": true,
  "external_url": "https://www.nike.com/",
  "external_links": [
    {
      "title": "Official website",
      "url": "https://www.nike.com/",
      "is_pinned": true
    }
  ],
  "pronouns": [],
  "threads_username": "nike",
  "facebook_id": "123456789",
  "has_reels": true,
  "has_channel": false,
  "has_guides": false,
  "highlight_reels_count": 8,
  "is_unpublished": false,
  "is_memorialized": false,
  "hide_like_and_view_counts": false,
  "is_embeds_disabled": false,
  "show_account_transparency_details": true,
  "transparency_label": null,
  "transparency_product": null,
  "is_verified_by_meta": false,
  "posts_returned": 12,
  "posts": [
    {
      "id": "1234567890123456789",
      "code": "EXAMPLE123",
      "url": "https://www.instagram.com/p/EXAMPLE123/",
      "type": "carousel",
      "caption": "Recent public post preview",
      "image_url": "https://instagram.example/recent-post.jpg",
      "video_url": null,
      "accessibility_caption": "Athlete outdoors",
      "carousel_media_count": 3,
      "author": {
        "id": "13460080",
        "username": "nike",
        "name": "Nike",
        "profile_url": "https://www.instagram.com/nike/"
      }
    }
  ]
}
```

All public counts and example values above are illustrative and can change. The keys reflect the Actor's output schema.

A failed row uses the same top-level schema: it retains `input`, sets `status` to `failed`, and sets all 47 profile-data fields to `null`. This keeps invalid or unavailable usernames visible in the dataset without fabricating profile values.

### Input requirements and account coverage ⚙️

| Parameter | Type | Required | Rules |
|---|---|---|---|
| `inputList` | array of strings | Yes | At least one plain Instagram username |

Accepted: `openai`

Rejected: `@openai`, `https://www.instagram.com/openai/`, blank values, and usernames that violate Instagram's format.

The Actor can parse public personal and professional profiles. Business email, phone, address, category, and contact settings appear only when the account exposes them publicly. Private or restricted profiles may return limited data or fail.

The `posts` array is a recent preview supplied with profile details; it is not a paginated archive. Use Profile Posts Scraper when you need multiple pages of content.

### Instagram profile data use cases 🎯

#### Lead and company enrichment

Add public business category, website, email, phone, address, and audience fields to qualified records.

#### Creator discovery and qualification

Compare follower counts, verification, biography, account type, links, and recent public content.

#### Brand monitoring

Track changes to names, biographies, categories, external links, verification, and public audience metrics.

#### Social profile databases

Use numeric IDs and canonical URLs to normalize public profile records and reduce username-based duplicates.

#### Research and reporting

Export structured profile data to spreadsheets, dashboards, CRM systems, or approved analytics workflows.

### Pricing and billable profile rows 💰

Check the Actor's **Pricing** tab for the current charging model and rate. The Store configuration is authoritative and may change over time.

Under dataset-item pricing:

- Every parsed profile saves one `success` result.
- Every invalid, nonexistent, deleted, private, restricted, or repeatedly unavailable username saves one `failed` result.
- Automatic retry attempts and a fallback request do not create additional dataset rows.
- Duplicate usernames are normally processed once.

Recent posts remain nested inside the profile row and are not separate dataset items in this Actor.

### Instagram profile API and integrations 🔌

Replace `$ACTOR_ID` with the ID shown in the Actor API tab and `$APIFY_TOKEN` with your token.

```bash
curl -X POST "https://api.apify.com/v2/acts/$ACTOR_ID/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"inputList":["nike","openai"]}'
```

Trigger the Actor from REST, Apify client libraries, schedules, or webhooks. Send the default dataset to Google Sheets, Make, Zapier, cloud storage, a CRM, or your own data pipeline.

### Reliability, fallbacks, and limits ⚠️

The Actor processes up to five profiles concurrently. Temporary transport failures, request timeouts, throttling, selected HTTP errors, and login redirects are retried automatically. When Instagram's primary public profile endpoint is unavailable for an otherwise valid username, the Actor can use the public profile page as a fallback.

Fallback data may contain fewer fields than the primary response. Missing business, transparency, contact, or feature values remain null rather than being inferred.

One failed profile should not crash a mixed batch. A full Actor run can still fail because of infrastructure-level problems such as initialization failure, unavailable Apify dataset storage, or an unrecoverable error while saving a result.

Instagram can rename, restrict, privatize, suspend, or remove accounts and can change public responses without notice.

### Frequently asked questions ❓

#### Can it extract public business email and phone numbers?

Yes, when the profile publishes those fields. The Actor does not discover private or hidden contact data.

#### Can I submit profile URLs?

No. Enter plain usernames without `@`.

#### Does it return all posts from the profile?

No. Profile details can include a recent preview. Use Profile Posts Scraper for pagination and row-per-post output.

#### Does it require Instagram login credentials?

No Instagram account, password, cookies, or session token is required.

#### Why are business fields null on a successful profile?

The account may not be a business profile, may not publish contact details, or Instagram may omit them from that public response.

#### Are follower counts real time?

They reflect the public response at collection time and can change immediately afterward.

### Support, responsible use, and related actors 🛟

For a reproducible issue, provide the support channel with the run ID, approximate time, and a safe public username. Do not disclose tokens, proxy credentials, or private contact data.

Related actors:

- [Instagram Profile Posts Scraper](../instagram-profile-posts-scraper) for paginated profile feed posts
- [Instagram Profile Reels Scraper](../instagram-profile-reels-scraper) for profile Reels only
- [Instagram Username to ID Scraper](../instagram-username-to-id-scraper) for lightweight ID resolution

Use the Actor for lawful processing of public data. Follow applicable privacy, data-protection, anti-spam, copyright, contractual, and platform requirements. Public availability is not permission for unrestricted outreach or redistribution.

# Actor input Schema

## `inputList` (type: `array`):

Add one Instagram username such as openai per item. Enter only the username without @ or a profile link. Public information for private profiles is saved when available. Invalid and unavailable usernames are saved with failed status.

## Actor input object example

```json
{
  "inputList": [
    "nike"
  ]
}
```

# Actor output Schema

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

One dataset row for every processed unique profile. Check the status field to distinguish successfully extracted profiles from failed inputs.

# 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 = {
    "inputList": [
        "nike"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapingmonkey/instagram-profile-details").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 = { "inputList": ["nike"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapingmonkey/instagram-profile-details").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 '{
  "inputList": [
    "nike"
  ]
}' |
apify call scrapingmonkey/instagram-profile-details --silent --output-dataset

```

## MCP server setup

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

```

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/c2Rvig6SXpXd8dIe0/builds/7Jc7Tf5FszphCYmiM/openapi.json
