# 📸 Instagram Profile Post Scraper With Creator Profile Data (`scrapapi/instagram-profile-post-scraper`) Actor

Instagram Profile Post Scraper: Extract posts with captions, timestamps, media URLs, likes, comments, hashtags, and creator profile data. Collect usernames, bios, follower counts, websites, and profile URLs for content research, influencer analysis, and competitor monitoring.

- **URL**: https://apify.com/scrapapi/instagram-profile-post-scraper.md
- **Developed by:** [ScrapAPI](https://apify.com/scrapapi) (community)
- **Categories:** Social media, Developer tools, Automation
- **Stats:** 12 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.99 / 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.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

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

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### 🤔 What does Instagram Profile Post Scraper With Creator Profile Data do?

This Actor scrapes public posts from any Instagram profile — images, carousels, reels, captions, hashtags, mentions, engagement metrics (likes, comments, views) — **and joins each post with real creator/profile data**: biography, follower count, following count, external link, verified status, and HD profile picture. Paste one or many usernames or profile URLs, set a post limit or date filter, and get clean structured rows plus one summary row per profile.

Unlike a plain instagram post scraper that only returns a thin `owner.username`/`owner.id` stub, this Actor fetches the full creator profile once per account and attaches it to every post, so you never have to run a separate instagram profile scraper to know who posted what and how big their audience is.

### 📦 What can I extract?

| Data Type 🧩 | Description 📘 | Example Fields 🔎 |
| --- | --- | --- |
| Post Metadata | Core identifiers & links | id, shortcode, postUrl, type (image/video/carousel/reel) |
| Caption & Text | Content analysis ready | caption, accessibility\_caption, mentions, hashtags |
| Media Files | URLs and sizes | image\_links\[], video\_links\[], display\_url, dimensions |
| Engagement | Performance metrics | likes\_count, comments\_count, views\_count |
| Timing | Freshness control | date (ISO), posted (humanized), crawled\_at |
| Post Flags | Rich attributes | is\_pinned, isSponsored, likeAndViewCountsDisabled, locations |
| Real Comments | Live-fetched thread | comments\[], latest\_comments\[] (text, user, likes, created\_at) |
| **Creator Profile** ⭐ | Bio & audience data joined onto every post | creatorProfile{biography, follower\_count, following\_count, external\_url, is\_verified, profile\_pic\_url\_hd} |
| **Profile Summary** ⭐ | One row per profile per run | type:"profileSummary" — followerCount, followingCount, biography, externalUrl, totalPostsScrapedThisRun |

#### 🔑 Key Features

- **Creator profile enrichment** — bio, follower/following counts, verified status, and external URL fetched once per profile and joined onto every post row (toggle with `includeCreatorProfile`).
- **Per-profile summary row** — a single `profileSummary` row per run aggregating audience size, bio, external link, and how many posts were collected.
- **Real comment threads** — text, author, likes, and timestamp for each post's latest comments, pulled from the live 2026 post-page data.
- **Pinned-post handling** — include, skip, or return only pinned posts.
- Multi-input support: usernames, profile URLs, or post URLs/shortcodes in a single run.
- Granular controls: max posts per profile, absolute or relative date cutoffs (e.g. `2025-01-01` or `2 months`).
- Reel & carousel friendly: clips, sidecar posts, and standard images with equal ease.
- Real-time output: every row streams to the dataset the moment it's collected.
- Configurable proxy: your own `proxyConfiguration` selection is honored for every request.

### 🛠️ How to use

1. Log in to Apify — create a free account or sign in.
2. Select this Actor from the Apify Store.
3. Paste profile URLs or usernames into **Start URLs**.
4. Set **Maximum Posts Per Profile** and, optionally, a **Recent Posts Filter**.
5. Choose a **Pinned Posts Mode**.
6. Leave **Include Creator Profile Data** on (default) to get bio/follower/following data on every post plus a summary row — or turn it off for post rows only.
7. Optionally configure **Proxy Configuration**.
8. Click **Start**. Results stream to the dataset in real time; export as JSON/CSV/Excel or read via the Apify API.

### 🎯 Use Cases

- **Influencer vetting & outreach** — check a creator's real follower/following counts and bio/external link alongside their recent post performance in one run.
- **Competitor & brand monitoring** — track posting cadence, format mix (reels vs images), and engagement across multiple profiles, with audience size for context.
- **Content intelligence** — build idea banks, detect trending hashtags/mentions, and map format mix per profile.
- **Campaign reporting** — measure engagement and tag sponsored posts (`isSponsored`) with real creator audience size attached.
- **Lead/prospect research** — pull a creator's bio and external link (often a website, Linktree, or booking page) directly from their posts data.

### 🔧 Input Parameters

#### 📥 JSON Example

```json
{
  "startUrls": [
    "https://www.instagram.com/cristiano/",
    "mrbeast"
  ],
  "maxPosts": 10,
  "pinnedMode": "include",
  "includeCreatorProfile": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

| Field | Type | Description |
| --- | --- | --- |
| `startUrls` | array | Profile URLs, usernames, or post shortcodes |
| `maxPosts` | integer | Posts per profile (0 = unlimited) |
| `pinnedMode` | enum | `include` | `skip` | `only` |
| `recent` | string | Absolute (`2025-01-01`) or relative (`2 weeks`) date filter |
| `includeCreatorProfile` | boolean | Join bio/follower/following data onto every post + add a profileSummary row (default `true`) |
| `proxyConfiguration` | object | Standard Apify proxy configuration; residential recommended |

### 📤 Output Format

#### 🧾 Post row example

```json
{
  "id": "3776048697886076245_2535829435",
  "shortcode": "DRnOEjME21V",
  "type": "post",
  "is_pinned": false,
  "date": "2026-08-10T12:15:43Z",
  "caption": "Ronaldo vs My Goalie Robot...",
  "accessibility_caption": "Photo by Cristiano Ronaldo. May be an image of text.",
  "isSponsored": true,
  "likeAndViewCountsDisabled": false,
  "locations": [],
  "likes_count": 996806,
  "comments_count": 5024,
  "post_url": "https://www.instagram.com/p/DRnOEjME21V/",
  "owner": { "id": "2535829435", "username": "cristiano" },
  "comments": [
    { "text": "Amazing!", "user": { "username": "fan123" }, "comment_like_count": 12 }
  ],
  "creatorProfile": {
    "biography": "Footballer.",
    "follower_count": 650000000,
    "following_count": 580,
    "external_url": "https://www.cristianoronaldo.com/",
    "is_verified": true
  }
}
```

#### 🧾 Profile summary row example (once per profile per run)

```json
{
  "type": "profileSummary",
  "username": "cristiano",
  "followerCount": 650000000,
  "followingCount": 580,
  "biography": "Footballer.",
  "externalUrl": "https://www.cristianoronaldo.com/",
  "isVerified": true,
  "totalPostsScrapedThisRun": 10
}
```

### ❓ FAQ

#### Q1. Does this Actor return the creator's bio and follower count?

Yes — with `includeCreatorProfile` on (default), every post row includes a `creatorProfile` object and each profile gets one `profileSummary` row with follower/following counts, bio, and external link.

#### Q2. Can I get real comments, not just counts?

Yes. `comments`/`latest_comments` contain real comment text, author, like count, and timestamp when the post has comments.

#### Q3. Can it handle pinned posts?

Yes — `pinnedMode` supports `include` (default), `skip`, or `only`.

#### Q4. Can it extract reels and carousels?

Yes, both are returned with `type: "Video"`/`"Carousel"` and their respective media URLs.

#### Q5. Can it scrape private accounts?

No. Only public profiles are supported.

#### Q6. How do I capture only new posts?

Use `recent` with a date or relative time (e.g. `1 month`).

#### Q7. What about business fields like public email/phone?

Those fields are structurally unavailable on the public, logged-out surfaces this Actor uses and are never fabricated — they're kept `null` when absent rather than faked.

#### Q8. Is it legal to scrape Instagram?

This Actor collects only publicly available data. You are responsible for ensuring your use complies with applicable law (e.g. GDPR) and Instagram's Terms of Use.

# Actor input Schema

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

List one or more Instagram profile URLs (e.g. https://www.instagram.com/username), plain usernames (e.g. username), or post shortcodes (e.g. ABC123DEF). The actor will normalize everything into usernames for you.

## `maxPosts` (type: `integer`):

How many posts to scrape per profile. Set to 0 for unlimited posts (use with care for very large profiles).

## `pinnedMode` (type: `string`):

Choose how to handle pinned posts:

- include: mix pinned + regular posts (default)
- skip: ignore pinned posts
- only: return only pinned posts when available

## `recent` (type: `string`):

Filter posts by date to keep results fresh. Use an absolute date (YYYY-MM-DD) or a relative value like '3 days', '2 weeks', or '1 month'. Leave empty to scrape all available posts.

## `includeCreatorProfile` (type: `boolean`):

When ON (default), fetch each profile's bio, follower/following counts, verified status, and external link once per profile, join it onto every post row as `creatorProfile`, and add one extra `profileSummary` row per profile aggregating the run's totals. Turn OFF to skip the extra profile fetch and get post rows only.

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

Configure which proxies to use for scraping. Residential proxies are strongly recommended (and usually required) for reliable Instagram scraping. Your selection here is honored for every request the actor makes.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.instagram.com/cristiano/"
  ],
  "maxPosts": 10,
  "pinnedMode": "include",
  "includeCreatorProfile": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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/cristiano/"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapapi/instagram-profile-post-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/cristiano/"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapapi/instagram-profile-post-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/cristiano/"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call scrapapi/instagram-profile-post-scraper --silent --output-dataset

```

## MCP server setup

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