# Instagram Scraper: extract posts, reels, profiles and comments

Apidojo Instagram Scraper is a no-login Instagram data API that collects posts, reels, profiles, hashtags, locations and audio pages from any public Instagram URL. It costs $0.49 per 1,000 posts, returns up to 199 posts per second, and exports JSON, CSV or Excel.

[Run your first URL](https://apify.com/apidojo/instagram-scraper)

[See sample output](#output)

Free Apify plan: 5 runs a month, 10 items a run. No credit card.

**$0.49** per 1,000 posts

**199/s** peak post rate

**19K** users on Apify

**99.73%** run success, 30 days

Users and run success are the five Instagram scrapers combined. Read on 21 September 2026.

## What are the Instagram Scraper specifications?

Apidojo Instagram Scraper runs on the Apify platform and accepts Instagram URLs as input: profile, hashtag, location, audio, reels and tagged-posts URLs. Each post returns 12 top-level fields plus nested owner, location, image and video objects, exported as JSON, CSV or Excel.

**Data sources on Instagram:** Profiles, hashtags, locations, reels, audio pages and a profile’s tagged posts

**Inputs:** startUrls, until, maxItems, customMapFunction

**Price:** $0.49 per 1,000 posts on Bronze; $0.48 on Silver, $0.47 on Gold and above, $0.50 on the free plan

**Speed:** 199 posts/sec (hashtags) · 183 (locations) · 147 (profiles) · 115 (audio) · 94 (reels) · 85 (tagged)

**Minimum per input:** 10 posts. Smaller inputs create overhead and can trip the rate limiter

**Date filtering:** until returns only posts newer than the date given

**Output shaping:** customMapFunction, one synchronous JavaScript function per item

**Export formats:** JSON, JSONL, CSV, Excel, XML, HTML table, API

**Login, proxy or API key:** None required

**Free plan:** Demo mode, 5 runs per month, 10 items per run, no API access

**Delivery:** Apify dataset, webhooks, or an MCP connector writing straight into Notion or Todoist

**Integrations:** Apify REST API, Python and JavaScript clients, n8n, Make, Zapier, MCP

**Maintenance:** Daily, by a dedicated engineering team

## What does Instagram Scraper output look like?

Instagram Scraper output is one JSON object per post. Each object carries the post ID, shortcode, URL, creation date, caption, like and comment counts, a nested owner object, and location, image and video objects where the post has them.

**Profile posts**

**Hashtag**

**Location**

**Reels and audio**

Runs on apidojo/instagram-scraper

A profile URL with a date floor. The most common job by far.

Input

```
{
  "startUrls": ["https://www.instagram.com/nasa/"],
  "until": "2026-01-01",
  "maxItems": 1000
}
```

Output

```
"owner": {
  "id": "62815273217",
  "username": "nasa",
  "fullName": "NASA",
  "isPrivate": false,
  "isVerified": true,
  "followerCount": 98200000,
  "followingCount": 78,
  "postCount": 4211
}
```

Runs on apidojo/instagram-scraper

Posts and reels published under a tag. Same post schema as a profile run.

Input

```
{
  "startUrls": [
    "https://www.instagram.com/explore/tags/streetphotography/"
  ],
  "maxItems": 2000
}
```

Output

```
{
  "code": "C7xQm2NtLaK",
  "caption": "Late light on the crossing.",
  "likeCount": 4210,
  "commentCount": 88,
  "isCarousel": true,
  "createdAt": "2026-09-13T11:02:19.000Z"
}
```

Runs on apidojo/instagram-scraper

Geo-tagged posts. Every item carries coordinates you can map directly.

Input

```
{
  "startUrls": [
    "https://www.instagram.com/explore/locations/213385402/new-york-new-york/"
  ],
  "maxItems": 1000
}
```

Output

```
"location": {
  "id": "215927995",
  "name": "New York, New York",
  "slug": "new-york-new-york",
  "lat": 40.7128,
  "lng": -74.006
}
```

Runs on apidojo/instagram-scraper

A profile’s reels tab, or an audio page to find every reel using a sound.

Input

```
{
  "startUrls": [
    "https://www.instagram.com/nasa/reels",
    "https://www.instagram.com/reels/audio/271328201351336/"
  ]
}
```

Output

```
"video": {
  "id": "235268832770811v",
  "url": "https://...mp4",
  "width": 1078,
  "height": 1916,
  "duration": 28.281,
  "playCount": 3321
}
```

### What the fields are

-   #### Post content

    ID, shortcode, URL, caption, creation time, carousel and video flags, paid-partnership flag

-   #### Engagement

    Likes, comments, video play count, pinned and hidden-count flags

-   #### Owner profile

    Username, full name, user ID, followers, following, post count, verified and private flags, avatar

-   #### Media and context

    Image and video URLs with dimensions and duration, co-owners, location with coordinates

| Field | Type | Example value | Group |
| --- | --- | --- | --- |
| id | string | 3245142029192513970_62815273217 | Content |
| code | string | C0JD3tntcmy | Content |
| url | string | https://www.instagram.com/p/C0JD3tntcmy/ | Content |
| createdAt | string (ISO 8601) | 2023-11-27T07:48:34.000Z | Content |
| caption | string | Full caption text, hashtags included | Content |
| isCarousel | boolean | false | Content |
| isVideo | boolean | true | Content |
| isPinned | boolean | false | Content |
| isPaidPartnership | boolean | false | Content |
| likeCount | integer | 114 | Engagement |
| commentCount | integer | 5 | Engagement |
| isLikeAndViewCountsDisabled | boolean | false | Engagement |
| owner.username | string | jogi.lapki.bydgoszcz | Owner |
| owner.fullName | string | Joga z pieskami | Owner |
| owner.id | string | 62815273217 | Owner |
| owner.followerCount | integer | 5917 | Owner |
| owner.followingCount | integer | 5917 | Owner |
| owner.postCount | integer | 48 | Owner |
| owner.isVerified | boolean | false | Owner |
| owner.isPrivate | boolean | false | Owner |
| owner.profilePicUrl | string | https://scontent.cdninstagram.com/…jpg | Owner |
| coowners[] | array of objects | Collaborators credited on the post | Owner |
| location.name | string | Bydgoszcz, Poland | Context |
| location.lat | float | 53.1222 | Context |
| location.lng | float | 17.9986 | Context |
| video.url | string | https://scontent.cdninstagram.com/…mp4 | Context |
| video.duration | float | 28.281 | Context |
| video.playCount | integer | 3321 | Context |

## Which Apidojo Instagram scraper fits your job?

Apidojo publishes 5 Instagram scrapers. Instagram Scraper collects posts and reels from any Instagram URL at $0.49 per 1,000, and the Hashtag, User, Comments and Location scrapers each handle one job, three of them billing a small fee per query with free items included.

### Instagram Scraper

`apidojo/instagram-scraper`

9K users · 4.7 (36)

The main scraper. Collects posts and reels from profile, hashtag, location, audio, reels and tagged-posts URLs, with a date filter and a custom output map function.

-   Profiles, hashtags and locations
-   Reels, audio pages and tagged posts
-   Full post, engagement and owner fields
-   Up to 199 posts per second
-   Date filtering with until
-   Minimum 10 posts per input

**$0.49 / 1,000 posts** Pay per result · $0.47 on Gold and above

[Open Instagram Scraper](/scrapers/instagram-scraper/) [See accepted URLs](#reference)

### Instagram scrapers for a single job

-   [Instagram Hashtag Scraper `apidojo/instagram-hashtag-scraper` Posts and reels published under a hashtag, built for campaign tracking across many tags at once. Top and recent posts per tag · Full post schema per item · 60 items free per hashtag $0.016 / hashtag + $0.40 / 1K 3.3K users · 3.4 (16)](/scrapers/instagram-hashtag-scraper/)
-   [Instagram Profile Scraper `apidojo/instagram-user-scraper` People rather than posts: profiles by handle, URL or keyword, plus follower and following lists and public business emails. Follower and following lists · Bio, counts, verification, category · 40 profiles free per keyword search $0.01 / profile + $0.50 / 1K 2.4K users · 3.6 (13)](/scrapers/instagram-user-scraper/)
-   [Instagram Comments Scraper API `apidojo/instagram-comments-scraper-api` Comments and replies with the commenter attached, billed per post so small jobs stay cheap. Comment text, likes and replies · Commenter profile per comment · 15 comments free per post $0.0075 / post + $0.50 / 1K 2.2K users · 3.8 (11)](/scrapers/instagram-comments-scraper-api/)
-   [Instagram Location Scraper `apidojo/instagram-location-scraper` Geo-tagged posts from any Instagram location page, with coordinates on every item. Built for local and venue research. Posts per location page · Coordinates, name and place ID · No query fee $0.50 / 1,000 posts 1.9K users · 5.0 (10)](/scrapers/instagram-location-scraper/)

## How much does Instagram Scraper cost?

Instagram Scraper costs $0.49 per 1,000 posts, billed per result with no per-run fee. That is 4.7 times cheaper than Apify’s own Instagram Scraper, which charges $0.0023 per result, or $2.30 per 1,000 posts.

$0.49per 1,000 posts

-   Pay per result, no per-run fee
-   $0.48 on Silver, $0.47 on Gold and above
-   Minimum 10 posts per input

[Run your first query](https://apify.com/apidojo/instagram-scraper)

| Scraper | Query fee | Per item |
| --- | --- | --- |
| Instagram Hashtag Scraper | $0.016 per hashtag (60 items free) | $0.40 / 1K |
| Instagram Profile Scraper | $0.01 per profile · $0.02 per keyword search | $0.50 / 1K |
| Instagram Comments Scraper API | $0.0075 per post (15 comments free) | $0.50 / 1K |

| Job | Scraper | Calculation | Cost |
| --- | --- | --- | --- |
| 100,000 posts from a hashtag | Instagram Scraper | 100,000 × $0.00049 | $49.00 |
| 500 profiles × 50 recent posts | Instagram Scraper | 25,000 × $0.00049 | $12.25 |
| 20 campaign hashtags, 1,000 posts each | Hashtag Scraper | 20 × $0.016 + 18,800 × $0.0004 | $7.84 |
| 10,000 followers of one account | User Scraper | $0.01 + 10,000 × $0.0005 | $5.01 |
| 5,000 comments across 50 posts | Comments Scraper API | 50 × $0.0075 + 4,250 × $0.0005 | $2.50 |
| One city location, 2,000 posts | Location Scraper | 2,000 × $0.0005 | $1.00 |

Prices apply to Apify paid plans and step down by tier: $0.49 on Bronze, $0.48 on Silver, $0.47 on Gold and above. The free plan runs Instagram Scraper in demo mode, 5 runs a month, 10 items a run, with no API access.

## How does Instagram Scraper compare with the official Instagram API?

The official Instagram Graph API returns data only for accounts that authorise your app. It cannot read another brand’s posts, a competitor’s followers or an open hashtag feed at scale. Instagram Scraper reads any public Instagram URL for $0.49 per 1,000 posts, with no Meta app, no review process and no Business account.

|  | Apidojo Instagram Scraper | Instagram Graph API | Apify Instagram Scraper |
| --- | --- | --- | --- |
| Cost per 1,000 posts | $0.49 | No per-call charge | $2.30 |
| Cost for 100,000 posts | $49 | No per-call charge | $230 |
| Whose data you can read | Any public profile, hashtag or location | Only accounts that authorise your app | Any public profile, hashtag or location |
| Setup before the first result | An Apify account | Professional account, Facebook Page, Meta app review | An Apify account |
| Hashtag search | Any hashtag, no cap | 30 unique hashtags per 7-day period | Any hashtag |
| Follower lists | Yes, via Instagram Profile Scraper | No | Yes |
| Rate limits | Set by your Apify plan | 4,800 × impressions per 24 hours | Set by your Apify plan |
| Personal-account access | Public posts only | Professional accounts only | Public posts only |
| Post, comment or send a DM | No, read-only | Yes | No, read-only |
| Contractual SLA | No. Maintained daily, no contract. | Meta platform terms | Maintained by Apify |

Graph API limits from Meta’s Instagram Platform documentation read on the snapshot date: 30 unique hashtags per 7-day period, and a general rate limit of 4,800 × impressions per 24 hours. Apify’s price is the public pricing on apify/instagram-scraper, $0.0023 per result.

## How to scrape Instagram with Apidojo in 4 steps

Scraping Instagram with Apidojo takes 4 steps: open the scraper, paste Instagram URLs, set the date and item limits, then run and export. No code, proxy or Instagram account is required.

1.  01

    ### Open Instagram Scraper on Apify

    Sign in with a free Apify account. No credit card is needed to run it in demo mode.

2.  02

    ### Paste Instagram URLs

    Profile, hashtag, location, audio, reels or tagged-posts URLs, one per row, exactly as they appear in the address bar.

3.  03

    ### Set the date and item limits

    Use until as a date floor and maxItems to cap both the run and the cost. Keep each input above 10 posts.

4.  04

    ### Run and export the dataset

    Download JSON, CSV or Excel, or have the run write straight into Notion through an MCP connector.

### Which Instagram URLs it accepts

| URL type | Returns | Example URL |
| --- | --- | --- |
| Profile | Posts and reels published by an account | instagram.com/nasa/ |
| Hashtag | Posts published under a tag | instagram.com/explore/tags/travel |
| Location | Geo-tagged posts at a place | instagram.com/explore/locations/213131048/berlin-germany/ |
| Audio | Reels using a sound | instagram.com/reels/audio/271328201351336/ |
| Reels | A profile’s reels tab | instagram.com/nasa/reels |
| Tagged | Posts other accounts tagged a profile in | instagram.com/nasa/tagged |

-   #### `until`

    Returns only posts newer than the date given. Use it for monitoring runs instead of re-scraping a whole profile, but do not set it so close to now that the run returns almost nothing, because that still consumes a run.

-   #### `customMapFunction`

    One synchronous JavaScript function, one item in, one object out. Reshape or flatten items before they are stored. It cannot drop items and cannot contain date logic, filter by date with until instead.

## How do you call the Instagram Scraper API?

Instagram Scraper runs through the Apify REST API and the official Python and JavaScript clients. One POST to the run-sync endpoint starts the scraper and returns the posts as JSON in the same response.

**Python**

**JavaScript**

**cURL**

**MCP**

```
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("apidojo/instagram-scraper").call(run_input={
    "startUrls": ["https://www.instagram.com/nasa/"],
    "until": "2026-01-01",
    "maxItems": 1000,
})

for post in client.dataset(run.default_dataset_id).iterate_items():
    print(post["createdAt"], post["likeCount"], post["url"])
```

```
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });

const run = await client.actor('apidojo/instagram-scraper').call({
  startUrls: ['https://www.instagram.com/explore/tags/streetphotography/'],
  maxItems: 1000,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0].caption);
```

```
curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~instagram-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"startUrls":["https://www.instagram.com/nasa/"],"maxItems":500}'
```

```
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com/?tools=apidojo/instagram-scraper",
      "headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
    }
  }
}
```

-   ### MCP connectors

    Write results straight into Notion or Todoist, outputConnector and deliverTarget, no export step.

-   ### n8n, Make and Zapier

    The Apify app connects the scraper to your tools.

-   ### Webhooks

    POST to any URL on run success.

-   ### Scheduling

    Apify schedules with until set to the last run date.

## How fast is Instagram Scraper?

Instagram Scraper returns 199 posts per second from hashtags, 183 from locations and 147 from profiles in Apidojo’s published benchmark. At 147 posts per second a 10,000-post profile export finishes in about 70 seconds.

Hashtags199 posts/sec

Locations183 posts/sec

Profiles147 posts/sec

Audio pages115 posts/sec

Reels94 posts/sec

Tagged posts85 posts/sec

| Dataset size | At 147/sec, profiles | At 199/sec, hashtags |
| --- | --- | --- |
| 1,000 posts | ≈ 7 s | ≈ 5 s |
| 10,000 posts | ≈ 1 min 8 s | ≈ 50 s |
| 100,000 posts | ≈ 11 min 20 s | ≈ 8 min 22 s |

Benchmark published on the Instagram Scraper listing, run with identical inputs and resources per input type. Real speed varies with Instagram response times and input shape.

**9K** users on Instagram Scraper

**9.5M** Instagram Scraper runs, all time

**4.7 / 5** from 36 Apify reviews

**5** Instagram scrapers in the family

That rating is Instagram Scraper’s own, not an average across the five. Users and runs in the hero are the five combined; these four are the main scraper alone.

## What can you build with Instagram Scraper data?

Instagram Scraper data powers 6 common workflows: influencer vetting, brand monitoring, campaign tracking, local and venue research, competitor benchmarking and AI training datasets. Each recipe below gives the input, the fields it uses and where the output lands.

-   ### Influencer vetting

    `instagram.com/{handle}/ · 50 recent posts`

    **likeCount, commentCount, owner.followerCount, isPaidPartnership** Fields

-   ### Brand monitoring

    `explore/tags/{brand}/ + {brand}/tagged`

    **caption, owner.username, createdAt** Fields

-   ### Campaign tracking

    `20 campaign hashtags, until = launch date`

    **caption, likeCount, commentCount** Fields

-   ### Local and venue research

    `explore/locations/{id}/{slug}/`

    **location.lat, location.lng, caption** Fields

-   ### Competitor benchmarking

    `10 competitor profiles, weekly schedule`

    **createdAt, likeCount, isVideo** Fields

-   ### AI training datasets

    `Hashtags by niche, customMapFunction to flatten`

    **caption, video.url, owner.username** Fields

## What are the limits of Instagram Scraper?

Instagram Scraper operates under 5 documented limits. Each one below states the workaround, and three of the five are answered by another scraper in the same family.

-   ### Minimum 10 posts per input

    Inputs asking for fewer create overhead and can trip the rate limiter.

    Raise maxItems, or batch several URLs into one run rather than many tiny runs.

-   ### Public content only

    Private accounts, their stories and direct messages are out of scope.

    Open the profile in a logged-out browser window first, if you cannot see it there, neither can the scraper.

-   ### A tight until date wastes runs

    Setting the date close to now returns almost nothing and still consumes a run.

    Set until to the last run’s date for monitoring, and use wider windows for backfills.

-   ### customMapFunction cannot filter

    Returning null to drop items is treated as abuse of pay-per-result pricing, and date logic is blocked outright.

    Reshape with the map function, filter by date with until, and cap volume with maxItems.

-   ### The free plan runs in demo mode

    5 runs per month, 10 items per run, and no API access.

    Any paid Apify plan removes the cap and unlocks the API.

## Is it legal to use an Instagram scraper?

Collecting publicly visible, logged-out Instagram data is generally lawful in the United States. US courts have held that scraping public pages does not violate the Computer Fraud and Abuse Act, in hiQ Labs v. LinkedIn (9th Cir., 2022). Personal data inside posts and profiles remains subject to GDPR and CCPA.

-   ### What the scraper collects

    Only content visible without logging in. No private accounts, no direct messages, nothing behind a follow request.

-   ### What you are responsible for

    A lawful basis for processing personal data, a retention limit, and Meta’s terms, which restrict automated collection.

-   ### Extra care with emails

    Public business emails returned by Instagram Profile Scraper are personal data under GDPR. Use them only with a lawful basis and a working opt-out.

This is general information, not legal advice.

## Instagram Scraper frequently asked questions

### Everything else people ask

Fifteen questions about this scraper and its family. Anything about the wider catalogue is answered on the scrapers hub.

[All 26 scrapers](/scrapers/)

### Do I need an Instagram login or API key to use Instagram Scraper?

No. It collects public data without an Instagram account, cookies, proxies or API key. You need only a free Apify account.

### Can Instagram Scraper extract reels?

Yes. Paste a profile’s reels tab or an audio page URL. Each reel returns its video URL, dimensions, duration and play count.

### Can Instagram Scraper filter posts by date?

Yes. The until field returns only posts newer than the date you give. Use it to run daily or weekly monitoring without re-scraping a whole profile.

### Can Instagram Scraper send results to Notion?

Yes. Authorise an Apify MCP connector once, then set outputConnector and a Notion page URL in the input. The scraper builds a typed database from the results, one column per field.

### Which Instagram URLs does it accept?

Six types: profile, hashtag, location, audio, reels and tagged-posts URLs. Paste them exactly as they appear in the browser address bar.

### Can Instagram Scraper scrape private accounts?

No. It reads only what a logged-out visitor can see. Private profiles, their stories and direct messages are out of scope.

### How many posts can it return per profile?

As many as Instagram serves to a logged-out visitor, capped by maxItems. Each input must request at least 10 posts.

### Why did my run return no results?

Runs return nothing when the input asks for fewer than 10 posts, the until date is too recent, or the account is private. Open the URL in a logged-out browser window to see what Instagram actually serves.

### Can Instagram Scraper get follower lists and emails?

Follower and following lists run on Instagram Profile Scraper, which also returns public business emails where an account publishes one. Instagram Scraper itself returns follower counts inside each post’s owner object.

### Can Instagram Scraper scrape comments?

Not itself. Instagram Comments Scraper returns comment text, likes, replies and commenter profiles at $0.50 per 1,000 comments, and the API variant bills $0.0075 per post with 15 comments free.

### How much does it cost to scrape 10,000 Instagram posts?

Scraping 10,000 Instagram posts costs $4.90 at $0.49 per 1,000. The same job costs $23.00 on Apify’s own Instagram Scraper.

### Is there a free Instagram Scraper plan?

Yes. The free Apify plan allows 5 runs per month with 10 items per run and no credit card. API access requires a paid plan.

### Which formats does it export?

JSON, JSONL, CSV, Excel, XML and HTML tables, plus the Apify API for pulling results straight into your stack.

### Does it work with n8n, Make and Zapier?

Yes, through the Apify app in all three, and through webhooks for anything else.

### Can AI agents use Instagram Scraper through MCP?

Yes. The Apify MCP server exposes it as a tool to Claude, Cursor and other MCP clients.

## Other Apidojo scrapers

Instagram is one of six sources in the catalogue. Every scraper publishes its inputs, its output fields and its price the same way this one does.

-   [Twitter Scraper Tweets, replies, profiles and Lists](/scrapers/twitter-scraper/)
-   [TikTok Scraper Videos, creators and comments](/scrapers/tiktok-scraper/)
-   [YouTube Scraper Videos, channels and transcripts](/scrapers/youtube-scraper/)
-   [Google Search Scraper Organic SERP results](/scrapers/google-search-scraper/)

[Browse all 26 scrapers](/scrapers/)

Apidojo

## Run Instagram Scraper on your first URL

Paste a profile, hashtag or location URL. The free Apify plan runs it in demo mode with no credit card, and the output shape is the one documented on this page.

[Run your first URL](https://apify.com/apidojo/instagram-scraper)

-   `instagram.com/nasa/` One profile, newest posts first
-   `instagram.com/explore/tags/streetphotography/` Everything published under a tag
-   `instagram.com/explore/locations/213385402/new-york-new-york/` Geo-tagged posts with coordinates

Every one of these runs on Instagram Scraper at $0.49 per 1,000 posts.

Apidojo is not affiliated with Meta Platforms, Inc.
