# Instagram Posts Scraper (No Login) (`sfoln/instagram-user-posts`)

Scrape the latest posts and reels of public Instagram profiles, no login needed: caption, date, likes, comments, views, media URLs, hashtags, mentions and location, one row per post. $0.60 per 1,000 posts + $0.003 per page of about 12.

- Family: Social media data
- Categories: Social media, Lead generation, Automation
- Availability: on request (private on Apify). Email contact@sfoln.com with subject "Access request: Instagram Posts Scraper (No Login) (sfoln/instagram-user-posts)" before calling; calls fail until it is public.
- JSON: https://www.sfoln.com/actors/instagram-user-posts.json
- MCP: https://mcp.apify.com?tools=sfoln/instagram-user-posts
- REST (sync): POST https://api.apify.com/v2/actors/sfoln~instagram-user-posts/run-sync-get-dataset-items
- REST (async): POST https://api.apify.com/v2/actors/sfoln~instagram-user-posts/runs

Instagram Posts Scraper (No Login) gets the latest posts of public Instagram profiles with one normalized record per post: shortcode, URL, type (image / video / carousel / reel), caption, post date, likes, comments, video views, thumbnail, all media URLs, hashtags, mentions, tagged users, pinned flag and location. You can optionally also read the Reels tab. It's built for influencer vetting, brand and competitor monitoring, content analytics and AI agents.

## Price per delivered record

| Event | Price | Per 1,000 | Charged for |
| --- | --- | --- | --- |
| Instagram post (`instagram-post`) | $0.0006 | $0.60 / 1,000 | Charged once per Instagram post or reel delivered as a dataset record. User summary records are never charged. |
| Instagram posts page (`instagram-posts-query`) | $0.003 | $3 / 1,000 | Charged once per page of a user's posts or reels (about 12 per page) that delivered at least one post, or that the provider billed although it had no new posts (e.g. a private account's empty feed). Covers the per-request upstream fee. |

Pay-per-event, USD, billed by Apify; no platform usage charge. Only records with status `ok` are charged. Cap a run with `maxTotalChargeUsd`. Apify free plan: up to 10 per run.

## Run

```bash
curl -X POST "https://api.apify.com/v2/actors/sfoln~instagram-user-posts/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"handles":["nasa"],"maxPostsPerUser":6}'
```

MCP client configuration:

```json
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/instagram-user-posts"
    }
  }
}
```

Example prompt: Get the 12 latest Instagram posts of @nasa and rank them by likes and comments.

## Input

Paste Instagram handles or profile URLs. Each profile produces one dataset record per post (newest first) plus one summary record per profile.

| Field | Type | Default | Meaning |
| --- | --- | --- | --- |
| `handles` (required) | array | — | Instagram profiles: Handles (with or without @) or profile URLs such as https://www.instagram.com/nasa/. Post and reel URLs are not accepted. Duplicates are removed. Accounts on the Apify free plan can process up to 10 profiles per run. |
| `maxPostsPerUser` | integer | `12` | Max posts per profile: How many of the newest posts to return per profile (1–120). Posts are fetched in pages of about 12; each delivered post is one charged event, plus one page event per page. |
| `includeReels` | boolean | `false` | Also fetch the Reels tab: Also read the profile's Reels tab (up to the same limit) and add reels that are not already in the posts feed. Reels from this tab come without captions. Billed like posts. |
| `maxUsers` | integer | `100` | Max profiles: Safety cap on the number of profiles processed in this run. |
| `concurrency` | integer | `4` | Concurrency: How many profiles are fetched in parallel (1–8). |
| `itemTimeoutSecs` | integer | `600` | Time limit per input (seconds): Pagination for one profile stops cleanly shortly before this limit (60–3600). Raise it for very large per-input limits. |
| `includeRaw` | boolean | `false` | Include raw upstream response: Attach the unmodified provider post object to each post record (much larger output). |

Example input:

```json
{
  "handles": [
    "nasa"
  ],
  "maxPostsPerUser": 6
}
```

## Output

One record per input item with `status` (`ok` is charged; `not_found`, `error`, `skipped_*` are free) and `charged`. The run stores an `OUTPUT` summary record.

| Field | Type | Meaning |
| --- | --- | --- |
| `input` | string | object | Input: The handle or profile URL as provided. |
| `recordType` | string | Record type: post (one per delivered post, charged) \| user (one summary per profile, never charged) |
| `handle` | string | null | Handle |
| `feed` | string | Feed: posts (main grid) \| reels (Reels tab, only with includeReels) |
| `position` | integer | Position |
| `postId` | string | null | Post ID |
| `shortcode` | string | null | Shortcode |
| `url` | string | null | URL |
| `type` | string | null | Type: image \| video \| carousel \| reel |
| `caption` | string | null | Caption |
| `takenAt` | string | null | Posted at: ISO 8601 UTC |
| `likes` | number | null | Likes: null when the owner hides like counts |
| `comments` | number | null | Comments |
| `views` | number | null | Views: Video/reel plays (Instagram only); null for images |
| `durationSecs` | number | null | Duration (s) |
| `thumbnailUrl` | string | null | Thumbnail URL |
| `mediaUrls` | array | Media URLs: Image/video URLs (one per carousel item); CDN links expire. |
| `mediaCount` | integer | Media count |
| `hashtags` | array | Hashtags |
| `mentions` | array | Mentions: @handles mentioned in the caption |
| `taggedUsers` | array | Tagged users |
| `isPinned` | boolean | null | Pinned |
| `isPaidPartnership` | boolean | null | Paid partnership |
| `locationName` | string | null | Location |
| `ownerHandle` | string | null | Owner handle |
| `ownerId` | string | null | Owner ID |
| `profileUrl` | string | Profile URL: user records only. |
| `postsDelivered` | integer | Posts delivered: user records only. |
| `reelsDelivered` | integer | Extra reels delivered: user records only. |
| `pagesFetched` | integer | Pages fetched: user records only. |
| `pagesCharged` | integer | Pages charged: user records only. |
| `reachedEnd` | boolean | Reached end: user records only. |
| `stopReason` | string | Stop reason: user records only. |
| `status` | string | Status: ok \| not_found \| error \| skipped_invalid \| skipped_budget \| skipped_free_plan |
| `charged` | boolean | Charged: Post records: charged instagram-post. user summary records are never charged themselves: the instagram-posts-query page fees charged for the input (including empty pages the provider billed) are counted in pagesCharged. |
| `chargedEvent` | string | Charged event |
| `error` | object | Error |
| `warnings` | array | Warnings |
| `source` | string | Source |
| `fetchedAt` | string | Fetched at |

Example record:

```json
{
  "input": "carsoncantcode",
  "recordType": "post",
  "handle": "carsoncantcode",
  "feed": "posts",
  "position": 1,
  "postId": "3644028144127958689_59042353222",
  "shortcode": "DKSMEpKRd6h",
  "url": "https://www.instagram.com/p/DKSMEpKRd6h/",
  "type": "reel",
  "caption": "5 best college baseball regional plays for day 1 #baseball",
  "takenAt": "2025-05-30T16:20:51.000Z",
  "likes": 29,
  "comments": 7,
  "views": 2647,
  "durationSecs": 72.1,
  "thumbnailUrl": "https://scontent.cdninstagram.com/…jpg",
  "mediaUrls": [
    "https://scontent.cdninstagram.com/…mp4"
  ],
  "mediaCount": 1,
  "hashtags": [
    "baseball"
  ],
  "mentions": [],
  "taggedUsers": [],
  "isPinned": false,
  "isPaidPartnership": false,
  "locationName": null,
  "ownerHandle": "carsoncantcode",
  "ownerId": "59042353222",
  "status": "ok",
  "charged": true,
  "chargedEvent": "instagram-post",
  "source": "scrapecreators",
  "fetchedAt": "2026-10-14T10:00:00.000Z"
}
```

## Related

- [Instagram Comments Scraper (No Login)](https://www.sfoln.com/actors/instagram-post-comments.md) (`sfoln/instagram-post-comments`)
- [Instagram Hashtag Scraper (No Login)](https://www.sfoln.com/actors/instagram-hashtag-posts.md) (`sfoln/instagram-hashtag-posts`)
- [Instagram Engagement Rate & Audit](https://www.sfoln.com/actors/instagram-account-audit.md) (`sfoln/instagram-account-audit`)

Publisher: SFOLN LLC, contact@sfoln.com. Catalogue: https://www.sfoln.com/catalog.json. Agent guide: https://www.sfoln.com/agents.md.
