# Instagram Profile Lead Scraper (`maximedupre/instagram-profile-lead-scraper`) Actor

Collect public Instagram profiles from usernames, profile URLs, or one keyword query without buyer-supplied credentials. Get identity, bios, audience counts, business status, public links, and contact fields when Instagram shows them. Save each returned profile as one row in an Apify dataset.

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

## Pricing

$0.25 / 1,000 public profiles

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

### 🎯 Public Instagram profiles for lead research

For marketers, agencies, researchers, and developers, this Actor collects public Instagram profiles from usernames, profile URLs, or one keyword query. No buyer-supplied Instagram credentials are needed. It returns profile identity, bios, audience counts, business status, public links, public contact fields, and recent post URLs when Instagram provides them, so you can build a structured profile list for research and lead work.

- Review public contact fields on Instagram profiles with **[Instagram Contact Scraper](https://apify.com/maximedupre/instagram-profile-lead-scraper/examples/instagram-contact-scraper)**.
- Build a list of public Instagram profiles for outreach research with **[Instagram Lead Generation Scraper](https://apify.com/maximedupre/instagram-profile-lead-scraper/examples/instagram-lead-generation-scraper)**.
- Collect profile identity and audience counts with **[Instagram Profile Lead Scraper Tool](https://apify.com/maximedupre/instagram-profile-lead-scraper/examples/instagram-profile-lead-scraper-tool)**.
- Check specific usernames or profile URLs with **[Instagram Profile Lead Scraper](https://apify.com/maximedupre/instagram-profile-lead-scraper/examples/instagram-profile-lead-scraper)**.
- Discover public profiles from one keyword with **[Instagram Lead Scraper](https://apify.com/maximedupre/instagram-profile-lead-scraper/examples/instagram-lead-scraper)**.

#### 📋 Instagram profile rows

Each saved row represents one public Instagram profile with the required profile URL and username. The row can also include a public user ID, display name, biography, audience counts, account status, business category, external links, public email addresses, public phone numbers, and recent public post URLs when Instagram provides them.

If the same profile is submitted more than once, the Actor saves the first eligible occurrence and ignores later duplicate references. The saved row describes that first match only.

#### ▶️ Check public Instagram profiles

1. Choose **Profile URLs or usernames** to check specific public profiles, or choose **Keyword** to discover profiles from one search.
2. Add one or more profile references, or enter one keyword query.
3. For a Keyword run, optionally set **Maximum profiles**. Leave it empty to return all available results until the source is exhausted.
4. Start the run and open the dataset link in the output.

The Actor reads public Instagram information only. Available fields can differ between profiles, and missing values are not invented.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `findProfilesBy` | string (select) | Choose `profileReferences` to check submitted profile URLs or usernames, or `keyword` to discover public profiles from one query. |
| `profileReferences` | array of strings | Add one or more Instagram profile URLs or usernames. This field is used when `findProfilesBy` is `profileReferences`; values under the other method are ignored. |
| `keyword` | string | Enter one keyword query to discover public Instagram profiles. This field is used when `findProfilesBy` is `keyword`; values under the other method are ignored. |
| `maxItems` | integer (optional) | For Keyword runs, stop after this many profiles. Leave it empty to return all available results until the source is exhausted. |

**Example input**

This is the public input from a successful current-beta run:

```json
{
  "findProfilesBy": "profileReferences",
  "profileReferences": [
    "instagram"
  ]
}
```

#### 🧾 Output

**Dataset link**

| Field | Type | What it does |
| --- | --- | --- |
| `dataset` | link | Opens the saved Instagram profile rows in the default dataset overview. |

**Profile row**

Each dataset row has the same shape. Optional arrays can be empty, and optional values may be absent when Instagram does not expose them.

| Field | Type | What it does |
| --- | --- | --- |
| `profileUrl` | string (URL) | Canonical public Instagram profile URL. |
| `username` | string | Public Instagram username. |
| `userId` | string | Public Instagram user ID when available. |
| `displayName` | string | Name shown on the public profile. |
| `biography` | string | Biography text shown on the public profile. |
| `followersCount` | integer | Public follower count. |
| `followingCount` | integer | Public following count. |
| `postsCount` | integer | Public post count. |
| `isVerified` | boolean | Whether Instagram marks the profile as verified. |
| `isPrivate` | boolean | Whether Instagram marks the profile as private. |
| `isBusinessAccount` | boolean | Whether the profile is marked as a business or professional account. |
| `businessCategory` | string | Public business category when available. |
| `externalLinks` | array of objects | Websites and structured links published by the profile. |
| `externalLinks.url` | string (URL) | URL of one external link. |
| `externalLinks.label` | string | Label shown for one external link when available. |
| `emails` | array of strings | Email addresses exposed publicly by the profile. |
| `phoneNumbers` | array of strings | Phone numbers exposed publicly by the profile. |
| `recentPosts` | array of strings (URLs) | URLs for recent public posts when available. |

**Genuine profile row**

This complete row is from a successful current-beta run with the `travel` keyword and `maxItems` set to `1`:

```json
{
  "profileUrl": "https://www.instagram.com/shwetaapal/",
  "username": "shwetaapal",
  "externalLinks": [
    {
      "url": "https://www.amazon.in/shop/shwetaapal/photo/amzn1.shoppablemedia.v1.b730ae51-78e4-49d3-873d-b0f0ca37ce43?ref_=in_cs_fip_shwetapal-jan26exp-2-21",
      "label": "Amazon Storefront"
    },
    {
      "url": "http://www.acruxgym.com",
      "label": "Acrux Gym"
    },
    {
      "url": "https://go.wego.com/4ak4hq1",
      "label": "Book Now-Wego App"
    }
  ],
  "emails": [
    "contactshwetaapal@gmail.com"
  ],
  "phoneNumbers": [],
  "recentPosts": [
    "https://www.instagram.com/p/Da-ZYRpCcSq/",
    "https://www.instagram.com/reel/CfO_XjeJr-j/",
    "https://www.instagram.com/reel/C5DbvjHyhsh/",
    "https://www.instagram.com/reel/DdosXorJKbR/",
    "https://www.instagram.com/reel/DdmYPw2zk4_/",
    "https://www.instagram.com/reel/DdjQhJMpUej/",
    "https://www.instagram.com/p/DdgkiP7lBsX/",
    "https://www.instagram.com/reel/DdcCI5zTWWP/",
    "https://www.instagram.com/reel/DdhLWyEvibw/",
    "https://www.instagram.com/reel/DdT8oVLuDrj/",
    "https://www.instagram.com/reel/DdWGobCuMI7/",
    "https://www.instagram.com/reel/Dc6Rq_EJjCq/",
    "https://www.instagram.com/reel/CcqJbGWpec0/",
    "https://www.instagram.com/reel/CcVa7Eqjwo8/",
    "https://www.instagram.com/reel/CY6e1sbjJCb/",
    "https://www.instagram.com/reel/CYrWGWGvooR/",
    "https://www.instagram.com/reel/CYom2UlplaP/",
    "https://www.instagram.com/reel/CYJnxO-JQym/",
    "https://www.instagram.com/reel/CYGrFYrp0HA/",
    "https://www.instagram.com/reel/CW8RavoN_GL/",
    "https://www.instagram.com/reel/CUz6a1shhM7/",
    "https://www.instagram.com/reel/CN9-ZTZpDbd/"
  ],
  "userId": "653727554",
  "displayName": "SHWETA PAL",
  "biography": "Luxury Lifestyle | Skincare | Fashion | Fitness | Travel\nJaiGuruJi ૐ\n📧: contactshwetaapal@gmail.com\n@acruxgym @fitindiaoff @indianlifestylecreator",
  "followersCount": 834770,
  "followingCount": 1393,
  "postsCount": 3508,
  "isVerified": true,
  "isPrivate": false,
  "isBusinessAccount": false,
  "businessCategory": "Artist"
}
```

#### 💳 Pricing

**What you pay for**

This Actor uses pay-per-event pricing. The charge applies to each unique public profile saved to your dataset. Repeated submitted references do not create another saved profile for the same account.

#### 🔌 Integrations

**Move your rows**

Open the `dataset` link in the run output, export rows as JSON, CSV, Excel, XML, RSS, or HTML, or read them through the Apify API.

**Video guide**

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Can I run more than one keyword search at once?

No. Choose **Keyword** and enter one query per run. For several queries, start separate runs.

##### What happens if I submit the same profile more than once?

The Actor saves the first eligible occurrence immediately and ignores later duplicate references. The saved row describes that first match only.

##### Will every profile have an email or phone number?

No. These fields contain only contact details that the profile exposes publicly, so they may be empty.

##### Why is an optional field missing or empty?

Instagram does not expose the same public fields for every profile. The Actor leaves unavailable values empty rather than inventing them.

##### Can it access private profile content?

No. The Actor collects public profile information only. It can return a privacy status when Instagram exposes that status.

##### Does it collect follower lists, following lists, or full posts?

No. It returns follower, following, and post counts plus recent post references when available. It does not collect relationship lists or full post and media data.

##### Is this the official Instagram API?

No. This is an Apify Actor for public Instagram profile collection and normalized dataset rows. It does not promise every capability of an official API.

### 📝 Changelog

**v0.0** (24-09-2026)

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~instagram-profile-lead-scraper/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Instagram User Search Scraper](https://apify.com/maximedupre/instagram-user-search-scraper): Find public Instagram account candidates by keyword.
- [Instagram Profile Stats Scraper](https://apify.com/maximedupre/instagram-profile-stats-scraper): Check known public profiles for audience counts and status flags.
- [Instagram Related Users Scraper](https://apify.com/maximedupre/instagram-related-users-scraper): Explore public accounts related to a seed profile.
- [Influencer Scraper](https://apify.com/maximedupre/influencer-scraper): Build public creator lists across Instagram, TikTok, and YouTube.
- [Instagram Profile Scraper & Business Lead Extractor](https://apify.com/chirpy_polygon/instagram-profile-lead-scraper): Compare a separate public Instagram profile and contact workflow.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `findProfilesBy` (type: `string`):

Choose whether to use profile URLs or usernames, or one keyword query, to find public Instagram profiles.

## `profileReferences` (type: `array`):

Add one or more Instagram profile URLs or usernames. Use this field when Find profiles by is Profile URLs or usernames. Values under the other option are ignored.

## `keyword` (type: `string`):

Enter one keyword query to discover public Instagram profiles. Use this field when Find profiles by is Keyword. Values under the other option are ignored.

## `maxItems` (type: `integer`):

For Keyword runs, stop after this many profiles. Leave it empty to return all available results until the source is exhausted.

## Actor input object example

```json
{
  "findProfilesBy": "profileReferences",
  "profileReferences": [
    "instagram"
  ],
  "keyword": "travel",
  "maxItems": 25
}
```

# Actor output Schema

## `dataset` (type: `string`):

Open the dataset with one row for each public Instagram profile the Actor saves.

# 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 = {
    "findProfilesBy": "profileReferences",
    "profileReferences": [
        "instagram"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/instagram-profile-lead-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 = {
    "findProfilesBy": "profileReferences",
    "profileReferences": ["instagram"],
}

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/instagram-profile-lead-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/KpjAiKRUzJEC54Z61/builds/I8ZwfJJqM95m0pZ3U/openapi.json
