Instagram Post Scraper (No Login) avatar

Instagram Post Scraper (No Login)

Pricing

$1.20 / 1,000 posts

Go to Apify Store
Instagram Post Scraper (No Login)

Instagram Post Scraper (No Login)

Get the latest 12 posts of public Instagram profiles, or any post or reel by link, without logging in: caption, likes, comment count, date, images, video, hashtags, mentions, tagged users, co-authors and location. No duplicates, a row for every input. $1.20 per 1,000 posts, all data included.

Pricing

$1.20 / 1,000 posts

Rating

0.0

(0)

Developer

Deependra Singh

Deependra Singh

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

a month ago

Last modified

Categories

Security

Limited permissions

Share

Pull public Instagram posts into a spreadsheet, JSON feed or your own app. Give it usernames, profile links or post links and get back captions, likes, comment counts, images, videos, hashtags, mentions, tagged accounts, co-authors, locations and more. Profiles return their latest 12 posts; post and reel links return that exact post, however old.

$1.20 per 1,000 posts, all data included. No add-ons, no start fee, and you only pay for posts that pass your filters.

Why this one

  • One simple price. $0.0012 per post with every field included: comments, alt text, music and partnership info at no extra cost.
  • Built to be stable. Stress-tested on 80 profiles in a single run: 888 posts, every input answered, zero duplicates, zero missing core fields.
  • Pay only for what you keep. Filter by date range, post type (image, reel, carousel), minimum likes and minimum comments. Skipped posts cost nothing.
  • Never charged twice. A post that appears under two profiles (collabs) or as both a profile post and a link is returned and billed once per run.
  • Nothing fails silently. Every input gets at least one row: posts, or a free row explaining why there are none (private, not found, filters matched nothing, cost limit reached).
  • Same input, same output. Profile posts are sorted newest-first before limits and filters, so repeat runs are consistent.
  • Predictable spend. Cap posts per profile and posts per run. The run also stops cleanly at your "Maximum cost per run".
  • Drop-in compatible. Input names (username, resultsLimit, onlyPostsNewerThan, skipPinnedPosts, dataDetailLevel) and output field names follow the format most Instagram post scrapers use, so you can switch without rewriting integrations. A resultsLimit above 12 is accepted and returns the 12 visible posts.
  • Slim output. Keep only the fields you need with outputFields.
  • No login, no cookies. Only public data; your accounts are never at risk.

What you get

Every postDetailed level (same price)
URL, shortcode, ID, type, product typeAlt text (accessibility caption)
Caption, hashtags, mentionsLatest comments with author and likes
Likes, comment countMusic: artist, song, original audio
Publish time (UTC)Video length (seconds)
Main image, all carousel images, video URL
Carousel slides (childPosts)
Owner username, ID and full name
Tagged users, collab co-authors
Location name and ID, pinned flag

Fields Instagram does not show to logged-out visitors stay null: paid-partnership flag and sponsors, affiliate flag, comments-disabled flag, and video view or play counts. They are kept in the output so existing integrations do not break.

Inputs that return no posts get one free row with error and errorDescription: unavailable (the username or post does not exist, or Instagram blocked every try), restricted (private or hidden from logged-out visitors), no_posts, invalid_input, duplicate (same profile or post as an earlier input), no_results (your filters matched nothing), not_found or failed. You always know what happened to each input.

How to use

  1. Add usernames, profile URLs or post links to Profiles or post links.
  2. Set Posts per profile (default and maximum 12; higher values are accepted and still return 12).
  3. Optional: set a date range, post types, minimum likes/comments, or a total cap.
  4. Click Start and download the results as JSON, CSV, Excel or HTML, or fetch them over the API.

Example input

{
"username": ["natgeo", "https://www.instagram.com/nasa/", "https://www.instagram.com/p/SHORTCODE/"],
"resultsLimit": 12,
"onlyPostsNewerThan": "30 days",
"postTypes": ["Video"],
"minLikes": 1000,
"maxPostsTotal": 500,
"dataDetailLevel": "basicData"
}

Example output (shortened)

{
"inputUrl": "natgeo",
"id": "3700000000000000000",
"type": "Video",
"shortCode": "SHORTCODE",
"url": "https://www.instagram.com/p/SHORTCODE/",
"caption": "Example caption #wildlife @photographer",
"hashtags": ["wildlife"],
"mentions": ["photographer"],
"likesCount": 48210,
"commentsCount": 312,
"timestamp": "2026-09-30T14:02:11.000Z",
"displayUrl": "https://scontent.cdninstagram.com/...",
"videoUrl": "https://scontent.cdninstagram.com/...mp4",
"ownerUsername": "natgeo",
"ownerFullName": "National Geographic",
"isPinned": false,
"productType": "clips"
}

Pricing

EventPrice per postPer 1,000 posts
Post$0.0012$1.20

All fields are included at both detail levels. There is no start fee. Rows for invalid, missing or restricted inputs are free. Apify's free plan credits cover thousands of posts every month.

Tips

  • Filters save money. Posts outside your date range, types or engagement thresholds are never charged.
  • Pinned posts sit at the top of Instagram's grid even when they're old, and they count towards the 12 visible posts. Instagram does not label them for logged-out visitors, so the Actor infers isPinned from grid position: a post in the top three slots that is older than a post listed after it. Results are still sorted newest-first, so a pinned post from last year appears at the bottom with isPinned: true. Old pinned posts outside your date range are skipped; "Skip pinned posts" drops them all.
  • Proxy is handled for you. Runs start on datacenter IPs; any page Instagram blocks is retried on residential automatically, so you don't need to configure anything.
  • Video and image URLs expire about 4 to 5 days after the run (Instagram signs them; the CDN then answers 403). Download the media soon after the run if you need it.
  • Post type filters save fetches. The profile grid states each post's type, so posts outside "Post types" are never fetched.
  • unavailable rows mean Instagram returned an empty page on all 6 tries, including residential IPs. Logged-out Instagram serves the same empty page for a username that does not exist and for a blocked IP, so check the spelling first; if the profile opens in a browser, run again later.
  • Hidden like counts come back as null or 0.

Limits

  • Profiles: latest 12 posts. Instagram shows logged-out visitors only the 12 newest posts of a profile, and this Actor never logs in. For older posts, pass their post links directly.
  • Collab posts appear under the profile they were shared to, but ownerUsername is the account that published them.
  • Video play and view counts are not shown to logged-out visitors, so they are usually empty.
  • Only public profiles and posts. No stories, private accounts, or follower lists.
  • Detailed data includes the comments Instagram shows on the post page (usually up to 10 to 15), not the full thread.
  • Instagram changes its web endpoints from time to time. If something breaks, open an issue and it's usually fixed within a day.

This Actor collects only data that account owners chose to make public, without logging in. Results can still contain personal data (usernames, comments) protected by GDPR, CCPA and similar laws. Only collect and use it if you have a legitimate purpose, and check with a lawyer if you're unsure. You're responsible for complying with Instagram's terms and applicable law.

Use it from AI agents (MCP)

The Actor is available through the Apify MCP server, so Claude, ChatGPT, Cursor, Windsurf, VS Code and any other MCP client can call it as a tool. Add this to your client's MCP configuration; the browser opens once for sign-in:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=superxcoder/instagram-post-scraper-lite"
}
}
}

Then ask: "Get the latest posts of @nasa and @natgeo and list the three with the most likes." With the Apify CLI, apify mcp install cursor (or claude, vscode, windsurf) writes the config for you. The Actor is agent-payable: autonomous agents can pay per post with USDC or prepaid tokens through Apify's agentic payments, with no human account set-up.

API and integrations

Run it from any language with the Apify API or the official clients. The run below waits for the results and prints them:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('superxcoder/instagram-post-scraper-lite').call({
username: ['nasa', 'natgeo'],
onlyPostsNewerThan: '7 days',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, 'posts');
import os
from apify_client import ApifyClient
client = ApifyClient(token=os.environ["APIFY_TOKEN"])
run = client.actor("superxcoder/instagram-post-scraper-lite").call(
run_input={"username": ["nasa", "natgeo"], "onlyPostsNewerThan": "7 days"}
)
items = client.dataset(run["defaultDatasetId"]).list_items().items

No-code: connect it to n8n, Make, Zapier, Google Sheets, Slack, Airtable or Notion from the Integrations tab, or schedule it in Console. A ready-made n8n workflow that scrapes a list of accounts every morning and appends new posts to Google Sheets ships with the Actor's source (templates/ folder) and is being submitted to the n8n template library: import the JSON, pick your Apify and Google credentials, done. Webhooks can notify your own system when a run finishes.

Support

Found a bug or need a field added? Open an issue on the Issues tab.