# Instagram Scraper — Posts, Reels, Likes & Captions (`tictechid/vanzi-instagram-scraper`) Actor

Instagram scraper for posts and reels metadata: likes, views, captions, comments, and author info from profiles or post/reel URLs. Clean JSON for social listening, research, and automation workflows.

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

## Pricing

from $0.40 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Scraper - Posts, Reels & Profile Metadata

Turn public Instagram profiles, posts, and reels into clean, pipeline-ready metadata in one run. Paste one username or a full creator list — get **profile stats once per account**, plus likes, plays, comments, captions, and timestamps as snake\_case JSON. Built for social listening and automation — **Apify Proxy** (residential preferred) keeps bulk runs reliable under Instagram rate limits.

> **Note:** Only **public** profiles and posts. Login walls, private accounts, or rate limits may yield empty rows for that URL (the run still completes).

### Why Use This Tool?

- **Automate Instagram reporting:** Replace manual screenshots with structured data.
- **Bulk creator lists:** Run dozens of profile URLs in a single Apify job.
- **Profile + content together:** Each profile URL scrapes **profile metadata once** (followers, following, post count) even when there are **no new reels/posts** in your date window.
- **Stack-friendly output:** Snake\_case JSON for Sheets, warehouses, n8n/Make, or internal APIs.
- **Lean by design:** HTTP + TLS impersonation — no heavy browser farm; Apify Proxy handles anti-block.

### Why Choose This Actor?

- **Instagram-focused:** Profiles, `/p/`, and `/reel/` URLs in one Actor
- **Always-on profile row:** `media_type: "profile"` so account metrics stay updated
- **Date filter (`until`):** Keep only content newer than a date for monthly monitoring
- **Soft-fail per URL:** One blocked profile does not kill the bulk run
- **Apify-native:** Console, schedules, webhooks, API, Make, n8n, Zapier
- **PPE pricing:** Predictable start + per-result billing

### Features

- Scrape **Instagram profile URLs** and **direct post/reel URLs**
- **Bulk `start_urls`** in one run (deduped)
- **Profile metadata scraped once per profile** (followers, following, posts count, handle, display name)
- Post/reel fields: caption, likes, views/plays (when exposed), comments, author, posted time, media type
- Optional **`until`** date filter (ISO / `YYYY-MM-DD`)
- Apify Proxy default (**residential** preferred for Instagram reliability; custom `proxyUrls` OK)
- Dataset export: JSON, CSV, Excel

### Use Cases

- **Brand & competitor monitoring** on Instagram
- **Influencer outreach** — follower counts + recent reel performance
- **Agency dashboards** — scheduled Apify runs into Sheets / Looker
- **Content archives** for captions, URLs, and engagement history
- **E‑commerce / DTC** social proof and creator tracking

### Input Example

```json
{
  "start_urls": [
    "https://www.instagram.com/ksi/",
    "https://www.instagram.com/reel/DdKDOY9iWFc/"
  ],
  "max_items": 100,
  "until": "2026-09-01",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

| Field | What it does |
| --- | --- |
| `start_urls` | Profile and/or `/p/` · `/reel/` URLs (required) |
| `max_items` | Cap on dataset items (default 20; `0` = safe ceiling 5000). Free-tier tip: keep **≤ 100** |
| `until` | Optional — keep posts **newer than** this date |
| `proxyConfiguration` | Apify Proxy — **residential** preferred for reliability; custom `proxyUrls` OK |

### Output Examples

**Profile metadata** (one row per profile URL):

```json
{
  "id": "1234567890",
  "media_type": "profile",
  "platform": "instagram",
  "handle": "ksi",
  "author": "KSI",
  "url": "https://www.instagram.com/ksi/",
  "follower_count": 9500000,
  "following_count": 400,
  "posts_count": 1200
}
```

**Reel / post metadata:**

```json
{
  "url": "https://www.instagram.com/reel/DdKDOY9iWFc/",
  "caption": null,
  "like_count": 29372,
  "view_count": 1325401,
  "play_count": 1325401,
  "comment_count": 144,
  "author": "ksi",
  "handle": "ksi",
  "media_type": "reel",
  "platform": "instagram"
}
```

### How to Run on Apify

1. Open **Instagram Scraper** on Apify and click **Try for free** / **Start**.
2. Paste public Instagram profile or post/reel URLs into **start\_urls**.
3. Set **max\_items** (≤ 100 on free tier). Optionally set **until**.
4. Keep **Apify Proxy** on (residential groups preferred). Rotate/backoff is automatic on HTTP 429.
5. Run and download the **Dataset** — profile rows first, then posts/reels.
6. Wire to schedules, webhooks, or Make / n8n / Zapier for recurring brand scrapes.

#### Run from your stack (API sketch)

```bash
curl -X POST "https://api.apify.com/v2/acts/tictechid~vanzi-instagram-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"start_urls":["https://www.instagram.com/ksi/"],"max_items":50,"proxyConfiguration":{"useApifyProxy":true,"apifyProxyGroups":["RESIDENTIAL"]}}'
```

Use the Actor id with a **`~`** in API paths: `tictechid~vanzi-instagram-scraper`.

### Pricing

Pay-per-event (PPE):

- **`actor-start`** — once per run
- **`result`** — once per dataset item (including profile rows)

Target list price ≈ **$0.30–0.50 per 1,000 results**. Check **Cost → Pricing** on the Actor page for live tiers.

### Usage Limits

- **Free tier:** 5 runs total. Keep **max items per run ≤ 100** while testing. Upgrade to continue.
- **Paid plans:** Unlimited runs per Apify limits.

> Multiple runs require an Apify paid plan. See [Apify Pricing](https://apify.com/pricing?fpr=maxknj).

### FAQ

**Do I need an Instagram login?** No — public HTML only.

**Do I need a residential proxy?** Recommended for bulk Instagram runs. The Actor defaults to Apify **residential** groups when available (falls back to auto/datacenter). Custom `proxyUrls` are also supported.

**What if there are no new reels this month?** You still get the **profile metadata** row so follower/post counts update.

**Empty dataset?** Instagram rate-limits aggressively. On HTTP 429 the Actor backs off, rotates the proxy session, and soft-fails that URL (one quiet WARN) instead of hammering. One bad URL won’t fail the whole bulk run.

**Support:** Open an Issue on the Actor page or email **contact@tictech.id**.

***

For more details, contact the maintainer or email us at contact@tictech.id

Instagram scraper · Instagram API alternative · Instagram reels scraper · profile scraper · likes views comments · social listening · influencer analytics · bulk scrape · TicTech vanzi

# Actor input Schema

## `start_urls` (type: `array`):

Instagram profile URLs or direct /p/ and /reel/ URLs.

## `max_items` (type: `integer`):

Maximum number of posts/reels to output. Use 0 for a safe ceiling of 5000. For free-tier testing, keep this small.

## `until` (type: `string`):

Optional. Only keep posts newer than this date (ISO-8601 or YYYY-MM-DD). Older posts are skipped.

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

Apify Proxy recommended for Instagram. Residential groups preferred for reliability under rate limits; custom proxyUrls also supported.

## Actor input object example

```json
{
  "start_urls": [
    "https://www.instagram.com/ksi/"
  ],
  "max_items": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

Scraped post/reel metadata rows.

# 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 = {
    "start_urls": [
        "https://www.instagram.com/ksi/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("tictechid/vanzi-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 = { "start_urls": ["https://www.instagram.com/ksi/"] }

# Run the Actor and wait for it to finish
run = client.actor("tictechid/vanzi-instagram-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 '{
  "start_urls": [
    "https://www.instagram.com/ksi/"
  ]
}' |
apify call tictechid/vanzi-instagram-scraper --silent --output-dataset

```

## MCP server setup

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