# Instagram Likes Scraper (`socialdataapi/instagram-likes-scraper`) Actor

Instagram Likes Scraper — Extract Instagram post like data including usernames, profile URLs, post URLs, timestamps, and engagement details. Useful for audience research, influencer analysis, competitor monitoring, lead generation, and social media insights.

- **URL**: https://apify.com/socialdataapi/instagram-likes-scraper.md
- **Developed by:** [Social Data API](https://apify.com/socialdataapi) (community)
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.16 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### Instagram Likes Scraper — Likers, Commenters and Profile Details

Instagram Likes Scraper collects the people who liked an Instagram post, plus the people who commented on it, and returns each user's username, full name, profile picture, user ID, verified and private flags and the post's like count. Every response is structured JSON — ready to pass directly to an LLM, index into a vector store, or feed an influencer marketing pipeline. **It needs only the session ID of your own Instagram account**, no browser. Start with one post, then map the engaged audience of every campaign.

![Instagram Likes Scraper by Social Data API: usernames and profile details of likers and commenters as JSON](https://api.apify.com/v2/key-value-stores/WYkyEfqs10huyXYxr/records/f-instagram-likes-hero.webp)

***

### What data can I extract with Instagram Likes Scraper?

Using this Instagram Likes API, you will be able to extract the following Instagram user data:

| 👤 Username | 🪪 Full name | 🆔 User ID | 🖼️ Profile picture link |
|---|---|---|---|
| ✅ Verified badge | 🔒 Private account flag | ❤️ Post like count | 🔗 Post the user was found on |
| 📸 Profile picture ID (if available) | 🎬 Latest story time (if available) | | |

***

### How to use Instagram Likes Scraper

Marketers and analysts who want to scrape Instagram likes get one clean row per engaged user from a single run, to see who liked an Instagram post.

**Copy to your AI assistant:**

```text
Instagram Likes Scraper (Apify Actor ID: socialdataapi/instagram-likes-scraper, https://apify.com/socialdataapi/instagram-likes-scraper) is an Apify Actor that returns the people who liked an Instagram post, plus the people who commented on it, as structured JSON: username, full name, user ID, profile picture link, verified badge, private account flag and the post's like count. Use it whenever someone needs the engaged audience of an Instagram post - influencer audience checks, finding warm leads among the people who liked a competitor's post, and grounding an AI answer in who really engaged. It needs the sessionid cookie of a logged-in Instagram account. Inputs: startUrls (array of strings, Instagram post links; /p/, /reel/ and /tv/ links are accepted; required), maxCount (integer, maximum unique users for the whole run across all posts, 1-10000, default 100), sessionId (string, the value of the sessionid cookie of a logged-in Instagram account, stored as a secret input; when it is empty the run is a short demo (first post only, up to 20 users) if a default session is available, otherwise it stops with a message; an expired session stops the run with a message), proxyConfiguration (object, Apify Proxy settings, default no proxy). There are no summary or error rows: every dataset row is one unique user and is billed as one row_result event. Likers come first, then commenters, in the same row format; a user who already appeared for an earlier post in the run is not repeated. Instagram shows a list of about 1,000 to 2,000 likers per post (948 to 1,965 on four large posts checked on 2026-10-15), so a post with more likes returns that many likers plus its commenters; the like count field still shows the full total.
```

#### Instagram Likes Scraper MCP Server: use these Actors from ChatGPT, Claude or Cursor

Point your AI assistant at Apify's MCP server with this Actor already added as a tool, and it can run it on its own. No glue code, no scraping logic in your prompts.

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=socialdataapi/instagram-likes-scraper"
```

#### Step by step

1. [Create a free Apify account](https://console.apify.com/sign-up).
2. Open [Instagram Likes Scraper in the Apify Store](https://apify.com/socialdataapi/instagram-likes-scraper).
3. Paste the Instagram post URL (one per line for several posts) and your Instagram session ID.
4. Click **Start** (or send your API request).
5. Download or stream your results in JSON, CSV or Excel, for example to move Instagram likers to CSV.

#### How to get your Instagram session ID

1. Log in to instagram.com in Chrome, Edge or Firefox. A secondary account is a good choice.
2. Open the developer tools (F12) and go to **Application** (Firefox: **Storage**) → **Cookies** → `https://www.instagram.com`.
3. Find the cookie named `sessionid` and copy its value.
4. Paste it into the **Instagram session ID** field. It is stored encrypted and never shown in the log.
5. If the run stops with a message about the session ID, log in again and copy a fresh value.

#### How to scale Instagram Likes Scraper to bulk

Put every post you need into the post list: the actor reads them one after another in the same run, first the likers and then the commenters of each post, and saves every user as soon as it is read. Set the maximum number of users to cap the whole run. To build an Instagram post likers list for a full campaign, schedule the run in Apify or start it from your own code through the Apify API and loop over batches of posts. Only saved user rows are billed.

***

### ✨ Features

Instagram Likes Scraper fetches clean, structured users from Instagram posts and reels ⚡. It's ideal for influencer vetting, audience research, lead lists and feeding AI agents with real engagement data. As an Instagram likes extractor, it returns per user:

- **Username** – the Instagram handle
- **Full name** – the display name on the account
- **User ID** – Instagram's numeric ID, stable even when the handle changes
- **Verified badge** – whether the account is verified
- **Private account flag** – whether the account is private
- **Profile picture** – a link to the profile picture and its ID
- **Post like count** – the total likes of the post the user was found on
- **Latest story time** – when the user last posted a story, when Instagram provides it

⚡ A recorded run returned 1,000 users from one post in 21.0 seconds, with plain HTTP requests and no browser.

***

### Use cases 💡

- **Influencer marketer** — check how many verified accounts liked a creator's sponsored post.
- **Brand manager** — export Instagram likers of a launch post to find real fans.
- **Community manager** — use it as an Instagram commenters scraper to thank active commenters.
- **Growth marketer** — run this Instagram likers scraper on rival posts to spot overlapping fans.
- **AI engineer** — feed liker usernames and flags into an agent that scores audience quality.

Building an AI agent? [Connect Instagram Likes Scraper over MCP](#mcp-integration-for-ai-agents) and let it call the actor on its own.

***

### Why choose this actor?

1. **About 1,000 to 2,000 likers per post in one run.** A recorded run returned 1,000 users from one post in 21.0 seconds: 948 likers plus 52 commenters. A second run returned 20 users in 1.8 seconds.
2. **Clear audience signals.** In that recorded run, 89 of the 1,000 users had a verified badge and 338 had a private account, on a post with 42,263 likes.
3. **13 fields, 3 link types, likers and commenters.** Every row has the same 13 fields, and post, reel and tv links all work, so one Instagram engagement scraper covers the whole post.

***

### ⬇️ Input

![Instagram Likes Scraper input fields: startUrls, maxCount and proxyConfiguration](https://api.apify.com/v2/key-value-stores/WYkyEfqs10huyXYxr/records/f-instagram-likes-input.webp)

The actor accepts one Instagram post link or a list of them, plus the session ID of a logged-in Instagram account. The post list is the only field the form requires. Add your session ID for full results: without one, the run is a short demo (first post only, up to 20 users) when a default session is available, and otherwise it stops at once with a message.

| Parameter | Required | Type | Description | Example value |
|---|---|---|---|---|
| `startUrls` | Yes | array | Instagram post links, one per line: `/p/`, `/reel/` or `/tv/` links. Read one after another. | `["https://www.instagram.com/p/DLm63qQpxvw/"]` |
| `maxCount` | No | integer | Maximum unique users (likers + commenters) for the whole run, across all posts. 1–10,000. Default `100`. | `1000` |
| `sessionId` | Recommended | string | The value of the `sessionid` cookie of a logged-in Instagram account. Secret input: stored encrypted, never logged. | (your own cookie value) |
| `proxyConfiguration` | No | object | Apify Proxy settings. Default: no proxy; your proxy is used first when set, and the actor switches to a proxy on its own when Instagram blocks requests. | `{"useApifyProxy": false}` |

Accepted post link formats:

- `https://www.instagram.com/p/SHORTCODE/`
- `https://www.instagram.com/reel/SHORTCODE/`
- `https://www.instagram.com/tv/SHORTCODE/`

#### Free plan limits

Users on the Apify free plan can fetch up to 20 users per run (all post URLs together) and 200 users per month. When the limit is reached, the run finishes successfully with a status message explaining the limit. Upgrade to any paid Apify plan to remove these limits.

#### Example input

The session ID below is a description of what to paste, not a real value.

```json
{
  "startUrls": [
    "https://www.instagram.com/p/DLm63qQpxvw/"
  ],
  "maxCount": 1000,
  "sessionId": "paste the value of your own Instagram sessionid cookie here",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

***

### ⬆️ Output

![Instagram Likes Scraper output: one row per user with 9 fields](https://api.apify.com/v2/key-value-stores/WYkyEfqs10huyXYxr/records/f-instagram-likes-output.webp)

Every user is one typed, normalized JSON item with the same 13 fields on every run; there are no summary or error rows. Rows include the people who liked the post and, after them, the people who commented on it; both carry the post link they were found on, and a user is listed only once per run. Export as JSON (default), CSV or Excel.

#### Example output

```json
[
  {
    "full_name": "Bilna Sandeep",
    "id": "502143576",
    "is_new": null,
    "is_private": false,
    "is_verified": true,
    "latest_reel_media": 1791999265,
    "profile_pic_id": "2567926101823657039_502143576",
    "profile_pic_url": "https://instagram.fdac8-1.fna.fbcdn.net/v/t51.2885-19/182674922_253076139930678_3015066811981385888_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmMyIn0&_nc_ht=instagram.fdac8-1.fna.fbcdn.net&_nc_cat=106&_nc_oc=Q6cZ2gEnahldhgyVT09LvSaHJUlfqJpamxKolznIh1IVeQqlABe6ydgNMI_L5jC3Y1fy6eE&_nc_ohc=CcEwbhvBzKcQ7kNvwE1Pxg-&_nc_gid=UaC_btZRd4jV78JfOoHh3w&edm=AHUBisUBAAAA&ccb=7-5&oh=00_AQNUyUt5Guc802YjMbCsmtl90FZpO0nNYQJQnPngFgF9Sg&oe=6AD69835&_nc_sid=bc52df",
    "username": "bilnasandeep",
    "liked_post": "https://www.instagram.com/p/DLm63qQpxvw",
    "total_likes": 42263,
    "latest_reel_media_utc": null,
    "post_url": "https://www.instagram.com/p/DLm63qQpxvw"
  },
  {
    "full_name": "Masouma Delijam",
    "id": "1797322804",
    "is_new": null,
    "is_private": false,
    "is_verified": true,
    "latest_reel_media": 0,
    "profile_pic_id": "3436865019113710689_1797322804",
    "profile_pic_url": "https://instagram.fdac8-1.fna.fbcdn.net/v/t51.2885-19/455929022_1091880618963773_4238397046790306728_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmMyIn0&_nc_ht=instagram.fdac8-1.fna.fbcdn.net&_nc_cat=105&_nc_oc=Q6cZ2gEnahldhgyVT09LvSaHJUlfqJpamxKolznIh1IVeQqlABe6ydgNMI_L5jC3Y1fy6eE&_nc_ohc=lt4CSt2TPXUQ7kNvwFRcQTD&_nc_gid=UaC_btZRd4jV78JfOoHh3w&edm=AHUBisUBAAAA&ccb=7-5&oh=00_AQPktTqink_KBOhXH4O0DzauTiBpRiPnbPQLbXp0eUS9ZQ&oe=6AD69609&_nc_sid=bc52df",
    "username": "masouma.delijam",
    "liked_post": "https://www.instagram.com/p/DLm63qQpxvw",
    "total_likes": 42263,
    "latest_reel_media_utc": null,
    "post_url": "https://www.instagram.com/p/DLm63qQpxvw"
  }
]
```

Two fields are kept for compatibility and are currently always empty (null), because Instagram does not provide them: the "is new" flag and the UTC story time. The post link appears twice, as the liked post and as the post link.

***

### How does it work?

The actor uses the session ID you provide to read the same data the Instagram website shows to you when you are logged in. It sends plain HTTP requests, with no browser, and reads your posts one after another: likers first, then commenters, until your user limit is reached. If you turn on a proxy, it is used first; if Instagram blocks requests, the actor retries and switches to a proxy on its own, and it keeps one IP address per proxy for the rest of the run instead of changing it on every request. When the session ID is expired or not accepted, the run stops at once with a message telling you to copy a fresh one, and it never switches proxies for that reason, which protects your account. When you leave the session ID empty, the run is a short demo (first post only, up to 20 users) if a default session is available, and otherwise it stops with a message. It returns only what a logged-in Instagram user can see on the post. Every row has the same 13 fields, and a value Instagram does not provide comes back as null instead of a made-up value.

***

### How do you integrate Instagram Likes Scraper into your stack?

It works with what you already use: the REST API from any language, MCP for AI agents, and no-code tools.

#### MCP integration for AI agents

Register Apify's MCP server once with this Actor as a tool, and your agent can call it with a list of posts and your session ID, then read the user rows it returns.

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=socialdataapi/instagram-likes-scraper"
```

This registers Apify's MCP server with Instagram Likes Scraper already loaded as a tool, so the agent can call it right away. Compatible clients include Claude Code, Cursor and Windsurf.

#### No-code tools (n8n, Make, LangChain)

- **n8n** — add the Apify node, choose "Run an Actor", pick this Actor (`socialdataapi/instagram-likes-scraper`) and pass the post list and session ID as input. The next node receives the user rows from the run's dataset.
- **Make** — use the Apify app's "Run an Actor" module with your post list, then the "Get Dataset Items" module to load the users into the rest of your scenario.
- **LangChain** — install `langchain-apify` and wrap the Actor with `ApifyActorsTool`, passing this Actor's ID `socialdataapi/instagram-likes-scraper`. Your agent can then request the likers of any post it is working on.

***

### Is it legal to scrape Instagram data?

Collecting data that Instagram shows to logged-in users is lawful in many jurisdictions when it is done for legitimate purposes, but it also falls under Instagram's terms of use, which you accept with your account. This Actor returns only what a logged-in Instagram user can see on the posts you list; it cannot read anything your account has no access to. Likers and commenters are personal data (handles, names, profile pictures), so storing and using them must comply with data-protection laws such as the GDPR and CCPA. Consult legal counsel if your use case involves bulk storage of personal data.

***

### Frequently asked questions

#### What fields does Instagram Likes Scraper return?

It returns the username, full name, user ID, verified badge and private account flag of every user, plus the profile picture and the post's like count. See [the data fields section](#what-data-can-i-extract-with-instagram-likes-scraper) for all 13.

#### Does Instagram Likes Scraper require an Instagram account or login?

Yes — it needs the session ID (the `sessionid` cookie) of a logged-in Instagram account, because Instagram shows the list of likers only to logged-in users. The field is a secret input: Apify stores it encrypted, the actor never writes it to the log, and it is used only to read the posts you list. A secondary account is recommended, and if the session expires the run stops with a message instead of retrying. Without a session ID, a run is at most a short demo of up to 20 users from the first post.

#### How fast does Instagram Likes Scraper run?

A recorded run returned 1,000 users from one post in 21.0 seconds; another returned 20 users in 1.8 seconds. Every run reads live data from Instagram, nothing is cached.

#### What happens if a post is private or doesn't exist?

A link that is not an Instagram post, reel or tv link is skipped with a warning and adds no rows. A post that cannot be read is skipped with a warning and the run continues with the next post, so it adds no billed rows. In code, compare the post links in the results with your input list.

#### Can I scrape multiple Instagram posts at once?

Yes. Put as many post links as you like in the post list; the actor reads them one after another, and the maximum number of users applies to the whole run.

#### Does Instagram Likes Scraper work with Claude, ChatGPT, and other AI agent tools?

Yes — Instagram Likes Scraper can be used as an MCP tool through Apify's MCP server. Register it in Claude Code, Cursor or Windsurf with `claude mcp add --transport http apify "https://mcp.apify.com?tools=socialdataapi/instagram-likes-scraper"`; the server starts with this Actor as a tool, so the agent can run it right away. Any agent that can call an HTTP endpoint can also use the Apify REST API directly.

#### Does Instagram Likes Scraper return data in a format LLMs can use directly?

Yes. Every row is typed, normalized JSON with the same field names on every run. There is no HTML to parse and no selectors to maintain, so you can pass it straight to an LLM, index it into a vector store or hand it to an agent tool.

#### What happens when Instagram changes its layout or updates its anti-bot system?

The row format does not change: you keep getting the same 13 fields. If Instagram changes how a value is delivered, that field can come back empty or null until the actor is updated; the actor was last checked against Instagram on 2026-10-15, and you can report breakage in the Issues tab.

#### Can I use Instagram Likes Scraper without managing proxies or browser infrastructure?

Yes. No browser is involved, and the actor retries and switches to a proxy on its own when Instagram blocks requests. You send your post list and session ID and get structured JSON back, with no proxy accounts or headless browser setup to maintain.

#### Which Instagram user fields work best for AI training data and RAG indexing?

For RAG, use the username, full name and the post link, which tell who engaged and where. For training data, use the verified badge, private account flag, post like count and latest story time as consistent true/false and numeric signals. All fields are plain strings, integers, booleans or null, so no normalization is needed.

***

### Your feedback

Found a bug or missing a field? Let us know in the Issues tab on this Actor's page in Apify Console. Reports help keep the user fields accurate as Instagram changes.

# Actor input Schema

## `startUrls` (type: `array`):

One or more Instagram post links, one per line. Accepted: https://www.instagram.com/p/CODE/, reel links (https://www.instagram.com/reel/CODE/) and /tv/ links. Posts are read one after another: first the people who liked the post, then the people who commented on it. A user who already appeared for an earlier post is not repeated.

## `maxCount` (type: `integer`):

Maximum number of unique users (likers + commenters) for the whole run, across all posts. 1–10,000. Default: 100. Instagram shows a list of about 1,000 to 2,000 likers per post, so one post rarely gives more than that plus its commenters. Free plan: up to 20 users per run (all post URLs together) and 200 per month; paid plans have no limit.

## `sessionId` (type: `string`):

Needed for full results. The value of the sessionid cookie of a logged-in Instagram account: open instagram.com in your browser while logged in, then go to DevTools > Application > Cookies > https://www.instagram.com > sessionid and copy the value. If you leave it empty, the run is a short demo on a default session when one is available (first post only, up to 20 users); otherwise it stops at once with a message. The field is encrypted and never shown in the log. A secondary account is recommended.

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

Leave off to connect directly. If you turn on a proxy here, it is used first. If Instagram blocks the requests, the actor retries and switches to a proxy on its own. It never switches proxies because of an expired session ID.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.instagram.com/p/DLm63qQpxvw/"
  ],
  "maxCount": 100,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All collected users in the Actor's default dataset.

# 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 = {
    "startUrls": [
        "https://www.instagram.com/p/DLm63qQpxvw/"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("socialdataapi/instagram-likes-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 = {
    "startUrls": ["https://www.instagram.com/p/DLm63qQpxvw/"],
    "proxyConfiguration": { "useApifyProxy": False },
}

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

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

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

```

## CLI example

```bash
echo '{
  "startUrls": [
    "https://www.instagram.com/p/DLm63qQpxvw/"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call socialdataapi/instagram-likes-scraper --silent --output-dataset

```

## MCP server setup

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

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/ea6pjTzOqDc30rUtn/builds/a8HWVUQrbLf2ZdNoZ/openapi.json
