Instagram Scraper β€” Posts, Reels, Hashtags, Locations & Audio avatar

Instagram Scraper β€” Posts, Reels, Hashtags, Locations & Audio

Pricing

from $1.90 / 1,000 results

Go to Apify Store
Instagram Scraper β€” Posts, Reels, Hashtags, Locations & Audio

Instagram Scraper β€” Posts, Reels, Hashtags, Locations & Audio

Scrape Instagram posts and reels from profiles, reels tabs, hashtags, keywords, locations, audio pages and post URLs. Likes, comments, plays, captions, media URLs, owner, co-authors, tagged users, location and music β€” no login, no cookies.

Pricing

from $1.90 / 1,000 results

Rating

0.0

(0)

Developer

Yugenox Corp

Yugenox Corp

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Instagram Scraper β€” Posts, Reels, Comments, Profiles, Hashtags & Locations

Scrape public Instagram posts, reels, comments, profiles, hashtags, locations and audio. You get likes, comments, plays, captions, media URLs, owners with follower counts, co-authors, tagged users, sponsors, music and locations. Add-ons include the latest comments, video transcripts, Instagram's AI summaries, business details, contact info and related accounts.

  • πŸ”‘ No Instagram login, no cookies. Paste URLs and run.
  • ⚑ Fast. About 1,000 fully detailed posts per minute.
  • πŸ’° One simple price. $1.90 per 1,000 results with add-ons included; transcripts are billed per minute. No monthly fees.
  • πŸ›‘οΈ Built to keep running. It rotates IPs by itself and adapts when Instagram changes its web app.
  • 🧭 Discovery built in. Find similar accounts, expand hashtags into related keywords, and filter by followers, verified or business accounts.

What you can scrape

InputExampleWhat you get
πŸ‘€ Profilehttps://www.instagram.com/nasa/ or nasaThe profile's posts, newest first, as deep as the profile goes
🎬 Reels tabhttps://www.instagram.com/nasa/reels/The profile's reels, with play counts
#️⃣ Hashtaghttps://www.instagram.com/explore/tags/travel/ or #travelTop posts for the hashtag
πŸ” Keywordkeywords: ["toronto"] or /explore/search/keyword/?q=torontoTop posts for the keyword
πŸ“ Locationhttps://www.instagram.com/explore/locations/213131048/Top and most recent posts at the place
🎡 Audiohttps://www.instagram.com/reels/audio/271328201351336/Reels using that sound
πŸ–ΌοΈ Post or reelhttps://www.instagram.com/p/DRvit9Ejgel/ or a /share/ linkThat post, or its comments
πŸ”’ User ID528817151That profile's posts

Three result types (resultsType)

  • posts (default): posts and reels, one row each.
  • details: one row per source:
    • Profiles: bio, all bio links, followers and following, reels count, highlights, category (e.g. "Bakery"), account type (personal, business or creator), Threads username, HD profile picture, emails and phones found in the bio, and optionally up to 50 related accounts.
    • Hashtags and keywords: Instagram's topic description with sources, plus up to 100 related keywords.
    • Locations: category, coordinates, address, price range, opening status, the place's Instagram account and its post count.
  • comments: the comments on each post (text, author, likes, date), from post URLs or from every post a profile, hashtag or location returns.

Add-ons for posts

OptionAdds
commentsPerPostlatestComments: the newest N comments on each post
includeTranscripttranscript and transcriptLanguage: speech-to-text for every video, in any language (up to 15 minutes; $0.004 per minute)
includeAiSummaryaiTitle and aiSummary: Instagram's own AI description of the post
includeVideoViewsvideo.viewCount: Instagram's "views" metric, alongside video.playCount
includeDetailsThe profile, keyword and place rows described above, alongside the posts

Discovery and filters

  • scrapeRelatedProfiles: also scrape up to N accounts similar to each profile you give. Useful for finding competitors or lookalike creators.
  • expandRelatedKeywords: go past Instagram's ~60 top posts per hashtag by also pulling related keywords.
  • minFollowers, maxFollowers, verifiedOnly, businessOnly, withContactOnly and skipPinnedPosts: rows that don't match are skipped and not billed.

Input

FieldTypeDescription
startUrlsarrayInstagram URLs, handles or #hashtags (see table above)
keywordsarrayKeywords to search. Each keyword is a separate query
maxItemsintegerMaximum number of posts across the whole run
resultsTypestringposts (default), details or comments
maxItemsPerQueryintegerMaximum number of items per URL or keyword
untilstringOnly posts created on or after this date (YYYY-MM-DD) or within a period like 7 days or 3 months. Profile scraping stops as soon as it reaches older posts, so you don't pay for them
includeDetailsbooleanAdds profile, keyword and place rows alongside the posts
commentsPerPost / maxCommentsintegerLatest comments attached to each post / comments per post in comments mode
includeTranscript, includeAiSummary, includeVideoViewsbooleanPost add-ons (see above)
includeRelatedProfiles, scrapeRelatedProfiles, expandRelatedKeywordsDiscovery (see above)
minFollowers, maxFollowers, verifiedOnly, businessOnly, withContactOnly, skipPinnedPostsFilters
customMapFunctionstringJavaScript function that transforms each item (see below)
maxConcurrencyintegerNumber of parallel requests (default 20)
{
"startUrls": ["https://www.instagram.com/nasa/", "https://www.instagram.com/explore/tags/travel/"],
"keywords": ["toronto"],
"until": "2026-09-01",
"maxItems": 200
}

Output

One row per post (dataType: "post"):

{
"dataType": "post",
"id": "3991849403537918302_13460080",
"pk": "3991849403537918302",
"code": "Ddl5eH-u4le",
"url": "https://www.instagram.com/reel/Ddl5eH-u4le/",
"createdAt": "2026-09-22T14:00:04.000Z",
"caption": "Just a normal day for @caitlinclark22 …",
"hashtags": [],
"mentions": ["caitlinclark22"],
"likeCount": 25582,
"commentCount": 487,
"mediaType": "video",
"productType": "clips",
"isVideo": true,
"isCarousel": false,
"isPinned": false,
"isPaidPartnership": false,
"isLikeAndViewCountsDisabled": false,
"commentsDisabled": false,
"owner": {
"id": "13460080", "username": "nike", "fullName": "Nike", "isVerified": true, "isPrivate": false,
"profilePicUrl": "https://…", "followerCount": 291000000, "followingCount": 266,
"biography": "…", "externalUrl": "https://…"
},
"coowners": [{ "id": "306787899", "username": "nikebasketball", "fullName": "Nike Basketball", "isVerified": true }],
"taggedUsers": [{ "id": "1466972266", "username": "caitlinclark22", "fullName": "Caitlin Clark", "isVerified": true }],
"location": { "id": "213131048", "name": "Berlin, Germany", "slug": "berlin-germany", "address": null, "city": null, "lat": 52.518, "lng": 13.401 },
"audio": { "id": "…", "title": "Original audio", "artist": "nike", "isOriginal": true },
"image": { "url": "https://…", "width": 1080, "height": 1920 },
"video": { "url": "https://….mp4", "duration": 30.03, "playCount": 915165, "width": 1080, "height": 1920 },
"carousel": [],
"carouselCount": null,
"accessibilityCaption": "Video by Nike on September 22, 2026.",
"sponsors": [],
"engagementRate": 0.0113,
"latestComments": [{ "id": "18195039400344668", "text": "Nike & Caitlin have revealed…", "createdAt": "2026-09-22T14:21:03.000Z", "likeCount": 12, "owner": { "username": "…" } }],
"transcript": "Caitlyn Clark is just a normal girl from Iowa…",
"transcriptLanguage": "en",
"aiTitle": "Normal Life of Iowa's Caitlin Clark",
"aiSummary": "…",
"source": { "type": "user", "input": "https://www.instagram.com/nike/" }
}

Carousel posts list every slide in carousel (type, url, videoUrl, width, height).

Fields that are always present are id, code, url, createdAt and owner.username. Fields that can be null include:

  • likeCount, when the creator hid counts
  • video.playCount, on some feed videos where Instagram doesn't expose plays
  • location, audio and video, when they don't apply to the post
  • isPinned and isPaidPartnership, when Instagram doesn't report them for that post

Pricing

One flat price: $1.90 per 1,000 results ($0.0019 each). A result is any saved row: a post, a comment, or a profile, place or keyword row.

  • Add-ons are included at no extra cost: latest comments on each post, AI summaries and video view counts.
  • Video transcripts (optional) cost $0.004 per started minute of audio, so a typical 30-second reel adds $0.004. Reels set to a licensed song have no speech to transcribe; they're skipped and not charged.
  • You only pay for rows you get. Queries that find nothing, login-only sources and rows removed by your filters cost nothing.

Examples:

  • 1,000 posts from any mix of profiles, hashtags and locations: $1.90
  • 100 profiles in details mode, with bio, category, contacts and related accounts: $0.19
  • 500 comments: $0.95

Free Apify plans are limited to 10 results per run.

Good to know

  • Hashtags and keywords. Instagram shows logged-out visitors top posts only for popular terms (e.g. travel, nyc, toronto), typically up to about 60 posts. For terms Instagram keeps behind a login, the run logs that the term isn't public and charges nothing.
  • Locations return Instagram's top and most recent posts for the place, typically about 70.
  • Profiles page through the whole public feed, newest first.
  • Private accounts have no public posts. They are skipped with a note in the log.
  • Comments come newest first. Replies to comments are only visible to logged-in accounts.
  • Stories, tagged posts, follower lists and profile search are only visible to logged-in accounts, so they aren't available. The getStories and handles inputs are accepted for compatibility and skipped at no charge.

Custom map function

Transform each item before it is saved, e.g. to compute engagement or slim the output:

(item) => ({
...item,
engagementRate: item.owner?.followerCount ? +(((item.likeCount || 0) + (item.commentCount || 0)) / item.owner.followerCount * 100).toFixed(3) : null,
username: item.owner?.username,
video: undefined,
carousel: undefined,
})
  • It must be a single, non-async JavaScript function that returns an object.
  • It is for transformation, not filtering. Returning {} saves { "noResults": true }.
  • Date operations are rejected (new Date, Date.now). Use until to filter by date instead.
  • If the function is unusable, the run keeps going and saves your original items. The log shows a warning starting with Your "customMapFunction" input was rejected: that says why.

FAQ

Do I need an Instagram account or cookies? No.

How fresh is the data? It's live. Every run reads Instagram at that moment.

Can I schedule it? Yes. Use Apify schedules together with until to collect only new posts each day.

Can I use it from code or an AI agent? Yes, through the Apify API, the Python and Node.js clients, webhooks, or MCP.

Is it legal to scrape Instagram? This Actor only collects publicly available data: posts, reels and profiles from public Instagram accounts, which anyone can see without logging in. Collecting publicly available data is generally legal, but you're responsible for how you use it. Results can include usernames, profile details, captions and comments from public accounts, and that counts as personal data. You must follow privacy laws such as GDPR, PIPEDA and CCPA, as well as Instagram's terms. If you're unsure, check with a lawyer. More on this: Is web scraping legal?

Does it access any private data? No. Everything comes from pages Instagram shows to any visitor without logging in. It never uses a login, never touches private or restricted accounts, and never reaches password-protected areas. Private accounts are never accessed.