# Instagram Related Profiles | $0.4/1K Profiles + $0.003 per Seed (`publicsignallabs/instagram-related-profiles`) Actor

Find public Instagram profiles currently suggested for seed accounts for $0.40 per 1,000 saved results plus $0.003 per successfully searched seed. Optional full profile enrichment. No login, cookies, browser, or proxy setup.

- **URL**: https://apify.com/publicsignallabs/instagram-related-profiles.md
- **Developed by:** [Public Signal Labs](https://apify.com/publicsignallabs) (community)
- **Categories:** Social media, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 95.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.40 / 1,000 related 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?

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

## Instagram Related Profiles

Discover profiles Instagram currently suggests around one or more seed accounts. Submit usernames or canonical profile URLs, choose up to 80 results per seed, and receive ranked, normalized rows ready for JSON, CSV, Excel, XML, or API workflows.

Use this Actor for creator discovery, competitor mapping, audience-adjacent research, brand partnerships, recruiting research, and expanding a known-account list without recursive crawling.

### Quick start

Basic discovery:

```json
{
  "profiles": ["instagram", "https://www.instagram.com/natgeo/"],
  "maxResultsPerProfile": 20,
  "enrichProfiles": false
}
```

Discovery with current public profile details:

```json
{
  "profiles": ["instagram"],
  "maxResultsPerProfile": 20,
  "enrichProfiles": true
}
```

The Actor normalizes usernames and canonical Instagram profile URLs, removes duplicate seeds while preserving first occurrence order, resolves each seed, and fetches one current related-profile snapshot. It does not recursively expand suggested profiles.

### Input

| Field | Rules |
|---|---|
| `profiles` | Required array of Instagram usernames, `@usernames`, or canonical `instagram.com/<username>/` URLs. Paying runs accept 1–1,000 unique profiles. |
| `maxResultsPerProfile` | Optional integer from 1 through 80; default `80`. Applied separately to each seed. This is a maximum, not a result guarantee. |
| `enrichProfiles` | Optional boolean; default `false`. Paying users only. When enabled, every delivered row is considered for current public-profile enrichment. |

Plan-specific FREE demo limits are detailed in Pricing. Profile enrichment is available to paying users only. Unknown fields, non-profile URLs, post or reel URLs, unsafe usernames, invalid types, and out-of-range values are rejected before network work.

### Dataset rows

One row represents one related-profile relationship for one submitted seed. The same related account may appear once for each distinct seed because seed provenance is meaningful. Duplicate account IDs within a seed are suppressed.

Basic fields:

- seed username and input index;
- raw suggestion rank;
- related account ID, username, full name, and canonical profile URL;
- public privacy and verification flags;
- profile image URL and suggestion context;
- explicit enrichment status.

Example enriched row:

```json
{
  "seed_username": "instagram",
  "seed_input_index": 0,
  "rank": 1,
  "id": "1234567890",
  "username": "example.creator",
  "full_name": "Example Creator",
  "profile_url": "https://www.instagram.com/example.creator/",
  "is_private": false,
  "is_verified": false,
  "profile_pic_url": "https://cdn.example/profile.jpg",
  "suggestion_context": "Suggested for you",
  "enrichment_status": "succeeded",
  "follower_count": 12500,
  "following_count": 420,
  "media_count": 680,
  "biography": "Public profile biography.",
  "external_url": "https://example.com",
  "bio_links": [{"title": "Website", "url": "https://example.com"}],
  "account_type": 2,
  "category": "Digital creator",
  "is_business": false,
  "is_professional_account": true,
  "public_email": null,
  "public_phone_number": null,
  "business_contact_method": null,
  "address_street": null,
  "city_name": null,
  "profile_pic_url_hd": "https://cdn.example/profile-hd.jpg"
}
```

The example is illustrative. Optional fields are returned as `null` or an empty list when Instagram does not expose a valid public value. Profile images and external URLs can change or expire.

### Basic versus enriched output

| Capability | Basic (`enrichProfiles=false`) | Enriched (`enrichProfiles=true`) |
|---|---|---|
| Identity, profile URL, rank, and seed provenance | Included | Included |
| Privacy and verification flags | Included from the related snapshot | Refreshed when available |
| Counts, biography, links, and category | `null` or empty | Current public values when available |
| Public business/contact fields | `null` | Included only when publicly exposed |
| Posts, reels, stories, or follower lists | Not included | Not included |
| Enrichment event | Never | Only for a successful identity-matching profile |

Every row has one `enrichment_status`:

- `not_requested` — basic mode;
- `succeeded` — a matching current profile was mapped and charged;
- `not_available` — no profile was available for enrichment;
- `failed` — lookup, validation, or identity matching failed safely.

Unavailable or failed enrichments preserve the basic row and do not create an enrichment charge. Repeated related accounts can reuse bounded in-run profile data, but each successfully enriched and saved relationship row remains independently billed.

### Pricing

**$0.40 per 1,000 saved related profiles + $0.003 per successfully fetched seed page. Enrichment adds $3.60 per 1,000 successfully enriched profiles.**

| Example | Event charge |
|---|---:|
| 1 valid empty seed page | $0.0030 |
| 1 basic seed with 5 saved profiles | $0.0050 |
| 1 basic seed with 20 saved profiles | $0.0110 |
| 1 basic seed with 80 saved profiles | $0.0350 |
| 1 enriched seed with 5 successful enrichments | $0.0230 |
| 1 enriched seed with 20 successful enrichments | $0.0830 |
| 1 enriched seed with 80 successful enrichments | $0.3230 |

A page event is charged only after a valid related-profile page is fetched, including a valid empty page. Saved dataset rows create the standard dataset-item event. An enrichment event is charged only for a successful identity-matching enrichment that is about to be saved. Invalid, duplicate, self-referential, unavailable, or failed enrichment candidates do not create their corresponding row or enrichment charge.

For the largest allowed paid input, the maximum event charge is `$35.00` in basic mode or `$323.00` when all 80,000 rows enrich successfully. A lower Apify run spending limit stops work at a funded prefix.

#### FREE demo limits

FREE Apify accounts can run this Actor up to 5 times per UTC calendar month. Each admitted FREE run accepts exactly one seed, returns up to 20 related profiles, and cannot enable profile enrichment. Console, CLI, API, schedules, webhooks, MCP, and other Apify launch methods share the same account allowance. A run counts once admitted even when it is later aborted or unsuccessful, and resurrecting it does not start another extraction. Creating another task or API token does not reset the allowance. Paid Apify users are not subject to these demo limits.

### Ordering and stopping behavior

Seeds run sequentially. Enrichment requests use bounded concurrency of five, then rows are restored to suggestion order before storage. At most one related page is fetched per seed.

A seed stops when:

- its related page is empty;
- `maxResultsPerProfile` eligible rows have been selected;
- remaining spending capacity cannot fund the next required event;
- the seed is not found or is unavailable;
- the request encounters a terminal failure.

The default key-value store contains:

- **`OUTPUT`** — run status, exact prices, charged totals, delivered count, and sanitized per-seed outcomes;
- **`AUDIT`** — aggregate request, retry, byte, mapping, duplicate, enrichment, cache, storage, timing, exact charge-reconciliation metrics, and non-sensitive FREE admission metadata.

Overall status is `SUCCEEDED`, `PARTIAL`, `FAILED`, or `CHARGE_LIMIT_REACHED`.

Admitted FREE runs include a `freeTier` object with the UTC month, claimed slot, remaining allowance, effective result limit, and attempt budget. Rejected FREE runs use stable reasons such as `free_monthly_limit`, `free_run_already_consumed`, or `free_quota_unavailable`. The record never contains an Apify user ID, API token, or internal quota-storage identifier.

Allowance exhaustion and replay complete the Apify run successfully, while `OUTPUT.status` remains `FAILED`; the stable `stopReason`/`freeTier.outcome` remains machine-readable, and identity/quota verification errors still fail the platform run.

### Limitations and data quality

Instagram suggestions are ranked, seed-dependent snapshots. This Actor does not guarantee exhaustive coverage, stable ordering, a fixed response size, a minimum result count, or repeatability between runs. A requested limit can exceed the number of valid suggestions available.

This Actor:

- performs one-hop related-profile discovery only;
- does not search private content or bypass access controls;
- does not include posts, reels, stories, followers, following lists, engagement rates, email verification, website crawling, or historical tracking;
- does not expose arbitrary source responses or internal continuation data;
- does not require or accept customer Instagram credentials, cookies, sessions, or proxy settings.

Public email, phone, website, and address fields are sparse. They appear only when Instagram exposes them publicly, are not independently verified, can be outdated, and are never guaranteed.

### API and CLI use

Call the Actor through the standard Apify Actor Runs API. Read relationship rows from the default dataset and reconciliation metadata from `OUTPUT` and `AUDIT`.

```bash
apify actors call publicsignallabs/instagram-related-profiles \
  --input '{"profiles":["instagram"],"maxResultsPerProfile":20,"enrichProfiles":false}' \
  --output-dataset
```

The Actor also works with the Apify JavaScript and Python clients, REST API, schedules, webhooks, and platform integrations.

### Responsible use

Collect and use public data only where you have a lawful purpose. Respect privacy, intellectual-property rights, platform rules, anti-spam requirements, and applicable data-protection law. Minimize retained data, secure exports, and honor deletion obligations. Do not use unverified contact fields for unlawful or deceptive outreach.

This Actor is unofficial and is not affiliated with or endorsed by Instagram or Meta.

### Support

Use the **Issues** tab on the Actor page. Include the run ID, an input shape with private values removed, expected behavior, and observed behavior. Never include API tokens, cookies, credentials, personal contact values, or other private data.

# Actor input Schema

## `profiles` (type: `array`):

Instagram usernames, @usernames, or canonical profile URLs. The schema accepts up to 1,000 unique seeds; plan-specific limits are detailed in Store Pricing. Batches of about 100 are recommended for shorter recovery cycles.

## `maxResultsPerProfile` (type: `integer`):

Maximum saved results for each seed. Schema range: 1–80; plan-specific effective limits are detailed in Store Pricing. This is a maximum, not a result guarantee.

## `enrichProfiles` (type: `boolean`):

Fetch current follower/following/post counts, biography, links, category, business fields, and available public contacts for every delivered result. Adds $3.60 per 1,000 successful enrichments. Paying users only.

## Actor input object example

```json
{
  "profiles": [
    "instagram"
  ],
  "maxResultsPerProfile": 80,
  "enrichProfiles": false
}
```

# Actor output Schema

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

Current Instagram-suggested profile relationships from the default dataset, ready for preview or export.

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

Run status, seed/result/enrichment billing, delivered totals, and sanitized per-seed outcomes.

## `audit` (type: `string`):

Non-PII aggregate request, retry, mapping, duplicate, storage, enrichment, cache, and charge reconciliation metrics, plus non-sensitive FREE admission metadata. Never contains an Apify user ID, token, or quota-storage identifier.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("publicsignallabs/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 = {}

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

```

## MCP server setup

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