# Instagram Scraper — Creator Vetting, Due-Diligence & Tracking (`ryanclinton/instagram-scraper`) Actor

Instagram Scraper with a creator-intelligence layer: ranked vetting queue, engagement authenticity, breakout detection, brand-fit, and follower-growth history instead of rows. Works as a profile scraper, influencer-vetting tool, and roster tracker. Drop-in compatible field set.

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

## Pricing

Pay per event

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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 Scraper — Creator Vetting, Due-Diligence & Tracking

![Instagram Scraper — skip the spreadsheet, get a ranked creator shortlist](https://apifyforge.com/readme-assets/ryanclinton-instagram-scraper/hero.png)

Paste Instagram creator handles. Get back a ranked due-diligence report that tells you:

- Which creators show strong engagement quality
- Which are growing fastest right now
- Which fit your brand
- Which need a closer look before you commit

No spreadsheet. No influencer-SaaS seat. No manual vetting.

### Ready-to-run examples

One-click, pre-configured versions of this actor for the most common jobs — open one, swap in your handles, and run:

- [Instagram Engagement Rate & Authenticity Checker](https://apify.com/ryanclinton/instagram-scraper/examples/instagram-engagement-rate-authenticity-checker) — read a creator's engagement against its peer tier and flag anomalous engagement to vet.
- [Find Emerging Instagram Creators](https://apify.com/ryanclinton/instagram-scraper/examples/find-emerging-instagram-creators) — surface rising and micro creators ranked by breakout potential.
- [Instagram Influencer Vetting Tool](https://apify.com/ryanclinton/instagram-scraper/examples/instagram-influencer-vetting-tool) — vet creators before you pay: engagement quality, sponsored density, and a risk read.
- [Brand-Fit Creator Finder](https://apify.com/ryanclinton/instagram-scraper/examples/brand-fit-creator-finder) — rank creators by fit to your brand's themes, values, and audience.
- [Track Instagram Creators](https://apify.com/ryanclinton/instagram-scraper/examples/track-instagram-creators) — monitor a roster or competitors and get back only what changed.
- [Instagram Account Analyzer](https://apify.com/ryanclinton/instagram-scraper/examples/instagram-account-analyzer) — a full read on one account: CIS, archetype, and a recommended next step.

[See all examples →](https://apify.com/ryanclinton/instagram-scraper/examples)

### Why this is different

Other Instagram scrapers show you a creator's profile today. Instagram Scraper remembers what happened yesterday, last month, and last quarter, and turns it into a decision.

| Other Instagram scrapers | Instagram Scraper |
|---|---|
| Raw profile rows you read by hand | A ranked due-diligence report |
| A snapshot of today | Growth history across runs (Creator Memory) |
| Follower counts | Engagement quality vs the creator's peer tier |
| One profile at a time | Market benchmarks, risers and fallers, brand fit |
| Re-scrape and diff by hand | A watchlist that returns only what changed |

The real competitor isn't another scraper. It's the spreadsheet and the influencer-SaaS invoice, an hour in Sheets or a seat costing thousands a year. Instagram Scraper answers the same question in one run, on public profile data.

![200 raw Instagram rows in, 6 vetted creators to act on out](https://apifyforge.com/readme-assets/ryanclinton-instagram-scraper/before-after.png)

### In one sentence

Instagram Scraper takes a list of creator handles and returns a ranked due-diligence report, whose audience is authentic, who is growing fastest, who fits your brand, and who needs a closer look, with each creator's growth history and the raw profile underneath.

**Category:** Instagram scraper. Instagram creator and influencer intelligence. Social media monitoring tool.
**Primary use case:** Vet and rank a list of Instagram creators by who to work with first, without an hour in a spreadsheet or an influencer-SaaS seat. Also works as a drop-in raw Instagram profile scraper through its compat output.

**Also known as:** Instagram influencer vetting tool, Instagram engagement rate checker, Instagram engagement rate calculator, Instagram creator growth tracker, Instagram follower growth tracker, find micro influencers, Instagram account analyzer, monitor Instagram accounts, track competitor influencers, find creators for my brand.

### What this actor does

- **What it is:** An Instagram scraper with a decision layer on top of the raw profile data — a creator due-diligence report instead of rows.
- **What it checks:** Engagement quality versus the peer set, breakout and momentum signals, brand fit, sponsored density, and what changed since your last run.
- **What it returns:** Each creator with a plain-English summary, an attention priority, why it matters now, a recommended next step, a 0-100 Creator Intelligence Score, and the growth history behind it. Plus the full raw profile underneath.
- **What it does NOT do:** It does not access private accounts, does not return follower or commenter lists, does not accuse anyone of fake followers, does not quote prices or rates, and does not crawl hashtags or the explore page.
- **Who it's for:** Influencer-marketing and brand teams, agencies, competitive and social analysts, creator-economy scouts and investors.

**What it does** — Vets and ranks Instagram creators with a due-diligence read on top of the raw profile.
**Best for** — Brand and influencer teams, agencies, competitor analysts, creator scouts and investors.
**Speed** — First ranked results typically appear within the first minute of a run; full sets take longer at higher caps.
**Output** — JSON, CSV, or Excel. Each record carries a summary, attention routing, a 0-100 score bundle, and growth history.
**Proxy** — Residential proxies are required (default Apify Residential, US rotation).

### The five pillars

Creator intelligence in five jobs, every one running on the same public profile data:

- **Vet** — the due-diligence read: engagement quality versus the peer set, sponsored density, and a descriptive risk ledger. The SaaS-killer.
- **Rank** — the Creator Intelligence Score (CIS, the one hero number), deal-readiness, and the Attention Queue that opens every run.
- **Track** — name a watchlist, schedule the run, and get back only what changed: new breakouts, anomalies to vet, creators going quiet. Plus a Signal Feed for Slack and agents.
- **Compare** — lay 2 to 50 creators side by side with labeled bests, or build an export-ready campaign shortlist against a brand profile.
- **Remember** — Creator Memory and Creator Replay keep the growth and engagement history the live profile data can't give, plus tier-and-category market benchmarks.

### What you get from one call

**Input:** `{ "mode": "profiles", "usernames": ["nasa", "natgeo", "bbcearth"], "rankBy": "breakoutPotential" }`
**Returns:**
- A ranked Attention Queue: the creators ordered by who to look at first this run.
- For each creator: an archetype (`signalProfile`), why-now reasons (`whyNow`), and a recommended next step (`recommendedAction`).
- A 0-100 score bundle led by the Creator Intelligence Score, plus deal-readiness, engagement-quality, breakout, brand-fit, momentum, and stability scores.
- The engagement-quality read: rate, percentile versus the peer set, and a descriptive band (strong / normal / low / anomalous).
- The growth history behind each creator (days tracked, follower and engagement trajectory), with `firstSightFallback` on first sight rather than a fabricated timeline.
- A run summary with a headline, a daily briefing, executive highlights, and a market snapshot.

**Typical time to first result:** under a minute for the leading creators.
**Typical time to integrate:** minutes — existing pipelines that read raw profile fields work unchanged through the compat output.

![Instagram Scraper features — due-diligence report, engagement quality vs peers, watchlist monitoring, growth memory](https://apifyforge.com/readme-assets/ryanclinton-instagram-scraper/feature-callouts.png)

### What makes this different

- **A due-diligence report, not a row dump** — every run opens on the Attention Queue: which creators to look at first, the engagement-quality read, why now, and a recommended next step, not raw profile order.
- **Growth history nobody else keeps** — the live profile data shows a creator today; Instagram Scraper remembers the trajectory across runs, so Creator Replay can show how a creator grew, peaked, or faded over time. A clone can't backfill history it never collected.
- **Market benchmarks, not just one profile** — engagement quality is read against a tier-and-category peer set ("top 8% of your peer set"), because a 10M account and a 10k account have different normal ranges.

If you were building this yourself, you would need to fetch the public profile substrate, compute per-creator and peer baselines, derive engagement-quality bands, score and rank by the right axis, store follower and engagement history across runs, and write the change-diff logic. Instagram Scraper ships that as one decision layer. It functions as an Instagram creator-intelligence API, producing ranked, explained creator records useful for vetting, discovery, and competitor monitoring.

### Creator Intelligence Score (CIS)

Every creator gets one 0-100 number, the Creator Intelligence Score, so you can sort any list instantly by who is worth your time:

- **80-100** — a strong creator: authentic engagement, healthy growth, worth reviewing first.
- **50-79** — an average creator: nothing wrong, nothing standout. Worth a look in context.
- **0-49** — a weak creator this run: thin engagement, fading momentum, or too little signal to back yet.

CIS is built from growth, engagement quality, consistency, momentum, and history confidence, and it carries a 7- and 30-day trajectory and a market rank once the actor has tracked a creator over time. Sort a roster of 200 handles by CIS and the ones to look at first rise to the top. Everything else in the output is a CIS component or a buyer-specific decision (deal-readiness, brand fit), not a competing number.

### Why teams use Instagram Scraper

- **Vet creators before paying for a campaign** — engagement quality against peers, sponsored density, and a risk read.
- **Find emerging creators before competitors do** — rising accounts ranked ahead of the already-obvious ones.
- **Track creator rosters automatically** — set a watchlist and get back only what changed.
- **Compare creators side by side** — labeled bests across 2 to 50 handles.
- **Replace spreadsheet-based creator reviews** — the analyst's hour, in one run.

### Historical creator data (the moat)

Most Instagram scrapers show you a creator today. Instagram Scraper stores what it saw last week, last month, and last quarter, so every later run is richer than the last. From that history it builds:

- **Growth trajectories** — follower and engagement direction over time, not a single snapshot.
- **Creator Replay** — the full growth story: first seen, peak, current versus peak.
- **Watchlist changes** — what moved across a roster since you last looked.
- **Market benchmarks** — where a creator sits in its tier and category peer set.
- **Market views** — fastest-growing creators, rising and falling creators, most stable creators, and top creators by Creator Intelligence Score.

This compounds with use, and a clone can't backfill history it never collected. The actor reports its own market-memory coverage (creators tracked, observations recorded, days of history) so you can watch the dataset deepen over time, and history fields are labelled `firstSightFallback` on first sight rather than invented.

![Creator Replay — Instagram follower-growth history tracked across runs, with trajectory, peak, and days tracked](https://apifyforge.com/readme-assets/ryanclinton-instagram-scraper/creator-replay.png)

![Top Rising Creators leaderboard ranked by Creator Intelligence Score and 7-day change](https://apifyforge.com/readme-assets/ryanclinton-instagram-scraper/leaderboard.png)

### Why not an influencer-intelligence SaaS?

The interpretation this actor ships is what an influencer-intelligence platform charges thousands a year for. The difference is the model, not just the price:

| Influencer-intelligence SaaS | Instagram Scraper |
|---|---|
| Annual contract | Pay per run |
| Seat licenses | API-first, no seats |
| Closed workflow | Raw data plus decisions you own |
| Expensive for occasional use | Run only when you need it |

You get the engagement-quality read, the scoring, the brand fit, and the growth history on public profile data — exportable and pipeline-ready.

### Quick answers

**What is it?** An Instagram scraper that returns a ranked, explained due-diligence report on a set of creators — who is real, who is growing, who fits your brand — instead of raw profile rows you read by hand.

**How do I check an Instagram creator's engagement rate and audience quality?** Run profiles mode with `rankBy: engagementQuality` (or `authenticity`). Each creator carries an engagement rate, its percentile versus the peer set, and a descriptive band — strong, normal, low, or anomalous to vet — never a fake-follower verdict.

**What makes it different?** Every record carries a Creator Intelligence Score, an engagement-quality band against the peer set, a recommended next step, and the creator's growth history across runs. No other Instagram actor on the Store ships the decision layer.

**What data sources does it use?** Public Instagram profiles only — the same public profile data a logged-out visitor sees. No login, no private accounts, no follower or commenter lists.

**How much does it cost?** Pricing is per result, anchored to the value it replaces — an hour in a spreadsheet or an influencer-SaaS seat costing thousands a year — not to a raw-row scraper. Apify's free tier includes monthly credits to test with. Set a spending limit on any run.

### At a glance

**Quick facts:**
- **Input:** A list of creator handles (or post URLs), plus an optional brand profile, watchlist name, and filters.
- **Output:** Ranked creator records with a Creator Intelligence Score, an engagement-quality read, brand fit, growth history, and a recommended next step. JSON, CSV, or Excel.
- **Modes:** profiles (default), posts, watchlist, historicalSnapshot.
- **Rank axes:** dealReadiness (default), breakoutPotential, engagementQuality, brandFit, momentum, followers, authenticity.
- **Batch size:** Up to 200 handles per run (up to 500 post URLs in posts mode).
- **Proxy:** Residential required (default Apify Residential, US).
- **Watchlist:** Set a name to get back only what changed on the next run.

**Input → Output:**
- Input: A list of creator handles.
- Process: Instagram Scraper reads the public profiles, reads engagement quality against the peer set, scores and ranks the creators, and remembers each one for next time.
- Output: A ranked Attention Queue plus the raw profile data, in JSON, CSV, or Excel.

**Best fit:** Vetting a list of creators before a campaign, finding emerging and micro creators, tracking a competitor or roster of creators week over week, and benchmarking a creator against its peer tier.
**Not ideal for:** Exporting follower or commenter lists, finding creators by hashtag or the explore page, or any fake-follower verdict, contractual, or pricing judgement.
**Does not include:** Private accounts, follower/commenter data, fake-follower verdicts, actual prices or rate quotes, or growth forecasts.

**Problems this solves:**
- How to tell whether an Instagram creator's audience is real before paying for a campaign.
- How to find emerging and micro-influencers in a niche from a handle list.
- How to rank a list of creators by who fits a specific brand.
- How to track a roster or competitor set week over week without diffing exports.

**Data trust:** All live fields come from public Instagram profile data the actor fetches in the run. Engagement-quality bands and percentiles return null when the peer set is too small to rank fairly, and history fields carry `firstSightFallback: true` on first sight rather than inventing a timeline. Private accounts are returned as `isPrivate` and skipped.

**Common questions this actor answers:**
- **Is this creator's engagement authentic?** The Engagement Quality / Vetting view — band, percentile versus peers, and the risk ledger.
- **Who is breaking out in my list right now?** The Breakout / Emerging view, ranked by velocity.
- **Which of these creators fits my brand?** The Brand Fit view, ranked by `brandFit` against your brand profile.
- **What changed across my roster since last week?** Watchlist mode, which leads with a change briefing.
- **Is there an alternative to an influencer-SaaS seat for vetting?** Yes — the Engagement Quality and Brand Fit views cover the core vetting job per run.

### What is an Instagram creator-intelligence tool?

An Instagram creator-intelligence tool turns raw profile data into decisions: whether a creator's audience is authentic, whether they are growing or fading, and whether they fit a brand. Basic Instagram scrapers stop at the profile rows and leave the interpretation to a human in a spreadsheet or an expensive SaaS seat. Instagram Scraper ships that interpretation — engagement-quality bands, scoring, brand fit, and growth history — as the default output, so the answer arrives with the data.

#### What is an Instagram engagement-rate checker and engagement rate calculator?
An Instagram engagement-rate checker (or engagement rate calculator) measures how much a creator's audience actually engages relative to their size, and compares it to peers rather than reporting a raw number. Instagram Scraper returns the engagement rate, its percentile against a tier-and-category peer set, and a descriptive band (strong / normal / low / anomalous), so you can see whether the engagement is normal for that size of creator.

#### What is an Instagram influencer vetting tool?
An Instagram influencer vetting tool checks whether a creator is worth working with before money changes hands: is the engagement real, how commercial is the feed already, what is the risk read. Instagram Scraper does this through the Engagement Quality / Vetting view — engagement band, sponsored density, and a descriptive, evidence-backed risk ledger — never a verdict on the person.

#### What is an Instagram creator growth tracker?
An Instagram creator growth tracker follows how a creator's followers and engagement move over time instead of reporting a single snapshot. Instagram Scraper keeps that history across runs and replays it: days tracked, follower and engagement trajectory, peak, and current-versus-peak, through the Creator Replay / Growth view.

#### What is an Instagram account analyzer?
An Instagram account analyzer reads a creator's public profile and returns a structured read on their audience, engagement, and growth — rather than raw profile fields you interpret yourself. Instagram Scraper works as an account analyzer that pairs the standard profile data with engagement-quality percentiles, a Creator Intelligence Score, brand-fit signals, and a growth timeline across runs.

#### What is an Instagram brand-fit finder?
An Instagram brand-fit finder ranks a list of creators by how well they match a specific brand, rather than by raw follower count. Instagram Scraper takes a brand profile (themes, values, target audience) and returns a `brandFitScore` and plain-English fit reasons for each creator, matched against public profile signals only — so you can rank a shortlist by who actually fits the brand, not who is simply biggest.

### What data can you extract?

Every creator record pairs the full raw profile with a decision layer on top. The raw substrate matches the standard Instagram-scraper field set field-for-field.

| Data point | Source | Availability | Example |
|---|---|---|---|
| **Username, name, bio, category** | Public profile | Always | `handle: "natgeo"`, `category: "Media"` |
| **Follower / following / post counts** | Public profile | Always | `followersCount: 281000000` |
| **Verified, private, external link** | Public profile | Always | `isVerified: true`, `isPrivate: false` |
| **Recent posts (likes, comments, caption)** | Public profile | Always (~12 recent) | `likeCount: 412000` |
| **Creator Intelligence Score (0-100)** | Decision layer | Signals profile | `creatorIntelligenceScore: 84` |
| **Engagement quality + percentile** | Decision layer | Peer set of 10+ | `band: "strong"`, percentile `88` |
| **Attention priority + why now** | Decision layer | Signals profile | `attentionPriority: "high"` |
| **Creator archetype** | Decision layer | Signals profile | `signalProfile: "established-authentic"` |
| **Brand fit + reasons** | Decision layer | When a brand profile is given | `brandFitScore: 76` |
| **Sponsored density** | Decision layer | Signals profile | `commercialLoad: "moderate"` |
| **Growth history + trajectory** | Decision layer | Warms up across runs | `trajectory: "growing"` |
| **Watchlist deltas** | Decision layer | When a watchlist is active | `changeFlags: ["BREAKOUT"]` |

### Why use Instagram Scraper?

Vetting a list of creators is slow. The usual workflow is to scrape each profile, dump the rows into a spreadsheet, eyeball the follower counts and a few recent posts, guess which audiences "look real," and repeat the whole thing next quarter. That is an hour of an analyst's time per shortlist, and it misses the things that matter — whether the engagement is normal for that size of creator, whether they are accelerating or fading, whether their feed is already saturated with ads. The alternative is a seat in an influencer-intelligence platform costing thousands a year.

Instagram Scraper does that interpretation in the run. It reads engagement quality against a peer tier, scores and ranks each creator, surfaces breakouts and risks, and remembers each creator so the next run can report only what changed. The buyer compares the output against an analyst's hour and a SaaS invoice, not against a raw-row scraper's price.

**Key difference:** Other Instagram scrapers give you rows. This actor gives you a creator due-diligence report — who is growing, who looks risky, who fits your brand, and what changed since last time. It competes on the decision layer and the SaaS undercut, not on raw-row price.

### Platform capabilities

- **Scheduling** — run a watchlist daily, weekly, or on any interval, and get back only what changed.
- **API access** — trigger from Python, JavaScript, or any HTTP client.
- **Residential proxy rotation** — required and built in, so the actor reaches public profiles reliably.
- **Monitoring** — Slack or email alerts when runs fail, through Apify integrations.
- **Integrations** — Zapier, Make, Google Sheets, webhooks, and any tool that reads an Apify dataset.

### Features

Before you commit to a creator, this actor answers: is their engagement real, how commercial is their feed already, are they growing or fading, and how do they compare to similar creators. The features below are how it answers each one.

Instagram Scraper ships four input modes and a single decision layer that sits on top of every one of them. The layer vets each creator against its peer set, scores and ranks the list, derives time-decaying signal events, and remembers creators across runs. Everything below is deterministic and present in the output you can sort, filter, and export. It detects breakouts and engagement anomalies across a list of creators and surfaces who to look at first.

**Vet and score**
- **Creator Intelligence Score** — the flagship 0-100 standing on every creator, the one number for sorting and leaderboards. Built from growth, engagement quality, consistency, momentum, and history confidence, with `cisTrajectory` (7- and 30-day change and market rank) once history exists.
- **Engagement quality** — the authenticity read: engagement rate, percentile versus the peer set, and a descriptive band (strong / normal / low / anomalous) with evidence. Cohort-relative and descriptive, never a fake-follower accusation.
- **Score bundle** — a sortable 0-100 set per creator: `dealReadinessScore`, `engagementQualityScore`, `breakoutScore`, `brandFitScore`, `momentumScore`, `stabilityScore`, plus `postingConsistency` and `contentVolatility`, with a machine-readable `scoreEvidence` snapshot. Turn on `explainScores` for each score's components and weights.
- **Sponsored density and risk ledger** — how commercial a feed already is (rate, signals, light/moderate/heavy load, saturation), and a descriptive `riskLedger` (healthy / watch / review / high_uncertainty) with evidence — never a verdict on the person.

**Rank and route**
- **Attention queue** — every creator carries an `attention` block: priority (high / medium / low / none), `whyNow` reasons, a `recommendedAction`, and a respond-within window. Recommended actions are prioritisation steps only (Review, Shortlist, Vet, Track, Compare, Add to watchlist), never outreach or transaction steps.
- **Reranking by axis** — `rankBy` reorders by `dealReadiness`, `breakoutPotential`, `engagementQuality`, `brandFit`, `momentum`, `followers`, or `authenticity`. Each record shows its native rank, its reranked rank, and every axis value at once.
- **Creator archetype and lifecycle** — `signalProfile` (emerging, breakout, established-authentic, engagement-anomaly, dormant, declining, niche-pivoting, unclassified) plus a history-based `creatorLifecycle` (emerging / growing / peak / mature / declining / dormant).

**Track, compare, remember**
- **Watchlist deltas** — set a `watchlistName` on any mode to track a roster across runs. The run leads with a change briefing, then returns per-creator deltas, state transitions, and change flags.
- **Compare and shortlist** — `intent: compare` lays 2 to 50 creators side by side with labeled bests (best for awareness, best niche fit, best value vs risk, most volatile, needs more history); `intent: campaign_shortlist` with a brand profile builds an export-ready ranked shortlist with fit reasons and exclusions.
- **Creator Memory and Replay** — a historical store banks public profile metrics on every creator a run touches, so records carry `history`, `contentMomentum`, `authenticityHistory`, `communitySignals`, and a `creatorReplay` growth story. These warm up with use and are labelled across tracked creators, never "all of Instagram."
- **Market benchmarks** — `marketBenchmarks` places a creator across the tracked market by tier, category, and geo, with honest cold-start until a slice has enough creators.
- **Drop-in compat** — `outputProfile: compat` returns the exact standard profile-plus-posts field set, including the error-code taxonomy, for migration and raw ingestion.

### Use cases for Instagram creator intelligence

![Emerging-Creator Radar and Brand-Fit Finder — Instagram creator discovery products](https://apifyforge.com/readme-assets/ryanclinton-instagram-scraper/discovery-cards.png)

#### Best for vetting creators before a campaign
Use when you have a shortlist and need to know which audiences are real before paying. Run profiles mode with `intent: vet_creators` (or `rankBy: engagementQuality`) and read the Engagement Quality / Vetting view. Used by brand and influencer-marketing teams to filter recommended from avoid. Key outputs: `engagementQuality`, `sponsoredDensity`, `riskLedger`, `confidence`.

#### Best for finding emerging and micro-influencers
Use when you need rising creators in a niche before they are expensive. Run profiles mode with `rankBy: breakoutPotential` and read the Breakout / Emerging view, ranked by the Emerging-Creator Radar. Key outputs: `signalProfile`, `breakoutScore`, `radarRank`, `scoreEvidence`.

#### Best for matching creators to a brand
Use when you need to rank a list against a specific brand. Supply a `brandProfile` (themes, values, audience) and read the Brand Fit view. Key outputs: `brandFit`, `brandFitScore`, `creatorShape`, `scores`.

#### Best for tracking a roster or competitor set
Use when you track a roster or competitor set week over week. Run any mode with a `watchlistName` on a schedule. The run leads with a change briefing and flags who broke out, who is fading, and who went quiet. Key outputs: `watchlist`, `riskLedger`, `changeStory`, `scores`.

#### Best for benchmarking a creator's growth
Use when you need a creator's growth story, not a single snapshot. Run profiles mode and read the Creator Replay / Growth view. Key outputs: `history`, `contentMomentum`, `creatorReplay`, `cisTrajectory`.

![Creator Market Map — Instagram creators grouped into leaders, challengers, emerging, and cooling](https://apifyforge.com/readme-assets/ryanclinton-instagram-scraper/market-map.png)

### Track creators automatically (monitor accounts and competitor influencers)

Set a `watchlistName` once, then reuse it on a schedule. The actor remembers the roster and, on every later run, returns only what changed:

- **Run it once** — find and rank a set of creators, and start tracking them.
- **Run it weekly (or daily)** — see who broke out, who is fading, who went quiet, and who needs another look, with a plain-English change briefing at the top. You are never diffing two CSV exports by hand.

That turns a one-shot scrape into a recurring creator-monitoring feed. Add a brand profile to also see whether tracked creators are drifting closer to or further from your positioning.

![Watchlist change feed — what changed across tracked Instagram creators since the last run](https://apifyforge.com/readme-assets/ryanclinton-instagram-scraper/change-feed.png)

**Common monitoring jobs:**
- Track a roster of signed or shortlisted creators week over week
- Monitor a competitor's creator set to spot who they are activating
- Watch emerging-creator radar picks to catch rising accounts before they get expensive
- Get a change briefing delivered to Slack or email via Apify's webhook and Zapier integrations

**How it works:** Pass the same `watchlistName` on each scheduled run. Instagram Scraper reads each creator, compares against what it last saw, and returns only the delta — so you are not diffing two CSV exports by hand.

### When to use Instagram Scraper

**Best for:** vetting a list of 10 to 200 creators before a campaign, weekly or daily roster and competitor monitoring, finding emerging and micro creators from a handle list, and benchmarking a creator against its peer tier.
**Not ideal for:** exporting follower or commenter lists (not available by design), finding creators by hashtag or the explore page (login-walled, so discovery is via handle lists and similar-creator suggestions), or any fake-follower verdict, contractual, or pricing judgement — none of those ship here.

### How to vet Instagram creators with Instagram Scraper

1. **Enter your creator handles** — pick profiles mode (the default) and paste handles, with or without `@`. The default run analyses `nasa`, `natgeo`, and `bbcearth`.
2. **Set how to rank** — `dealReadiness` is the default and puts who to look at first at the top. Switch to `engagementQuality` to vet, `breakoutPotential` to find emerging creators, or `brandFit` with a brand profile.
3. **Run the actor** — click Start. The leading ranked creators land within about a minute; larger lists take longer.
4. **Read or download results** — open the Attention Queue view in the console, or export JSON, CSV, or Excel from the Dataset tab.

### First run tips

- **Start with the default** — `{ "mode": "profiles", "usernames": ["nasa", "natgeo", "bbcearth"], "rankBy": "breakoutPotential" }` returns a ranked queue in one run and shows the actor's shape.
- **Open the Attention Queue view first** — the dataset has many views; the default Attention Queue is the 5-second read. The full record set is always there for analysts.
- **Set a watchlist name to unlock monitoring** — without it you get a one-shot ranking. With it, the next run returns only what changed. History warms up over time, so start it on day one.
- **Give a brand profile for brand fit** — `brandFit` and the Brand Fit view need a `brandProfile`; without one those fields are null.
- **Private accounts are skipped** — a private creator is returned as `isPrivate` with an error code, not as empty data. This is by design (public profiles only).

### Input parameters

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `mode` | string | No | `profiles` | One of `profiles`, `posts`, `watchlist`, `historicalSnapshot`. |
| `usernames` | string[] | For profiles/watchlist | `["nasa","natgeo","bbcearth"]` | Handles with or without `@`, or profile URLs. Up to 200. |
| `rankBy` | string | No | `dealReadiness` | `dealReadiness`, `breakoutPotential`, `engagementQuality`, `brandFit`, `momentum`, `followers`, `authenticity`. |
| `posts` | string[] | For posts mode | — | Instagram post URLs or shortcodes. Up to 500. |
| `intent` | string | No | — | A job preset: `vet_creators`, `find_emerging`, `track_roster`, `brand_match`, `campaign_shortlist`, `compare`. Anything you set explicitly still wins. |
| `compareUsernames` | string[] | For compare | — | 2 to 50 handles to compare side by side. |
| `brandProfile` | object | No | — | Themes, values, audience for the brand-fit engine, plus optional `mustInclude` / `avoid` terms. Matched against public profile signals only. |
| `outputPack` | string | No | `raw` | `raw`, `brand`, `agency`, `analyst`, `scout`, `campaign`, `portfolio`. agency / campaign / portfolio emit client-ready deliverables. |
| `watchlistName` | string | No | — | Set a name to enable cross-run monitoring on any mode. |
| `filters` | object | No | — | Public profile attributes only: followerTier, verified, category, language. No follower/commenter filters. |
| `alerts` | object | No | — | Tune the Signal Feed and Signal Cards: `minAttentionScore`, `onlyNewSinceLastRun`, `breakoutMinMultiple`, `flagAnomalies`, `severity`. |
| `enableCreatorMemory` | boolean | No | `true` | Keep the growth and engagement history that powers trajectories and benchmarks. Turn off to opt this run out of the shared history. |
| `explainScores` | boolean | No | `false` | Add each score's components and weights to every record. |
| `taskPack` | string | No | `none` | A curated, product-shaped summary record for a specific job (e.g. engagement-authenticity, emerging creators). |
| `date` | string | For historicalSnapshot | — | `YYYY-MM-DD`: reconstruct the market as of this date from tracked history. |
| `category` | string | No | — | Niche/category to slice on for snapshots and benchmarks. |
| `tier` | string | No | — | Follower tier (nano / micro / mid / macro / mega) for snapshots and benchmarks. |
| `geo` | string | No | — | Geo tag for benchmarks and the historical snapshot. |
| `changeWindowDays` | integer | No | — | Produce a "what changed" read over this many days from tracked history. |
| `maxRecentPostsPerProfile` | integer | No | `12` | Recent posts used per creator for the engagement read. Max 50. |
| `maxPostsDeep` | integer | No | `0` | Optionally pull deeper post history (more runtime and proxy cost). Max 300. |
| `outputProfile` | string | No | `signals` | `signals` (full decision layer), `compat` (standard field set), `minimal` (IDs + URLs). |
| `proxyConfiguration` | object | No | Residential US | Residential proxies required. |

#### Input examples

- **Vet a shortlist before a campaign (the canonical first run):**
```json
{ "mode": "profiles", "usernames": ["nasa", "natgeo", "bbcearth"], "rankBy": "breakoutPotential" }
````

- **Track a roster on a schedule:**

```json
{ "mode": "watchlist", "usernames": ["natgeo", "nasa"], "watchlistName": "science-creators", "rankBy": "momentum" }
```

- **Rank a list against a brand:**

```json
{ "mode": "profiles", "usernames": ["natgeo", "bbcearth"], "intent": "brand_match", "brandProfile": { "themes": ["nature", "science"], "values": ["education"], "audience": "curious adults" } }
```

#### Input tips

- **Start with defaults** — profiles mode plus `breakoutPotential` covers most first runs.
- **Batch in one run** — 200 handles in one run is more efficient than 200 single-profile runs.
- **Use compat for raw ingestion** — set `outputProfile: "compat"` when you only need the standard profile field set for an existing pipeline.

### Output example

A trimmed signals-profile record (the default `outputProfile: "signals"`), with invented illustrative values:

```json
{
  "recordType": "creatorDueDiligence",
  "entityType": "creator",
  "entityId": "787132",
  "handle": "natgeo",
  "summary": "Large, steady creator with engagement above its peer tier.",
  "whyNow": [
    "Engagement rate in the 88th percentile of its follower tier.",
    "Posting cadence steady over the last 90 days."
  ],
  "recommendedAction": "Shortlist for review",
  "attention": {
    "attentionPriority": "high",
    "whyNow": ["Engagement holding above the peer-tier median."],
    "deprioritizationReasons": [],
    "recommendedAction": "Shortlist for review",
    "respondWithinDays": 5
  },
  "signalProfile": {
    "label": "established-authentic",
    "strength": 0.79,
    "version": "1.0",
    "evidence": ["Engagement at or above cohort", "Steady posting cadence"]
  },
  "creatorLifecycle": "mature",
  "scores": {
    "creatorIntelligenceScore": 84,
    "dealReadinessScore": 81,
    "engagementQualityScore": 88,
    "breakoutScore": 22,
    "brandFitScore": 76,
    "momentumScore": 41,
    "stabilityScore": 90,
    "postingConsistency": 93,
    "contentVolatility": 12
  },
  "engagementQuality": {
    "engagementRate": 0.021,
    "vsCohort": 88,
    "band": "strong",
    "evidence": ["Median likes high for follower tier", "Comment-to-like ratio healthy"]
  },
  "sponsoredDensity": {
    "rate": 0.08,
    "signals": ["brand tags"],
    "commercialLoad": "light",
    "sponsoredPosts30d": 1,
    "organicPosts30d": 11,
    "saturation": "low"
  },
  "riskLedger": {
    "riskState": "healthy",
    "riskReasons": [],
    "safeLanguage": true
  },
  "history": {
    "daysTracked": 0,
    "firstSightFallback": true,
    "trajectory": "flat"
  },
  "confidence": {
    "overall": 0.7,
    "grade": "medium",
    "drivers": ["12 recent posts available"],
    "limitations": ["No prior history yet — first sight"]
  },
  "scoreEvidence": {
    "recentPostsUsed": 12,
    "medianLikes": 412000,
    "engagementRate": 0.021,
    "cohortPercentile": 88,
    "historyDays": 0
  },
  "substrate": {
    "username": "natgeo",
    "fullName": "National Geographic",
    "userId": "787132",
    "biography": "Taking our understanding of the planet further.",
    "followersCount": 281000000,
    "followingCount": 142,
    "postsCount": 31200,
    "isVerified": true,
    "isPrivate": false,
    "category": "Media",
    "externalUrl": "https://on.natgeo.com/instagram",
    "profilePicUrl": "https://instagram.example/natgeo.jpg",
    "posts": [
      { "postId": "C9xExample01", "shortcode": "C9xExample01", "caption": "Dawn over the Serengeti.", "likeCount": 412000, "commentCount": 1840, "timestamp": "2026-06-17T09:12:00Z", "isVideo": false }
    ]
  }
}
```

A compat record (`outputProfile: "compat"`) — the exact standard Instagram-scraper shape, no decision fields:

```json
{
  "username": "natgeo",
  "fullName": "National Geographic",
  "userId": "787132",
  "biography": "Taking our understanding of the planet further.",
  "followersCount": 281000000,
  "followingCount": 142,
  "postsCount": 31200,
  "isVerified": true,
  "isPrivate": false,
  "category": "Media",
  "externalUrl": "https://on.natgeo.com/instagram",
  "profilePicUrl": "https://instagram.example/natgeo.jpg",
  "posts": [
    { "postId": "C9xExample01", "shortcode": "C9xExample01", "caption": "Dawn over the Serengeti.", "likeCount": 412000, "commentCount": 1840, "timestamp": "2026-06-17T09:12:00Z", "isVideo": false, "viewCount": null }
  ]
}
```

![Instagram Scraper Attention Queue output — handle, priority, why now, archetype, CIS, and recommended action](https://apifyforge.com/readme-assets/ryanclinton-instagram-scraper/output-table.png)

### Output fields

| Field | Type | Description |
|---|---|---|
| `recordType` | string | `creatorDueDiligence`, `summary`, `comparison`, `shortlist`, `leaderboard`, `signalCard`, `event`, `signalFeed`, `marketSnapshot`, `creatorReplay`, `coverage`, or `error`. Omitted on compat profile rows. |
| `entityType` | string | `creator` or `post`. |
| `entityId` | string | Stable Instagram user/post ID — the cross-run dedup key. |
| `handle` | string | Creator handle, normalised without `@`. |
| `summary` | string | One-line plain-English read of the record. |
| `whyNow` | string\[] | Up to three lines on why this creator is worth a look this run. |
| `recommendedAction` | string | A prioritisation instruction (Review, Shortlist, Vet, Track, Compare, Add to watchlist), never an outreach or transaction step. |
| `attention` | object | `attentionPriority`, `whyNow`, `recommendedAction`, and `respondWithinDays`. |
| `signalProfile` | object | Creator archetype with evidence. |
| `creatorLifecycle` | string | Growth stage from tracked history: emerging / growing / peak / mature / declining / dormant. |
| `scores` | object | 0-100 bundle led by `creatorIntelligenceScore`, plus deal-readiness, engagement-quality, breakout, brand-fit, momentum, stability, posting consistency, content volatility. |
| `engagementQuality` | object | Engagement rate, percentile versus the peer set, a band, and evidence. Descriptive, never a fake-follower verdict. |
| `sponsoredDensity` | object | How commercial the feed is: rate, signals, commercial load, sponsored vs organic posts, saturation. |
| `riskLedger` | object | Descriptive, evidence-backed risk read (healthy / watch / review / high\_uncertainty). Never a verdict on the person. |
| `brandFit` | object | Fit to the supplied brand profile: a 0-100 score and reasons. Null when no brand profile is given. |
| `history` | object | Creator timeline from tracked history. `firstSightFallback: true` on first sight, never a fabricated timeline. |
| `cisTrajectory` | object | The Creator Intelligence Score's 7- and 30-day change and market rank, from tracked history. |
| `marketBenchmarks` | object | Where this creator sits across the tracked market by tier, category, and geo. Honest cold-start. |
| `watchlist` | object | What changed since last run, when a watchlist is active. |
| `substrate` | object | The full raw profile and recent posts (the standard field set). |
| `errorCode` | string | On error records: stable code (`NOT_FOUND`, `PROFILE_PRIVATE`, `INSUFFICIENT_HISTORY`, `BOT_PROTECTION`, and more). |

### Dataset views

The dataset is organised as progressive disclosure: the default view is a 5-second read, and deeper views hold the detail. Open the one that matches your job.

1. **Attention Queue (default)** — which creators to look at first, their deal-readiness, archetype, why now, and next step.
2. **Ignore Queue** — the "skip these" read: creators with deprioritization reasons.
3. **Engagement Quality / Vetting** — engagement band and percentile, sponsored density, and the risk ledger. The brand/agency money-saver.
4. **Breakout / Emerging** — who is breaking out and emerging, by velocity, with the radar rank.
5. **Brand Fit** — creators ranked by fit to your brand profile, with reasons.
6. **Creator Replay / Growth** — per-creator growth story: history, content momentum, and the replay timeline.
7. **Creator Comparison** — 2 to 50 creators side by side with labeled bests.
8. **Campaign Shortlist** — export-ready ranked creators with fit reasons and exclusions.
9. **New Since Last Run** — what changed since the previous watchlist run, by change severity.
10. **Signal Feed** — the day's events by importance and severity, for Slack, Zapier, and agents.
11. **Compat Export** — the standard profile-plus-posts field set, no decision fields, for migrators.
12. **Coverage & Errors** — run coverage plus failures with a stable error code.
13. **Summary** — run-level rollup: headline, daily briefing, executive highlights, market snapshot, movers, and the time-saved estimate.

### Vet Instagram creators using the API

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("ryanclinton/instagram-scraper").call(run_input={
    "mode": "profiles",
    "usernames": ["nasa", "natgeo", "bbcearth"],
    "rankBy": "breakoutPotential"
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    if item.get("recordType") == "creatorDueDiligence":
        eq = (item.get("engagementQuality") or {}).get("band")
        print(f"{item['handle']}: {item['attention']['attentionPriority']} — engagement {eq} — {item['summary']}")
```

#### JavaScript

```javascript
import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: "YOUR_API_TOKEN" });

const run = await client.actor("ryanclinton/instagram-scraper").call({
    mode: "profiles",
    usernames: ["nasa", "natgeo", "bbcearth"],
    rankBy: "breakoutPotential"
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) {
    if (item.recordType === "creatorDueDiligence") {
        const band = item.engagementQuality?.band;
        console.log(`${item.handle}: ${item.attention.attentionPriority} — engagement ${band} — ${item.summary}`);
    }
}
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/ryanclinton~instagram-scraper/runs?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "mode": "profiles", "usernames": ["nasa", "natgeo", "bbcearth"], "rankBy": "breakoutPotential" }'

curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_API_TOKEN&format=json"
```

### How Instagram Scraper works

**Mental model:** Handles → public profiles → engagement-quality read against the peer set → scoring and ranking → growth history → structured output.

![Instagram Scraper intelligence stack — from creator handles to ranked decisions](https://apifyforge.com/readme-assets/ryanclinton-instagram-scraper/intelligence-layers.png)

#### Read public profile data

Instagram Scraper reads public Instagram profiles over required residential proxies, with no login and no private-account access. The raw record matches the standard Instagram-scraper field set exactly, so the compat output is a true drop-in. Private accounts are returned as `isPrivate` and skipped.

#### Read engagement quality against the peer set

Each creator's engagement is read relative to its peer tier, because a 10M account and a 10k account have different normal ranges. The result is a descriptive band and a percentile, never a verdict — `engagement_anomaly` flags both unusually low and unusually high engagement for a creator to vet, not a "fake" judgement.

#### Score, rank, and route

Each creator gets the Creator Intelligence Score and the supporting bundle, an archetype, and an attention priority with a recommended next step. The list is reordered by the axis you chose, with the reason attached to each record.

#### Remember across runs

Public profile metrics are remembered across runs, so records carry growth history, content momentum, and benchmarks. First sight is reported honestly with `firstSightFallback`, never invented.

### Tips for best results

1. **Lead with the right rank axis.** `engagementQuality` or `authenticity` to vet, `breakoutPotential` for emerging creators, `brandFit` (with a brand profile) for matching, `momentum` for roster tracking.
2. **Run watchlists on a schedule.** The change briefing and deltas are most useful as a recurring feed, and history sharpens with each run.
3. **Size the list for peer stats.** Engagement-quality percentiles need a peer set of at least 10; add more handles in the same tier and niche for a fairer read.
4. **Give a brand profile to unlock brand fit.** Without a `brandProfile`, `brandFit` and the Brand Fit view are null.
5. **Use output packs for deliverables.** Set `outputPack` to `agency`, `campaign`, or `portfolio` for a client-ready record instead of raw data.
6. **Combine with downstream actors** to push the shortlist into a CRM or sheet (see below).

### Combine with other Apify actors

| Actor | How to combine |
|---|---|
| [HubSpot Lead Pusher](https://apify.com/ryanclinton/hubspot-lead-pusher) | Push the ranked creator shortlist into HubSpot for campaign tracking. |
| [Website Contact Scraper](https://apify.com/ryanclinton/website-contact-scraper) | Take the creators' bio links and pull contact details from their sites. |
| [Company Deep Research](https://apify.com/ryanclinton/company-deep-research) | Research the brands behind sponsored creators surfaced in a list. |
| [Trustpilot Review Analyzer](https://apify.com/ryanclinton/trustpilot-review-analyzer) | Cross-check brand sentiment for products a creator promotes. |
| [Website Change Monitor](https://apify.com/ryanclinton/website-change-monitor) | Pair watchlist monitoring with website monitoring for a fuller competitor view. |

![Instagram Scraper vs a typical Instagram scraper — raw data plus the decision layer](https://apifyforge.com/readme-assets/ryanclinton-instagram-scraper/comparison.png)

### Limitations

- **Public profiles only.** The actor reads public Instagram profile data and does not log in, access private accounts, or attempt to bypass access restrictions. Private accounts are returned as `isPrivate` and skipped.
- **No follower or commenter data.** It returns aggregate public profile metrics only, never individual follower or commenter lists or personal data.
- **No hashtag or explore discovery.** Instagram's hashtag and explore pages are login-walled, so discovery is via handle and URL lists plus store-backed similar-creator suggestions and the Emerging-Creator Radar, not hashtag crawling. This is an honest limitation, surfaced rather than faked.
- **Engagement quality is descriptive.** Bands and the risk ledger are cohort-relative reads with evidence, never a fake-follower verdict on a person or account.
- **Recent posts by default.** The public profile data returns roughly a dozen recent posts; deeper history via `maxPostsDeep` costs more runtime and proxy.
- **History warms up.** Cross-run history, benchmarks, and market views are thin until the actor has seen a creator over time; first sight is reported honestly, never fabricated.
- **Residential proxies required.** Instagram restricts automated access from datacenter IPs; the actor halts after repeated block responses and reports it through `botProtection` rather than returning silent empty rows.

### Integrations

- [Zapier](https://apify.com/integrations/zapier) — send a daily watchlist briefing to Slack or email.
- [Make](https://apify.com/integrations/make) — route the Attention Queue into a campaign-planning board.
- [Google Sheets](https://apify.com/integrations/google-sheets) — export ranked creators and the vetting read to a shared sheet.
- [Apify API](https://docs.apify.com/api/v2) — trigger runs and pull the dataset from any client.
- [Webhooks](https://docs.apify.com/platform/integrations/webhooks) — fire on run completion to push the Signal Feed downstream.
- [LangChain / LlamaIndex](https://docs.apify.com/platform/integrations) — feed the structured decision layer into an AI agent.

### What this actor does NOT do

Honest scope, stated up front:

- **No private accounts.** Public profiles only; private accounts are returned as `isPrivate` and skipped, with no login or auth circumvention.
- **No follower or commenter data.** No follower/following lists, no commenter harvesting, no individual PII.
- **No fake-follower verdicts.** Engagement quality and the engagement-anomaly signal are descriptive cohort-relative bands with evidence, never an accusation that an audience is bought.
- **No hashtag or explore crawling.** Discovery is via handle and URL lists and store-backed similar-creator suggestions.
- **No outreach or transaction steps.** Recommended actions are prioritisation only (Review, Shortlist, Vet, Track, Compare), never Contact, DM, Hire, or Pay; no contact data is returned.
- **No prices or rate quotes.** `rateCardProxy` is a relative market-position band with evidence, never a dollar figure or a quote.
- **No forecasts.** Breakout, momentum, and valuation describe current and historical signals; the actor never predicts a future event or date.
- **No minors targeting, private content, or biometric inference.**

### Responsible use

- Instagram Scraper reads publicly available Instagram profile data. It does not bypass authentication, CAPTCHAs, or access restricted content, and it does not access private accounts or follower lists.
- Users are responsible for ensuring their use complies with applicable laws and platform terms, including data protection regulations in their jurisdiction.
- Do not use extracted data for spam, harassment, or unauthorized purposes.
- For guidance on web scraping legality, see [Apify's guide](https://blog.apify.com/is-web-scraping-legal/).

### FAQ

**Can I use this to check for fake followers on an Instagram account?** Not as a verdict, no — Instagram Scraper is not a fake-follower detector and does not make that accusation. What it does is an engagement authenticity check: it measures each creator's engagement rate against their peer tier, surfaces anomalous-engagement flags with evidence, and gives you a descriptive band (strong / normal / low / anomalous to vet). That is the right input for an informed vetting call, not an automated fake-follower judgement.

**Can I track creators over time?** Yes. Set a `watchlistName` and reuse it on a schedule. After the first run, the actor returns only what changed — new breakouts, anomalies to vet, creators going quiet — with a change briefing at the top, and it banks each creator's growth history so later runs show the trajectory.

**Can I find micro-influencers and emerging creators?** Yes. Run profiles mode with `rankBy: breakoutPotential` and read the Breakout / Emerging view. It ranks small-to-mid creators who are rising early, with a radar rank, ahead of the already-obvious accounts.

**Can I compare two or more creators side by side?** Yes. Use `intent: compare` with 2 to 50 handles. You get a Creator Comparison record with labeled bests — best for awareness, best niche fit, best value vs risk, most volatile, and which need more history — so you can pick between candidates without eyeballing rows.

**Does it work on private accounts?** No. Instagram Scraper reads public profile data only. Private accounts are returned as `isPrivate` and skipped, with no login or auth circumvention, and it never returns follower or commenter lists.

**What is the difference between an Instagram scraper and Instagram Scraper's decision layer?** A basic Instagram scraper returns profile rows you read yourself. Instagram Scraper returns those rows vetted, scored, and ranked — whose audience is authentic, who is growing, who fits your brand — so the answer arrives with the data.

**How do I find creators for my brand on Instagram?** Supply a `brandProfile` with your brand's themes, values, and target audience in the input. Instagram Scraper ranks every creator on the list by brand fit, returns a `brandFitScore` and plain-English fit reasons for each one, and optionally builds a `campaign_shortlist` of ranked candidates with exclusion reasons for the ones that do not fit.

**Is Instagram Scraper an Instagram follower growth tracker?** Yes, across runs. It stores each creator's public follower count and engagement metrics every time a run touches them, so subsequent runs can show the trajectory — growing, peaking, mature, declining, or dormant — rather than a single snapshot. The Creator Replay view shows the full history of what was recorded across all runs.

**What does Instagram Scraper give me as an Instagram account analyzer?** For each handle you submit, it returns: a raw public profile (followers, posts, bio, verified status), an engagement-quality read against a peer set (rate, percentile, band), a Creator Intelligence Score, an attention priority and recommended next step, brand-fit signals if you give a brand profile, and the creator's growth history across runs. That is the standard "account analysis" job without a SaaS seat or a spreadsheet.

**How do I check if an Instagram creator's engagement is authentic?** Run profiles mode with `rankBy: engagementQuality` or `authenticity` and read the Engagement Quality / Vetting view. Each creator carries an engagement rate, its percentile versus the peer set, and a descriptive band — strong, normal, low, or anomalous to vet. It is a cohort-relative description, never a fake-follower verdict.

**How do I rank creators for a specific brand?** Supply a `brandProfile` with themes, values, and audience, then read the Brand Fit view. Each creator gets a `brandFitScore` and plain-English fit reasons, matched against public profile signals only.

**What does this actor return that a raw Instagram scraper doesn't?** A Creator Intelligence Score, an engagement-quality band against the peer set, a recommended next step, brand fit, sponsored density, a risk ledger, and the creator's growth history across runs.

**Can I migrate from a standard Instagram scraper without changing my code?** Yes. The inputs are handles and URLs as usual, and `outputProfile: "compat"` returns the exact standard profile-plus-posts field set, including the error-code taxonomy, so existing downstream code works unchanged.

**Can I find creators by hashtag?** No. Instagram's hashtag and explore pages are login-walled, so this actor does not crawl them. Discovery is via handle and URL lists plus store-backed similar-creator suggestions and the Emerging-Creator Radar.

**Does it download photos, videos, or access private accounts?** No. It reads public profile data only, returns no media files, and skips private accounts as `isPrivate`.

**Does it tell me what to pay a creator?** No. It returns a relative market-position band with evidence (`rateCardProxy`), never an actual price or rate quote.

**Is it a practical alternative to an influencer-intelligence SaaS for vetting?** For the core vetting job — engagement quality against peers, sponsored density, brand fit, and growth history per run — yes, on public profile data and at a per-result cost. It is not a full managed platform, and it does not return private-audience demographics.

**Is it legal to scrape Instagram with this actor?** It reads only public profile data and does not bypass authentication or access private accounts. Whether your use is permitted depends on your jurisdiction and intended use, including data-protection and platform-terms considerations; consult legal counsel for your specific case.

### Help us improve

If you encounter issues, you can help us debug faster by enabling run sharing in your Apify account:

1. Go to [Account Settings > Privacy](https://console.apify.com/account/privacy)
2. Enable **Share runs with public Actor creators**

This lets us see your run details when something goes wrong, so we can fix issues faster. Your data is only visible to the actor developer, not publicly.

### Support

Found a bug or have a feature request? Open an issue in the Issues tab on this actor's page. For custom solutions or enterprise integrations, reach out through the Apify platform.

# Actor input Schema

## `mode` (type: `string`):

What you're starting from. profiles (default) ranks a set of creators with the full intelligence layer. posts analyses specific post URLs. watchlist tracks a roster across runs and reports only what changed. historicalSnapshot reconstructs a past market state from tracked history.

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

Instagram handles (with or without @) or profile URLs. Used in profiles and watchlist modes. The default run analyses nasa, natgeo, and bbcearth.

## `rankBy` (type: `string`):

How to order the results. dealReadiness (default) puts who to look at first for a deal at the top. breakoutPotential surfaces who's popping now. engagementQuality, brandFit, momentum, followers, and authenticity are also available.

## `posts` (type: `array`):

Instagram post URLs (or shortcodes) for posts mode. Returns what's notable about each post.

## `intent` (type: `string`):

Pick the job and the actor sets a sensible mode, ranking, and output pack for you. Anything you set explicitly still wins. compare lays creators side by side; campaign\_shortlist builds an export-ready shortlist against a brand.

## `compareUsernames` (type: `array`):

2 to 50 handles to compare side by side (use with intent = Compare creators). Produces a comparison with labeled bests.

## `brandProfile` (type: `object`):

Describe your brand for the brand-fit engine: themes, values, audience the brand targets, plus optional mustInclude / avoid terms for a campaign shortlist. All matching is against public profile signals only.

## `outputPack` (type: `string`):

Shape the output for a buyer. brand and agency add a vetting read; agency, campaign, and portfolio emit client-ready deliverables (recommended/consider/avoid, a campaign shortlist, or a creator mix by funnel stage). raw is the full record set.

## `watchlistName` (type: `string`):

Set a name to enable cross-run monitoring on ANY mode. The actor remembers this roster and, on the next run, returns only what changed: new breakouts, anomalies to vet, creators going quiet — with a change briefing first. Use the same name on a schedule for a daily feed.

## `filters` (type: `object`):

Keep only creators matching public profile attributes: followerTier (nano/micro/mid/macro/mega), verified, category, language. No follower or commenter filters — public profile attributes only.

## `alerts` (type: `object`):

Tune the Signal Feed and Signal Cards: minAttentionScore, onlyNewSinceLastRun, breakoutMinMultiple, flagAnomalies, severity. Cards fire for creators above the threshold.

## `enableCreatorMemory` (type: `boolean`):

Keep the growth + engagement history that powers trajectories, benchmarks, and the market views. On by default. Turn off to opt this run out of the shared history (public profile metrics only; no private or follower data is ever stored).

## `explainScores` (type: `boolean`):

Add a breakdown of each score's components and weights to every record — a no-magic audit view.

## `taskPack` (type: `string`):

Add a curated, product-shaped summary record built for a specific job — e.g. an engagement-authenticity check or an emerging-creator shortlist. Built from the same signals; no extra fetch. none = no pack.

## `date` (type: `string`):

For historicalSnapshot mode: reconstruct the market as it stood on this date (YYYY-MM-DD), drawn from tracked history. Returns insufficientHistory for dates before coverage began.

## `category` (type: `string`):

For historicalSnapshot and benchmarks: the creator niche or category to slice on (e.g. fitness, beauty).

## `tier` (type: `string`):

For historicalSnapshot and benchmarks: the follower tier to slice on.

## `geo` (type: `string`):

Optional geo tag for benchmarks and the historical snapshot (e.g. UK, US). Used as a benchmark axis where the store has enough creators.

## `changeWindowDays` (type: `integer`):

Produce a 'what changed' read for the queried creators over this many days, drawn from tracked history — even without a prior watchlist run. Leave empty to skip.

## `maxRecentPostsPerProfile` (type: `integer`):

Cap on recent posts used per creator for the engagement read. The public profile API returns roughly a dozen recent posts.

## `maxPostsDeep` (type: `integer`):

Optionally pull deeper post history (more runtime and proxy cost). 0 uses just the recent posts from the profile API.

## `outputProfile` (type: `string`):

signals (default) adds the full decision layer — vetting, engagement quality, brand fit, scores, history, deltas. compat returns the standard profile + posts field set for drop-in migration and raw ingestion (no decision layer). minimal returns IDs and URLs only.

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

Residential proxies are required — Instagram restricts automated access from shared datacenter IPs. The default uses Apify Residential with US rotation. Leave as-is unless you know you need a different region.

## Actor input object example

```json
{
  "mode": "profiles",
  "usernames": [
    "nasa",
    "natgeo",
    "bbcearth"
  ],
  "rankBy": "breakoutPotential",
  "outputPack": "raw",
  "enableCreatorMemory": true,
  "explainScores": false,
  "taskPack": "none",
  "maxRecentPostsPerProfile": 12,
  "maxPostsDeep": 0,
  "outputProfile": "signals",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `attentionQueue` (type: `string`):

Which creators to look at first, their deal-readiness, archetype, why now, and recommended next step.

## `ignoreQueue` (type: `string`):

Creators to deprioritise with reasons and low attention priority.

## `engagementQuality` (type: `string`):

Engagement band and percentile, sponsored density, and the risk ledger for brand/agency vetting.

## `breakoutEmerging` (type: `string`):

Creators breaking out and emerging, ordered by velocity, for scouts and brands.

## `brandFit` (type: `string`):

Creators ranked by fit to the supplied brand profile with plain-English reasons.

## `creatorReplayGrowth` (type: `string`):

Per-creator growth story: history, content momentum, and the replay timeline.

## `creatorComparison` (type: `string`):

Creators side by side with labeled bests across awareness, niche-fit, value-risk, and volatility.

## `campaignShortlist` (type: `string`):

Export-ready ranked creators with brand-fit reasons and exclusions.

## `newSinceLastRun` (type: `string`):

What changed since the previous watchlist run, by change severity.

## `signalFeed` (type: `string`):

Today's events by importance and severity — breakouts, momentum drops, anomalies, dormant creators.

## `compat` (type: `string`):

Standard Instagram profile and recent-posts field set with no decision fields, for drop-in migration.

## `coverageErrors` (type: `string`):

Run coverage plus failures with a stable error code and a human-readable message.

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

Run-level rollup: headline, daily briefing, executive highlights, market snapshot, and movers.

## `allItems` (type: `string`):

No description

# 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 = {
    "mode": "profiles",
    "usernames": [
        "nasa",
        "natgeo",
        "bbcearth"
    ],
    "rankBy": "breakoutPotential",
    "outputPack": "raw",
    "outputProfile": "signals"
};

// Run the Actor and wait for it to finish
const run = await client.actor("ryanclinton/instagram-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 = {
    "mode": "profiles",
    "usernames": [
        "nasa",
        "natgeo",
        "bbcearth",
    ],
    "rankBy": "breakoutPotential",
    "outputPack": "raw",
    "outputProfile": "signals",
}

# Run the Actor and wait for it to finish
run = client.actor("ryanclinton/instagram-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "profiles",
  "usernames": [
    "nasa",
    "natgeo",
    "bbcearth"
  ],
  "rankBy": "breakoutPotential",
  "outputPack": "raw",
  "outputProfile": "signals"
}' |
apify call ryanclinton/instagram-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=ryanclinton/instagram-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Instagram Scraper — Creator Vetting, Due-Diligence & Tracking",
        "description": "Instagram Scraper with a creator-intelligence layer: ranked vetting queue, engagement authenticity, breakout detection, brand-fit, and follower-growth history instead of rows. Works as a profile scraper, influencer-vetting tool, and roster tracker. Drop-in compatible field set.",
        "version": "1.0",
        "x-build-id": "VgO45dW1Cx9LZpWZT"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/ryanclinton~instagram-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-ryanclinton-instagram-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/ryanclinton~instagram-scraper/runs": {
            "post": {
                "operationId": "runs-sync-ryanclinton-instagram-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/ryanclinton~instagram-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-ryanclinton-instagram-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "mode": {
                        "title": "Input mode",
                        "enum": [
                            "profiles",
                            "posts",
                            "watchlist",
                            "historicalSnapshot"
                        ],
                        "type": "string",
                        "description": "What you're starting from. profiles (default) ranks a set of creators with the full intelligence layer. posts analyses specific post URLs. watchlist tracks a roster across runs and reports only what changed. historicalSnapshot reconstructs a past market state from tracked history."
                    },
                    "usernames": {
                        "title": "Creator handles",
                        "maxItems": 200,
                        "type": "array",
                        "description": "Instagram handles (with or without @) or profile URLs. Used in profiles and watchlist modes. The default run analyses nasa, natgeo, and bbcearth.",
                        "default": [
                            "nasa",
                            "natgeo",
                            "bbcearth"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "rankBy": {
                        "title": "Rank by",
                        "enum": [
                            "dealReadiness",
                            "breakoutPotential",
                            "engagementQuality",
                            "brandFit",
                            "momentum",
                            "followers",
                            "authenticity"
                        ],
                        "type": "string",
                        "description": "How to order the results. dealReadiness (default) puts who to look at first for a deal at the top. breakoutPotential surfaces who's popping now. engagementQuality, brandFit, momentum, followers, and authenticity are also available."
                    },
                    "posts": {
                        "title": "Post URLs",
                        "maxItems": 500,
                        "type": "array",
                        "description": "Instagram post URLs (or shortcodes) for posts mode. Returns what's notable about each post.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "intent": {
                        "title": "Intent",
                        "enum": [
                            "vet_creators",
                            "find_emerging",
                            "track_roster",
                            "brand_match",
                            "campaign_shortlist",
                            "compare"
                        ],
                        "type": "string",
                        "description": "Pick the job and the actor sets a sensible mode, ranking, and output pack for you. Anything you set explicitly still wins. compare lays creators side by side; campaign_shortlist builds an export-ready shortlist against a brand."
                    },
                    "compareUsernames": {
                        "title": "Creators to compare",
                        "maxItems": 50,
                        "type": "array",
                        "description": "2 to 50 handles to compare side by side (use with intent = Compare creators). Produces a comparison with labeled bests.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "brandProfile": {
                        "title": "Brand profile",
                        "type": "object",
                        "description": "Describe your brand for the brand-fit engine: themes, values, audience the brand targets, plus optional mustInclude / avoid terms for a campaign shortlist. All matching is against public profile signals only."
                    },
                    "outputPack": {
                        "title": "Output pack",
                        "enum": [
                            "raw",
                            "brand",
                            "agency",
                            "analyst",
                            "scout",
                            "campaign",
                            "portfolio"
                        ],
                        "type": "string",
                        "description": "Shape the output for a buyer. brand and agency add a vetting read; agency, campaign, and portfolio emit client-ready deliverables (recommended/consider/avoid, a campaign shortlist, or a creator mix by funnel stage). raw is the full record set."
                    },
                    "watchlistName": {
                        "title": "Watchlist name",
                        "type": "string",
                        "description": "Set a name to enable cross-run monitoring on ANY mode. The actor remembers this roster and, on the next run, returns only what changed: new breakouts, anomalies to vet, creators going quiet — with a change briefing first. Use the same name on a schedule for a daily feed."
                    },
                    "filters": {
                        "title": "Filters",
                        "type": "object",
                        "description": "Keep only creators matching public profile attributes: followerTier (nano/micro/mid/macro/mega), verified, category, language. No follower or commenter filters — public profile attributes only."
                    },
                    "alerts": {
                        "title": "Alerts",
                        "type": "object",
                        "description": "Tune the Signal Feed and Signal Cards: minAttentionScore, onlyNewSinceLastRun, breakoutMinMultiple, flagAnomalies, severity. Cards fire for creators above the threshold."
                    },
                    "enableCreatorMemory": {
                        "title": "Build creator memory",
                        "type": "boolean",
                        "description": "Keep the growth + engagement history that powers trajectories, benchmarks, and the market views. On by default. Turn off to opt this run out of the shared history (public profile metrics only; no private or follower data is ever stored).",
                        "default": true
                    },
                    "explainScores": {
                        "title": "Explain scores",
                        "type": "boolean",
                        "description": "Add a breakdown of each score's components and weights to every record — a no-magic audit view.",
                        "default": false
                    },
                    "taskPack": {
                        "title": "Task pack",
                        "enum": [
                            "none",
                            "engagementAuthenticity",
                            "emergingCreators",
                            "influencerVetting",
                            "brandFitFinder",
                            "creatorGrowthTracker",
                            "accountAnalyzer"
                        ],
                        "type": "string",
                        "description": "Add a curated, product-shaped summary record built for a specific job — e.g. an engagement-authenticity check or an emerging-creator shortlist. Built from the same signals; no extra fetch. none = no pack.",
                        "default": "none"
                    },
                    "date": {
                        "title": "As-of date",
                        "type": "string",
                        "description": "For historicalSnapshot mode: reconstruct the market as it stood on this date (YYYY-MM-DD), drawn from tracked history. Returns insufficientHistory for dates before coverage began."
                    },
                    "category": {
                        "title": "Category / niche",
                        "type": "string",
                        "description": "For historicalSnapshot and benchmarks: the creator niche or category to slice on (e.g. fitness, beauty)."
                    },
                    "tier": {
                        "title": "Follower tier",
                        "enum": [
                            "nano",
                            "micro",
                            "mid",
                            "macro",
                            "mega"
                        ],
                        "type": "string",
                        "description": "For historicalSnapshot and benchmarks: the follower tier to slice on."
                    },
                    "geo": {
                        "title": "Geo",
                        "type": "string",
                        "description": "Optional geo tag for benchmarks and the historical snapshot (e.g. UK, US). Used as a benchmark axis where the store has enough creators."
                    },
                    "changeWindowDays": {
                        "title": "Change window (days)",
                        "minimum": 1,
                        "maximum": 365,
                        "type": "integer",
                        "description": "Produce a 'what changed' read for the queried creators over this many days, drawn from tracked history — even without a prior watchlist run. Leave empty to skip."
                    },
                    "maxRecentPostsPerProfile": {
                        "title": "Max recent posts per profile",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Cap on recent posts used per creator for the engagement read. The public profile API returns roughly a dozen recent posts.",
                        "default": 12
                    },
                    "maxPostsDeep": {
                        "title": "Deep post history",
                        "minimum": 0,
                        "maximum": 300,
                        "type": "integer",
                        "description": "Optionally pull deeper post history (more runtime and proxy cost). 0 uses just the recent posts from the profile API.",
                        "default": 0
                    },
                    "outputProfile": {
                        "title": "Output profile",
                        "enum": [
                            "signals",
                            "compat",
                            "minimal"
                        ],
                        "type": "string",
                        "description": "signals (default) adds the full decision layer — vetting, engagement quality, brand fit, scores, history, deltas. compat returns the standard profile + posts field set for drop-in migration and raw ingestion (no decision layer). minimal returns IDs and URLs only.",
                        "default": "signals"
                    },
                    "proxyConfiguration": {
                        "title": "Proxy",
                        "type": "object",
                        "description": "Residential proxies are required — Instagram restricts automated access from shared datacenter IPs. The default uses Apify Residential with US rotation. Leave as-is unless you know you need a different region.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "US"
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
