# Fast Instagram Post Scraper (`insights_data/fast-instagram-post-scraper`) Actor

Scrape the latest public posts from any Instagram profile, fast. Get captions, hashtags, likes, comments, reel views, photo and video links, audio, tagged users and top comments. Filter by post type or date, add profiles in bulk, live results. No login needed.

- **URL**: https://apify.com/insights_data/fast-instagram-post-scraper.md
- **Developed by:** [Insights Data](https://apify.com/insights_data) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 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 post scraper: what is Fast Instagram Post Scraper?

**Fast Instagram Post Scraper** helps social media managers, marketers and analysts run Instagram competitor analysis and check influencer engagement by turning the latest public posts of the profiles you list into a table. Paste usernames or profile links, click **Start**, and get captions, likes, comments, Reel views and media links, with no Instagram login or cookies. This Instagram post scraper saves each post to the dataset (the results table of the run) as soon as it is ready, so you can watch the table fill while the run is going, and the Apify Free plan's $5 monthly credit lets you try it for free.

The easiest way to try it: add one profile and click **Start**. The default input collects the 10 newest posts of that profile, pinned posts included, with one top-level comment (a comment that is not a reply) for each post. Free plan runs work like paid runs. The $5 monthly Apify credit pays for the result charges and the platform usage (the compute your run uses, explained under pricing).

- 🏁 **Instagram competitor analysis:** compare how often rival accounts post, which formats they use (photo, video, carousel) and how many likes, comments and Reel views they get.
- 🌟 **Influencer marketing:** check a creator's engagement rate, Reel views, ad-disclosure hashtags and collab posts before you hire them. Engagement rate is filled only for the profile's own and co-authored posts with visible likes, so it is a starting point for an Instagram influencer analysis, not the whole picture.
- 📡 **Social media monitoring and Instagram brand monitoring:** run it on a schedule for the accounts you list and compare the newest posts of each profile from run to run.
- 🔎 **Instagram content analysis and Instagram hashtag research:** read captions, hashtags, mentions, tagged users and post types side by side across many profiles.
- 📊 **Instagram post analytics and Instagram reels analytics:** feed likes, comments, view counts and video length into reports and dashboards.
- 🧪 **Instagram market research:** build post datasets for studies, or pass clean structured posts to an AI or LLM (large language model) pipeline.

#### What can Fast Instagram Post Scraper do?

- 👥 **Take many profiles in one run:** as an Instagram profile posts scraper, it accepts usernames or profile links, with or without the @. Duplicates are removed.
- 🎯 **Filter posts:** keep only photos, only videos and Reels, or only carousels, and only posts newer than a relative value such as `7d` or a date.
- 💬 **Attach comments:** 0 to 15 top-level comments (not replies) per post.
- 🎞️ **Return the highest-resolution media links** for each photo and video file, including each file of a carousel. These are links, not files, and they may stop working over time, so download what you need to keep.
- 📦 **Export Instagram posts to Excel**, CSV, JSON, XML or HTML from the dataset.
- 🔌 **Run it online or by API:** start it in Apify Console as an Instagram post scraper online, or call it from code, schedules and webhooks.

***

### 🧾 Instagram post scraper data: what data you get

Every saved post is one row of Instagram post data: the post itself, its engagement numbers, its media and the account behind it. This Instagram posts scraper reads only what any visitor can see on a public profile. Used as an Instagram post data extractor, it needs nothing but the profiles you list.

The fields most people use first are `url`, `posted_at`, `caption`, `like_count`, `comment_count`, `view_count` and `engagement_rate_pct`. The full list is below.

| Field | What you get |
|---|---|
| 🆔 `id` | Instagram media ID |
| 🔤 `shortcode` | Short code that identifies the post, taken from its link |
| 🔗 `url` | Link to the post |
| 🗂️ `type` | `photo`, `video` or `carousel` |
| 🎛️ `product_type` | Instagram's own label for the kind of post (see the JSON example) |
| 📅 `posted_at` | Post time in UTC, for example `2026-10-27T18:00:03Z` |
| 📝 `caption` | Caption text, or `null` |
| #️⃣ `hashtags` | Lowercase hashtags from the caption, without duplicates |
| 📣 `mentions` | Lowercase @mentions from the caption, without duplicates |
| ❤️ `like_count` | Number of likes, `null` when the owner hid likes |
| 🔢 `comment_count` | Total number of comments |
| 👁️ `view_count` | Views of a video or Reel, `null` for photos or when not available |
| 📈 `engagement_rate_pct` | (likes + comments) / followers x 100, rounded to 3 decimals |
| ⏱️ `video_duration` | Video length in seconds |
| 📌 `is_pinned` | Whether the post is pinned at the top of the profile (checked on the first page of posts only) |
| 🤝 `is_collab` | `true` when the post has co-authors or belongs to another account |
| 👫 `coauthors` | List of `{username, id}` |
| 🏷️ `tagged_users` | List of `{username, full_name, is_verified}` |
| 📍 `location` | `{id, name, lat, lng}` or `null` |
| 🎵 `audio` | `{kind, title, artist}` or `null`, where `kind` is `music` or `original` |
| 📢 `has_ad_disclosure` | `true` when the caption has an ad or partnership hashtag such as #ad or #sponsored |
| 🚫 `comments_disabled` | Comments are turned off |
| 🙈 `likes_hidden` | The owner hid the like count |
| ✏️ `caption_edited` | The caption was edited |
| 🦮 `alt_text` | Image description (accessibility caption) |
| 📐 `width` | Original width |
| 📏 `height` | Original height |
| 🖼️ `thumbnail_url` | Link to the preview image |
| 🎬 `video_url` | Link to the first video file, or `null` |
| 🎞️ `media` | List of `{type, url, width, height, thumbnail_url}` for every photo and video file |
| 💬 `comments` | List of `{id, text, username, is_verified, likes, posted_at}`, top-level only |
| 👤 `owner` | `{id, username, full_name, is_verified, followers, following, biography, links, profile_pic_url}` |
| 🔖 `from_profile` | The profile from your input that the post came from |

> **Note:** `engagement_rate_pct` is filled only for posts owned or co-authored by the scraped profile when the like count is visible. Otherwise it is `null`. The `followers`, `following`, `biography` and `links` of `owner` are filled only for those same posts. `view_count` can be `null` for some videos. In `comments`, the `likes` value is the like count of that comment.

#### Instagram post caption extractor, likes and Reel views

- 📝 As an Instagram post caption extractor, it gives you the full caption plus the hashtags and mentions found in it.
- ❤️ As an Instagram post likes scraper, it returns the like count of each post. It does not return the list of people who liked a post.
- 👁️ As an Instagram reel views checker, it returns `view_count` and `video_duration` for videos and Reels.
- 📈 For influencer engagement rate and Instagram engagement rate, it calculates `engagement_rate_pct` per post from the likes, comments and the followers of the scraped profile.
- 🎥 As an Instagram reels data scraper, it covers the Reel's caption, audio, views, duration and comments.

#### What data can't Fast Instagram Post Scraper extract?

- ❌ Private profiles. They are skipped and listed with the status `private`.
- ❌ Single post, Reel or story links as input. Add the profile instead.
- ❌ Stories and highlights.
- ❌ Comment replies and full comment threads. Only top-level comments, up to 15 per post, are returned.
- ❌ Saves, shares and reach.
- ❌ Downloaded media files. You get links, not files.
- ❌ Emails and phone numbers. For contact data, try [Instagram Email Scraper](https://apify.com/insights_data/instagram-email-scraper) or [Instagram Profile Scraper](https://apify.com/insights_data/instagram-profile-scraper).
- ❌ Posts found by hashtag or keyword search. For that, use [Instagram Search Scraper](https://apify.com/insights_data/instagram-search-scraper).

***

### 🧭 How to scrape Instagram posts

Fast Instagram Post Scraper is designed for an easy start, even if you have never extracted data from the web before. Here is how to scrape Instagram data from public profiles in a few clicks.

1. [Create a free Apify account](https://console.apify.com/sign-up) using your email.
2. Open [Fast Instagram Post Scraper](https://apify.com/insights_data/fast-instagram-post-scraper).
3. Add the profile links or usernames you want, one per line.
4. Set **Posts per profile**, and optionally **Only posts newer than** and **Post types**. The Input section below shows the matching API names.
5. Click **Start** and wait for the run to finish. The table fills while it runs. How long a run takes depends on how many profiles and posts you ask for, so start with a small run.
6. Open **Storage**, then **Datasets**, then **Export** to download the posts in JSON, CSV, Excel, XML or HTML.

Use the same steps to scrape Instagram posts into a spreadsheet. To scrape Instagram Reels, set **Post types** to **Videos and Reels only** (the API value is `video`).

***

### 💲 Instagram post scraper pricing: how much does it cost?

Fast Instagram Post Scraper uses a **pay-per-event** model: you pay for set events, such as each saved post, instead of a flat fee. Your bill has three parts:

1. **Results:** one result is charged for each post saved to the dataset. The price depends on your Apify plan, as in the table below.
2. **Start fee:** $0.00005 per run at the default memory of 1 GB. It is the same on every plan.
3. **Platform usage:** the compute time and resources your run uses, billed at your Apify plan's own rates. You can see it on the run page after the run.

| Plan | Price per result | Price per 1,000 results |
|---|---|---|
| 🆓 Free | $0.002 | $2.00 |
| 🌱 Starter | $0.0018 | $1.80 |
| 🚀 Scale | $0.0016 | $1.60 |
| 🏢 Business and higher | $0.0015 | $1.50 |

The plan discount applies to the result price only. The start fee is the same on every plan, and platform usage is billed at your Apify plan's own rates.

**Example:** 1,000 posts on the Free plan cost 1,000 x $0.002 = $2.00 in result charges, plus $0.00005 for the start fee, plus platform usage. On Business that is 1,000 x $0.0015 = $1.50 in result charges. The default input (one profile, up to 10 posts) is at most 10 x $0.002 = $0.02 on the Free plan, plus the start fee and platform usage.

Profiles that are private, not found or failed add no rows, so they add no result charges. See the [pricing tab](https://apify.com/insights_data/fast-instagram-post-scraper/pricing) for the full price list.

#### Is there an Instagram post scraper free to use?

You can start for free. The Free plan includes a $5 monthly credit that pays for result charges and platform usage, and Free plan runs work like paid runs. How far the credit goes depends on the posts you collect and the platform usage of your run, so do a small test run first and read the cost on the run page. You can also set a **maximum charge limit** (a cap you set in the run options when you start a run). The run stops cleanly when the result charges reach it. Platform usage is billed on top.

***

### ⬇️ Input

You only need one thing: **a list of public Instagram profile links or usernames**. Set the input in Apify Console or send it as JSON through the API.

#### Settings most people change

In Apify Console you see the titles on the left. The API name, used in JSON and API calls, is in brackets:

- 🔗 **Profile URLs or usernames** (`urls`): a list with one profile per line, with or without @. Required. There is no cap on the number of profiles in one run.
- 🔢 **Posts per profile** (`maxItems`, default 10): the newest posts first. It counts per profile, not per run. `0` means all posts the profile has, which can be large and costly.
- 📅 **Only posts newer than** (`postedSince`): a relative value or a date such as `2026-09-01`. Relative values are `12h` (12 hours), `7d` (7 days), `2w` (2 weeks), `3m` (3 months of 30 days each, not 3 minutes) and `1y` (1 year of 365 days). Leave it empty for no limit.
- 🎯 **Post types** (`postTypes`, default `all`): `all`, `photo`, `video` (shown in Console as **Videos and Reels only**) or `carousel`.
- 💬 **Comments per post** (`commentsPerPost`, default 1): how many top-level comments (not replies) to attach to each post, from 0 to 15. `0` skips comments.

Two more fields are rarely needed:

- 🔁 **Retries** (`retries`, default 3, from 1 to 10): how many attempts the Actor makes for a request that fails.
- 🌐 **Proxy configuration** (`proxyConfiguration`): optional. Leave it unchanged unless you need to set it. The Actor uses Apify Proxy when needed.

> ⚠️ Cost grows with the number of profiles and **Posts per profile**, because each saved post is one result. Start with one profile and the default 10 posts.

Here is a small example that collects the 10 newest posts of one profile:

```json
{
  "urls": ["https://www.instagram.com/natgeo/"],
  "maxItems": 10,
  "postTypes": "all",
  "commentsPerPost": 1
}
```

See the [input tab](https://apify.com/insights_data/fast-instagram-post-scraper/input-schema) for a full description of all fields.

#### Profile URLs or usernames

Only profile links and usernames work. Post, Reel and story links are skipped with a warning. If no valid profile is left, the run stops with an input problem message.

- ✅ Good: `https://www.instagram.com/natgeo/`, `@natgeo` or `natgeo`
- ❌ Bad: `https://www.instagram.com/p/DfAWxdIFmVB/`

#### Posts per profile and Only posts newer than

> ⚠️ A high **Posts per profile**, or `0` on a large profile, can cost more than you expect. Set a **maximum charge limit** when you start a run.

The date filter stops reading a profile once its posts are older than your date. Pinned posts older than your date are skipped.

- ✅ Good: `30d` or `2026-09-01`
- ❌ Bad: `last month`

***

### ⬆️ Output

Results are stored in a dataset. In Apify Console, open **Storage**, then **Datasets**, then **Export** to download them in JSON, CSV, Excel, XML or HTML, with only the fields you need. Posts appear while the run is still going. The dataset has nine ready-made views: Posts, Engagement, Caption and tags, Media, Comments, Post owner, Tagged users, Collaborators, and Audio and location. The run total is in the run status ("Done: N posts from M profile(s)") and the platform usage is on the run page.

#### JSON example

Results for the input example above, shortened to one post and the most useful fields:

```json
[
  {
    "id": "4017311023166285121",
    "shortcode": "DfAWxdIFmVB",
    "url": "https://www.instagram.com/reel/DfAWxdIFmVB/",
    "type": "video",
    "product_type": "clips",
    "posted_at": "2026-10-27T18:00:03Z",
    "caption": "Even a moment's rest on Everest...",
    "hashtags": [],
    "mentions": ["chaivasarhelyi", "jimmychin"],
    "like_count": 38319,
    "comment_count": 180,
    "view_count": 460260,
    "engagement_rate_pct": 0.014,
    "video_duration": 68.33,
    "is_pinned": false,
    "is_collab": true,
    "coauthors": [{ "username": "chaivasarhelyi", "id": "17841401329963366" }],
    "tagged_users": [{ "username": "jimmychin", "full_name": "Jimmy Chin", "is_verified": true }],
    "location": null,
    "audio": { "kind": "original", "title": "Original audio", "artist": "natgeo" },
    "media": [{ "type": "video", "url": "https://...", "width": 1080, "height": 1920, "thumbnail_url": "https://..." }],
    "comments": [{ "id": "18107112458645766", "text": "Whoa! Can't wait for tomorrow!", "username": "m_ofarrell", "is_verified": true, "likes": 0, "posted_at": "2026-10-30T08:12:15Z" }],
    "owner": { "id": "787132", "username": "natgeo", "full_name": "National Geographic", "is_verified": true, "followers": 268242508 },
    "from_profile": "natgeo"
  }
]
```

#### Profiles with no posts

If a profile is private, not found or failed, it adds no rows and no result charges. It is listed in the run log and in a `PROFILE_ISSUES` record in **Storage**, then **Key-value stores** (a small store for run records such as this list). Each entry has `from_profile`, `status` (`not_found`, `private` or `failed`) and `error`, which is the reason. `failed` means the posts of that profile could not be loaded this time, and running again is safe because result charges apply only to saved posts. If some posts of a profile cannot be loaded, they are skipped, the rest are saved, and the log says some posts could not be collected.

If every profile is private or not found, the run still finishes without an error, with no rows, and the status reads "Done: 0 posts". Each profile is listed with its reason. The run ends as failed only when no post at all was collected because the site did not answer for some profiles.

***

### 💡 Tips and recurring runs

#### How many posts can you scrape with Fast Instagram Post Scraper?

There is no Actor-wide cap. The number depends on how many profiles you add, **Posts per profile**, the date and post type filters, the size of each profile and whether some profiles are private or unavailable. The best way to know for your use case, including run time and cost, is a quick test run. Read the platform usage on the run page afterwards.

#### Run it on a schedule

To check competitors or creators regularly with scheduled runs:

1. Set up your input in Apify Console, for example your profile list, **Only posts newer than** `7d`, and **Comments per post** `0` to keep it light.
2. Click **Save as a new task**. A task is a saved input you can run again with one click.
3. Open **Schedules**, create a schedule (for example weekly) and attach the task.
4. After each run, compare it with the previous one. Match posts by `shortcode` (the post's short code), and compare `like_count`, `comment_count` and `view_count` over time.

A weekly run with `7d` can overlap a little with the previous run depending on the time it starts, so match on `shortcode` before you count new posts. Each run reads at most **Posts per profile** posts for each profile, so raise it if a profile posts more often than that in your time window.

#### How to get faster or cheaper results

- 💡 Lower **Posts per profile**, and use **Only posts newer than** for recurring runs.
- 💡 Set **Comments per post** to `0` if you do not need comments.
- 💡 Pick **Post types** to skip formats you do not need.
- 💡 Set a **maximum charge limit** when you start a run.

#### Known issues

- ⚠️ `view_count` can be `null` for some videos.
- ⚠️ `engagement_rate_pct` and the follower fields of `owner` are `null` for posts that belong to another account and do not list the scraped profile as a collaborator.
- ⚠️ The pinned flag is checked on the first page of posts only.

***

### 🔌 Instagram post scraper API and integrations

#### Can I use it as an Instagram post API?

Yes. The [Apify API](https://docs.apify.com/api/v2) gives you programmatic access: start runs, schedule them and fetch results. Use the `apify-client` [NPM package](https://apify.com/insights_data/fast-instagram-post-scraper/api/javascript) for Node.js or the `apify-client` [PyPI package](https://apify.com/insights_data/fast-instagram-post-scraper/api/python) for Python. See the [API tab](https://apify.com/insights_data/fast-instagram-post-scraper/api) for ready-to-use code.

#### How to use an Instagram post scraper in Python

This is a short Instagram post scraper Python example:

```python
from apify_client import ApifyClient

## Find your API token in Apify Console under Settings, then API and integrations
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("insights_data/fast-instagram-post-scraper").call(run_input={
    "urls": ["https://www.instagram.com/natgeo/"],
    "maxItems": 10,
    "postTypes": "all",
    "commentsPerPost": 1,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["shortcode"], item["like_count"], item["view_count"])
```

#### Can I integrate it with other apps?

Yes. Connect it through [Apify integrations](https://apify.com/integrations) to Google Sheets, Slack, Make, Zapier, n8n and more. Three workflows that fit this Actor:

- 📊 **Posts into Google Sheets:** save your profiles as a task, schedule it weekly, and send each finished run's dataset to a Google Sheet. Add a column to track `like_count` week over week. This is a simple way to export Instagram posts to Excel-style sheets that you refresh by running again.
- 🔔 **Run-finished messages in Slack:** add a webhook (an automatic message Apify sends when a run succeeds or fails) to the task, and post a message to a Slack channel with a link to the dataset. Webhooks fire on run events, not on new posts, so the message also arrives when nothing is new.
- 🧩 **Instagram post scraper n8n:** in n8n, use the Apify node to run the Actor, then read the dataset items and pass them to Sheets, a database or an AI step.

See [webhooks](https://docs.apify.com/platform/integrations/webhooks) for how to trigger actions when a run finishes.

#### Can I use it as an Instagram scraper for Claude (MCP)?

Yes. MCP (Model Context Protocol) lets AI assistants call tools. Connect Fast Instagram Post Scraper to Claude and other AI assistants through the Apify MCP server, then ask the assistant to collect the latest posts of a profile. Open the [MCP tab](https://apify.com/insights_data/fast-instagram-post-scraper/api/mcp) for setup steps. It is a practical Instagram data extractor and Instagram post extractor for AI workflows, and it saves clean JSON you can pass to a model.

***

### 🔗 Other Instagram scrapers

- 👤 [Instagram Profile Scraper](https://apify.com/insights_data/instagram-profile-scraper): bio, followers, following, verified status, emails and phones from the bio, engagement rate and latest posts.
- 🔍 [Instagram Search Scraper](https://apify.com/insights_data/instagram-search-scraper): search Instagram by keyword, @username or link for profiles, places, posts and reels, and hashtags.
- 🧬 [Instagram Related Profiles Scraper](https://apify.com/insights_data/instagram-related-profiles-scraper): the similar and suggested accounts Instagram shows for a public profile.
- 📧 [Instagram Email Scraper](https://apify.com/insights_data/instagram-email-scraper): public emails of Instagram accounts by niche and location, @username or profile link.
- 🎙️ [Universal Media Transcriber](https://apify.com/insights_data/universal-media-transcriber): transcripts and subtitles for video, audio or podcast links, including Instagram.

***

### ❓ FAQ

#### Is it legal to scrape Instagram?

Web scraping is generally legal if you extract publicly available data. This Actor collects only what any visitor can see on public profiles. However, you should **respect personal data** (for example, under GDPR) and intellectual property regulations, only collect personal data with a legitimate reason, and take Instagram's [Terms of Use](https://www.instagram.com/legal/terms/) into account.

#### Can you scrape Instagram reels?

Yes. As an Instagram reels scraper, it returns Reels as posts with `type` `video`, with `view_count`, `video_duration`, `audio`, comments and links. To scrape Instagram reels only, set **Post types** to videos and Reels only.

#### How does Fast Instagram Post Scraper work?

It works like a visitor browsing a public profile, without the manual clicking, and it acts as an Instagram post data scraper for the profiles you list. For each profile, it reads the posts newest first, applies your post type and date filters, loads each post's details, and saves each post to the dataset as soon as it is ready. Private and unavailable profiles are skipped and listed.

#### How is Fast Instagram Post Scraper different from Instagram Profile Scraper?

They answer different questions, and you can use both.

- 📸 **Fast Instagram Post Scraper** focuses on posts. Each post comes with caption, hashtags, mentions, likes, comments, Reel views, media links, audio, tagged users, collaborators and up to 15 top-level comments. You can filter by post type and date. It returns no emails or phone numbers.
- 👤 [Instagram Profile Scraper](https://apify.com/insights_data/instagram-profile-scraper) focuses on the account. It is described as returning bio, followers, following, verified status, emails and phones from the bio, engagement rate and the latest posts with likes and comments.

Use this Actor when the posts are what you need. Use Instagram Profile Scraper when you need account details or contact data from the bio.

#### Do I need an Instagram account or cookies?

No. It is an Instagram scraper no login or cookies required. There is no field for an account, and only public profiles work.

#### Is this an Instagram post likes scraper that lists who liked a post?

No. It returns the number of likes (`like_count`) for each post. It does not list the accounts that liked it. `like_count` is `null` when the owner hid likes, and `likes_hidden` tells you that.

#### How is the engagement rate calculated?

For each post, `engagement_rate_pct` is (likes + comments) / followers x 100, rounded to 3 decimals. It is filled only when the post belongs to, or is co-authored by, the scraped profile and the likes are visible. That makes it a quick starting point for comparing creators, not a replacement for your own judgment.

#### Why am I getting fewer results than expected?

- Check **Posts per profile**. The default is 10 per profile, not per run.
- Check **Only posts newer than** and **Post types**. They drop posts that do not match.
- A profile may be private, not found or failed. Look at the run log and the `PROFILE_ISSUES` record for the reason.
- A small number of posts may fail to load. The log says when that happens.

Run it again later if a profile failed. Result charges apply only to saved posts.

#### Can I scrape stories, hashtag feeds or contact details?

No. Stories, highlights, hashtag or keyword feeds and emails or phones are not part of this Actor. See the Other Instagram scrapers section above for the Actors that cover them.

***

### 📧 Support and feedback

Found a bug or have a feature request? Please create an issue on the [Issues tab](https://apify.com/insights_data/fast-instagram-post-scraper/issues/open).

Need a **custom solution** or more data? Contact us at hello.insights.data@gmail.com.

Built and maintained by [insights_data](https://apify.com/insights_data).

# Actor input Schema

## `urls` (type: `array`):

One Instagram profile link or username per line (with or without @). Add as many profiles as you like. Post, Reel and story links are not supported.

## `maxItems` (type: `integer`):

Maximum number of posts to collect from each profile, newest first. Use 0 to collect everything the profile has.

## `postedSince` (type: `string`):

Skip older posts. Use a relative value such as 12h, 7d, 2w, 3m or 1y, or a date such as 2026-09-01. Leave empty for no limit.

## `postTypes` (type: `string`):

Collect every post, or only one kind. Videos include Reels.

## `commentsPerPost` (type: `integer`):

How many of the latest top-level comments to attach to each post (0 to 15). Use 0 to skip comments.

## `retries` (type: `integer`):

How many times a blocked or failed request is retried before it is given up (1 to 10).

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

Runs without a proxy by default. If the site rejects a request, the Actor switches to a datacenter proxy and then to a residential proxy on its own.

## Actor input object example

```json
{
  "urls": [
    "https://www.instagram.com/natgeo/"
  ],
  "maxItems": 10,
  "postTypes": "all",
  "commentsPerPost": 1,
  "retries": 3,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Every post, overview table.

## `overview` (type: `string`):

One row per post.

## `engagement` (type: `string`):

Numbers and flags per post.

## `text` (type: `string`):

Caption, hashtags, mentions and image description.

## `media` (type: `string`):

One row per photo or video file of each post.

## `comments` (type: `string`):

One row per attached comment.

## `owner` (type: `string`):

Account that published each post.

## `tagged` (type: `string`):

One row per tagged account.

## `collaborators` (type: `string`):

One row per co-author of a collab post.

## `audio_location` (type: `string`):

Sound used and place tagged.

## `issues` (type: `string`):

Profiles that were private, not found or blocked (JSON list, present only when there were issues).

## `all_fields` (type: `string`):

Every post with all fields, unfiltered.

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

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

# Run the Actor and wait for it to finish
run = client.actor("insights_data/fast-instagram-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 '{
  "urls": [
    "https://www.instagram.com/natgeo/"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call insights_data/fast-instagram-post-scraper --silent --output-dataset

```

## MCP server setup

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