# Instagram Related Profiles Scraper – Discovery (`scrapingmonkey/instagram-related-profiles`) Actor

Discover public Instagram accounts related to selected usernames. Export one row per recommended profile with IDs, links, pictures, account flags, and source context.

- **URL**: https://apify.com/scrapingmonkey/instagram-related-profiles.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

Discover public accounts Instagram recommends around any username. **Instagram Related Profiles Scraper** turns seed usernames into structured lists of similar accounts for competitor research, creator discovery, market mapping, and audience exploration.

Enter plain usernames only. The Actor saves every discovered related account as its own dataset row, adds the source profile for context, and records a `failed` row when a seed cannot produce usable recommendations.

| At a glance | Details |
|---|---|
| 📥 Input | One or more plain Instagram usernames |
| 📤 Output | Related profile identity, URL, image, privacy, verification, and source profile |
| 🔐 Login required | No |
| ⚡ Processing | Up to 5 seed profiles concurrently, with automatic retries |
| 💾 Delivery | Structured Apify dataset for JSON, CSV, Excel, XML, and API use |

### What the related Instagram profiles scraper does 🔎

Instagram's recommendations reveal accounts associated with a brand, creator, topic, or public figure. This Actor collects those public related-profile results and makes them usable outside the Instagram interface.

For every seed username, the Actor can return multiple success rows. Each row includes one recommended profile, the seed profile that produced it, and the number of recommendations returned for that seed. This row-per-profile design works naturally in spreadsheets, databases, and enrichment pipelines.

Expected fields include:

- Related account ID, username, name, URL, and profile picture
- Private and verified flags
- Full source-profile context
- Recommendation count for the source username
- Explicit `success` or `failed` status

### How to find similar Instagram accounts 🚀

1. Add one or more public usernames without `@`.
2. Start the Actor.
3. Wait for related profiles to be collected.
4. Open the dataset and filter, export, or integrate the rows.

Example input:

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

Do not submit full Instagram URLs. Duplicate usernames are collapsed case-insensitively.

### Related-profile output fields 📦

| Field | Type | Meaning |
|---|---|---|
| `input` | string | Seed username exactly as submitted |
| `status` | string | `success` or `failed` |
| `type` | string or null | Result type, normally `profile` |
| `profile_picture_url` | string or null | Recommended profile's image URL |
| `username` | string or null | Recommended profile username |
| `name` | string or null | Recommended profile display name |
| `profile_url` | string or null | Canonical recommended profile URL |
| `id` | string or null | Recommended profile's numeric ID |
| `is_private` | boolean or null | Private-account flag |
| `is_verified` | boolean or null | Verified-account flag |
| `source_profile` | object or null | Profile that generated the recommendation |
| `related_profiles_returned` | integer or null | Total related profiles returned for the seed |

Complete successful dataset item:

```json
{
  "input": "nasa",
  "status": "success",
  "type": "profile",
  "profile_picture_url": "https://instagram.example/related-profile.jpg",
  "username": "nasahubble",
  "name": "NASA Hubble",
  "profile_url": "https://www.instagram.com/nasahubble/",
  "id": "123456789",
  "is_private": false,
  "is_verified": true,
  "source_profile": {
    "profile_picture_url": "https://instagram.example/source-profile.jpg",
    "username": "nasa",
    "name": "NASA",
    "profile_url": "https://www.instagram.com/nasa/",
    "id": "528817151",
    "is_private": false,
    "is_verified": true
  },
  "related_profiles_returned": 49
}
```

Complete failed dataset item:

```json
{
  "input": "unavailable_seed_username",
  "status": "failed",
  "type": null,
  "profile_picture_url": null,
  "username": null,
  "name": null,
  "profile_url": null,
  "id": null,
  "is_private": null,
  "is_verified": null,
  "source_profile": null,
  "related_profiles_returned": null
}
```

### Input requirements ⚙️

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

Accepted: `nasa`

Rejected: `@nasa`, `https://www.instagram.com/nasa/`, blank entries, and invalid username formats.

An invalid item becomes a failed dataset row without stopping other seeds. If the top-level input is absent or malformed, the Actor exits cleanly because it has no valid items to process.

### Practical use cases 🎯

#### Competitor discovery

Start with a known brand and surface neighboring accounts for positioning, content, and market research.

#### Creator sourcing

Expand from one relevant creator into a broader prospect list, then enrich or qualify the results in later steps.

#### Social graph exploration

Create source-to-related edges for network maps and recommendation-system research.

#### Partnership and outreach lists

Export recommended public profiles to a CRM or spreadsheet for manual review before outreach.

#### Niche research

Compare recommendation sets from several seed profiles to find recurring accounts in a topic or community.

### Pricing and result counting 💰

Check the Actor's **Pricing** tab for the current pricing model and rate. Pricing is controlled by the Store listing and can change independently of this documentation.

Under dataset-item pricing:

- Each discovered related profile is one saved `success` result.
- A seed with no usable recommendations saves one `failed` result.
- A seed that returns 49 related profiles creates 49 success rows.
- Network retries do not create extra rows by themselves.
- Duplicate seed usernames are normally processed once.

Because recommendation counts vary by seed and Instagram availability, the final number of rows can be larger than the number of submitted usernames.

### Automate similar-account discovery with the API 🔌

Replace `$ACTOR_ID` with the value shown in the Actor's API tab and `$APIFY_TOKEN` with your Apify token.

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

Run it on a schedule to refresh research lists, trigger webhooks after completion, or connect the dataset to Google Sheets, Make, Zapier, cloud storage, and custom data pipelines.

### Reliability and recommendation limits ⚠️

The Actor processes up to five seeds concurrently and automatically retries temporary connection failures, throttling, selected HTTP errors, and blocked responses. Permanent input errors are converted into failed rows instead of crashing a mixed batch.

Related-profile availability is controlled by Instagram. A real public profile may return no recommendations, and recommendation order or membership can change between runs. Some accounts may be private, restricted, renamed, unavailable by region, or temporarily inaccessible.

The Actor does not claim to return an account's followers, following list, or a complete social graph. It returns only the related profiles exposed by the public recommendation source at run time.

A whole run can still fail if the Actor cannot initialize, the Apify dataset is unavailable, or saving a result fails. These infrastructure failures are different from a single `failed` seed row.

### Frequently asked questions ❓

#### Is this a follower scraper?

No. It collects Instagram's related or recommended public profiles, not the full follower or following list.

#### Why can one username produce dozens of rows?

Each related account is stored separately. That makes the dataset easy to filter and join without unpacking arrays.

#### Why did a valid profile return `failed`?

Instagram may expose an empty or unavailable recommendation response for that seed. A failed row is intentionally saved so the input is not silently lost.

#### Can I enter profile URLs?

No. Supply plain usernames without `@`.

#### Does it require Instagram cookies?

No Instagram login or cookie input is required.

#### Are the recommendations stable?

No. Recommendations are dynamic and can change because of platform ranking, account state, region, or time.

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

For a reproducible problem, send the Actor support channel a run ID, the approximate run time, and a safe public sample username. Never post access tokens, proxy credentials, or private data.

Use collected data lawfully and responsibly. Review applicable privacy, data-protection, intellectual-property, and platform requirements before storing, combining, or using profile information.

# Actor input Schema

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

Add one Instagram username such as nike per item. Enter only the username without @ or a profile link. Each returned recommendation becomes a separate result row together with its source profile. Invalid usernames, unavailable profiles and empty recommendation lists are saved with failed status.

## Actor input object example

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

# Actor output Schema

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

One success row per related profile. Sources that cannot produce recommendations are represented by one failed row.

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

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

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

```

## MCP server setup

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

```

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/geCMcccaX3hkc7r1B/builds/6uHOQ6VYASjAE4FHS/openapi.json
