Instagram Scraper - Profiles, Reels, Hashtags and Trends avatar

Instagram Scraper - Profiles, Reels, Hashtags and Trends

Pricing

$1.40 / 1,000 results

Go to Apify Store
Instagram Scraper - Profiles, Reels, Hashtags and Trends

Instagram Scraper - Profiles, Reels, Hashtags and Trends

Scrape public Instagram profiles, posts and reels with exact likes, views and comments, plus keyword search volume, related keywords and the trending page. No login needed. For social media teams, marketers and researchers who plan content or track creators.

Pricing

$1.40 / 1,000 results

Rating

0.0

(0)

Developer

SR

SR

Maintained by Community

Actor stats

0

Bookmarked

35

Total users

12

Monthly active users

a month ago

Last modified

Share

Instagram Scraper: Profiles, Reels, Hashtags and Trends

This Instagram scraper pulls public profiles, posts and reels, keyword search volume and Instagram trends into one dataset, for social media teams, marketers and researchers who want Instagram data without logging in. It covers five jobs instead of making you run five Actors:

  • Profiles by username, with exact follower and post counts
  • Posts and reels by URL, with likes, comments and captions
  • Hashtags and keywords, with search volume and related terms
  • Trending topics, what is rising on Instagram right now
  • Locations by place ID, with coordinates and recent posts

Pick the job with the searchType field, or switch on includeTrending for the trending page. It reads only Instagram's public pages and never signs in, so there is no login, no session cookie and no account to get restricted.

Most Instagram scrapers hand you posts. This one also tells you what people are actually searching for on Instagram, how much volume a term carries, and which terms sit next to it, which is the part that usually requires guesswork.

Removed posts and misspelled usernames are reported as errors rather than returned as rows of empty numbers: Instagram answers HTTP 200 for both, and a scraper that does not check turns a deleted post into an account that looks like it has no engagement.

What this Instagram scraper returns

  • Profile lookups by username: exact follower count (268,480,747 for natgeo, not "268M"), exact post count, verified badge, profile picture, whether a public story is live, and the account's posts back through its full history with full engagement, plus its Reels tab. Biography, link-in-bio URLs and related profiles are filled when Instagram exposes them publicly.
  • Keyword search volume per term, as Instagram reports it (37M reels for laptop), returned both as displayed text and as a parsed integer.
  • Up to 30 related keywords per term, taken from Instagram's own related links rather than inferred. Each one is itself a valid term you can crawl.
  • Automatic keyword expansion up to three levels deep, so one seed can produce hundreds of real Instagram search terms.
  • Up to 12 reels per keyword, each returned complete with views, caption, owner and download links, at no extra request.
  • Reel engagement: exact like counts (not the rounded 592K the page shows), total comment count, view counts, caption, hashtags, mentions and post date.
  • Comments on each reel: author, user id, verified badge, text, like count, reply linkage and timestamp. No login involved.
  • Direct download URLs: MP4 video links in every available quality, plus full-size images, thumbnails and the creator's profile picture.
  • Reel metadata: duration, dimensions, audio flag, music title and artist, tagged users and location when published.
  • 72 trending terms with EXACT volumes from Instagram's trending page (new month = 15,273,919, not "15M"), each with rank, thumbnail and a featured reel. Plus 12 ranked trending creators and Instagram's own 12-category browse taxonomy.
  • Creator follower counts and engagement rate on every reel, so you can rank creators by performance rather than raw audience size.
  • Audio track title, artist, and whether it is original audio.
  • Profile stats for any username: followers, following, post count, display name.
  • Location data for any Instagram location ID: name, latitude, longitude and total tagged posts.

Why scrape Instagram keywords instead of hashtags

Hashtag tools tell you how many posts carry a tag. That is a supply number: how many people published something. It says nothing about how many people went looking. Instagram's own popular-search pages expose the demand side, which is why the same term can look enormous as a hashtag and thin as a search.

The related-keyword links are the more valuable half. Instagram publishes, for each term, the terms it considers adjacent, in real user phrasing rather than compressed hashtag form. laptop leads to how to screenshot on a laptop, crochet laptop sleeve for men and como dividir pantalla en laptop. Those are content briefs and ad-targeting seeds, and they are phrases no hashtag generator would produce because nobody tags a post #comodividirpantallaenlaptop.

Because every related term is a real page, the graph can be walked. Set the expansion depth and one seed becomes a map of a niche as Instagram itself organises it, with a volume figure attached to each node.

Input

Pick what kind of input you have, then paste it. Instagram URLs are always detected automatically, whatever type is selected.

Search typeWhat you give itWhat you get back
KeywordlaptopSearch volume, 30 related keywords, up to 12 reels
Profilenatgeo or @natgeoExact follower / post counts, plus the account's recent posts
URLany post, reel or profile linkThe item behind the link, fully enriched
Location212988663Name, coordinates, total tagged posts
Trendingset includeTrending to true72 trending terms with exact volumes, 12 creators, 12 categories

Trending is switched on with includeTrending, next to any search type; selecting the Trending search type on its own does not turn it on.

With the URL search type you can mix kinds in one run: @natgeo is read as a profile, a number of six digits or more as a location ID, a link as the item behind it, and anything else as a keyword. Passing

["laptop", "@natgeo", "https://www.instagram.com/reel/DVdFk_9jCan/", "212988663"]
returns all four kinds of row.

All fields

FieldTypeDefaultDescription
searchTypeselectkeywordWhich of the five input kinds you are giving.
searcharray["laptop"]Required. The terms, usernames, URLs or IDs.
modeselectbothkeywords, reels, or both.
expandRelatedinteger 0–31Levels of related-keyword expansion.
maxKeywordsinteger25Cap on keyword pages fetched.
maxReelsinteger50Cap on reel rows.
maxPostsPerProfileinteger12Posts per profile, newest first, back through the full history (up to 1000).
maxReelsPerProfileinteger0Reels from each profile's Reels tab (up to 1000).
enrichReelsbooleantrueFetch each reel's page for exact counts and comments.
includeCreatorStatsbooleantrueAdd follower count, engagement rate, audio and duration.
includeCommentsbooleantrueAttach comments to each reel row.
maxCommentsinteger30Cap on comments per reel.
expandRelatedTopicsbooleantrueAlso follow per-reel related-topic links.
includeTrendingbooleanfalseAlso return Instagram's trending page.
seedFromTrendingbooleanfalseAlso crawl Instagram's trending terms.
maxSeedTermsinteger10How many trending terms to seed from.
concurrencyinteger 1–168Parallel requests.

The older queries, profiles and locationIds fields still work for saved tasks, and now auto-detect what you put in them.

Output

Rows are mixed and discriminated by record_type. The examples below are real rows from runs of this Actor; long lists are cut to their first items and the signed media URLs (video_url, video_urls, image_url, thumbnail_url, profile pictures) are left out for length.

A keyword row for sneakers:

{
"record_type": "keyword",
"keyword": "sneakers",
"keyword_slug": "sneakers",
"display_name": "Sneakers",
"url": "https://www.instagram.com/popular/sneakers/",
"reels_volume_text": "243M",
"reels_volume": 243000000,
"related_keywords": [
"2026 sneaker trends women",
"adidas leo sneaker damen deichmann",
"alexander mcqueen glitter sneakers",
"bapesta sneakers"
],
"related_keyword_count": 30,
"top_reel_shortcodes": [
"DaYhTunSIzC",
"DagGuj1x6Uz",
"DahHqojgKnR"
],
"top_reel_count": 12,
"top_creators": [
"absolute.mx",
"archivzsneakers_",
"dk_cldoris"
],
"top_reel_total_views": 60233490,
"top_reel_median_views": 3270145,
"meta_description": "Watch short videos about sneakers from people around the world.",
"depth": 0
}

A reel row found through the keyword laptop:

{
"record_type": "reel",
"shortcode": "DZ-697PBHzx",
"url": "https://www.instagram.com/reel/DZ-697PBHzx/",
"source_keyword": "laptop",
"owner_username": "kimmyruth_",
"owner_full_name": "Kimberly Hoff",
"owner_id": "17841468010245770",
"owner_is_verified": false,
"owner_is_private": false,
"owner_followers": 83980,
"engagement_rate": 119.5142,
"caption": "Some laptop cleaning asmr for your feed 🤗💻\n\n#cleaningasmr #asmrsounds #cleanwithme #cleaningmotivation",
"hashtags": [
"cleaningasmr",
"asmrsounds",
"cleanwithme",
"cleaningmotivation"
],
"mentions": [],
"likes": 100368,
"comments_count": 341,
"views": 1334585,
"posted_at": "2026-06-24T21:08:37Z",
"posted_at_timestamp": 1782335317,
"duration_seconds": 51.337,
"width": 1080,
"height": 1920,
"has_audio": true,
"product_type": "clips",
"is_video": true,
"music_artist": "kimmyruth_",
"music_is_original_audio": true,
"accessibility_caption": null,
"carousel_media_count": null,
"is_paid_partnership": null,
"coauthors": [],
"source_profile": null,
"music_title": "Original audio",
"audio_id": null,
"location_name": "Austin, Texas",
"location_id": "103023564486265",
"location_lat": 30.205879846457,
"location_lng": -97.807801152261,
"tagged_users": [],
"related_topics": [
"macbook deep clean",
"satisfying cleaning",
"how to clean laptop screen"
],
"comments": [
{
"id": "18110203955594859",
"username": "shakeelhaider159",
"user_id": "27306307418",
"user_is_verified": false,
"text": "I like it ❤️",
"likes": 0,
"reply_count": null,
"is_reply": false,
"parent_comment_id": null,
"created_at": "2026-09-23T05:41:42Z",
"created_at_timestamp": 1790142102
}
],
"enriched": true,
"went_viral": true,
"like_to_view_rate": 7.5205,
"comments_returned": 15
}

Reel rows also include owner_profile_pic_url, the creator's profile picture URL as a string, or null when it is unavailable.

A profile row for natgeo:

{
"record_type": "profile",
"username": "natgeo",
"url": "https://www.instagram.com/natgeo/",
"full_name": "National Geographic",
"user_id": 787132,
"followers": 268480747,
"posts_count": 32035,
"following": null,
"is_verified": true,
"has_public_story": true,
"pronouns": [],
"recent_post_shortcodes": [
"Dd8u0tIFz1F",
"Dd97mt9AeqL",
"Dd9nPU7Azb6"
],
"recent_post_count": 6
}

Profile rows also carry followers_text, posts_count_text and, when Instagram exposes them, biography, bio_links and related_profiles. Location rows carry name, latitude, longitude and media_count. Trending rows carry topic, rank, an exact media_count, thumbnail_url and featured_reel_shortcode. Category rows carry category, keyword and media_count.

Use cases

Content planning for social teams. Pick the topic you publish about, expand two levels, and sort by reels_volume. You get a ranked list of what Instagram users search in that niche, phrased the way they phrase it. The related keywords double as video titles, because they are already questions and qualifiers rather than compressed tags.

Instagram trends monitoring. Run the trending topics daily with a scheduled task and diff the output. Topics enter and leave Instagram's trending page faster than they enter general search trend tools, and each one links to a keyword page with its own volume and reels, so you can go from "this is spiking" to "here is who is winning it" in one run.

Influencer and creator discovery. Every keyword page returns the creators Instagram ranks for that term, and every reel carries its creator's follower count and engagement rate. That lets you sort a niche by performance instead of audience size, which is how you find the 2,745-follower account whose reel did 597,000 likes. went_viral flags exactly those cases.

Ad copy and targeting research. The related-keyword graph is phrase-level demand data for a platform that does not publish a keyword planner. Paid social teams use it to write hooks in the audience's own words and to find adjacent interests worth testing, at a fraction of what a managed Instagram data API charges per record.

How this Instagram scraper compares

This actorapify/instagram-scraperapify/instagram-hashtag-analytics-scraper
Price per 1k results$1.40$2.70$2.30
Actor start feenonenone$0.001
Search-phrase volumeyesnono
Hashtag post countsnonoyes
Related termssearch phrasesnorelated hashtags
Multi-level expansionyes, up to 3nono
Trending topicsyesnono
Reels with engagementyesyestop/latest posts as add-ons
Comments includedyes, in the reel rowseparate runno
Video download URLsyes, included$0.02/reel add-onno
View countsyesyesno
Profile statsyesyesno
Location metadatayesyesno
Full post history per profileyes, up to 1000yesno
Comment threadsnoyesno

Being straightforward about the overlap. If you want hashtag metrics, Apify's hashtag analytics actor gives post counts, posts per day and related hashtags, and it does that well. The difference is which namespace you are measuring: hashtags are what publishers tagged, search phrases are what users typed. This actor reports the search side, in full phrases like

how to screenshot on a laptop
rather than tags, and lets you walk that graph outward several levels.

Both actors read a profile's post history; this one stops at 1000 posts per profile. Note the add-on pricing though: Apify's reel scraper charges $0.02 per reel for a video download link and runs a separate actor for comments. Here both are part of the row you already paid for. At $1.40 per 1k this runs below both, with no start fee.

Pricing

$0.0014 per result, which is $1.40 per 1,000 rows. Every row bills the same regardless of type, so cost is predictable from row count alone. All pricing is pay-per-event, you only pay for results you receive. No actor-start fee, no per-compute-unit charges.

Limits and gotchas

  • Volume counts reels, not all posts. 37M reels is a reels figure. Treat it as relative demand between terms, not as a total post count.
  • Terms are traversed, not guessed. Instagram only builds a popular-search page for terms it has indexed, so an invented phrase returns nothing. Seed with a common head term and use expandRelated to reach the long tail, or switch on seedFromTrending to start from terms Instagram itself is promoting. Even those are not universally live: a very fresh news term can be listed on the trending page before its own page exists. When a seed has no page, the run reports it in errors and continues.
  • Like counts are exact. They come from Instagram's embedded data (597018), not the rounded 597K on the page. In the rare case only the rounded figure is available, the row sets likes_are_approximate: true.
  • Comments are a sample, not the full thread. Instagram serves roughly 12 to 15 top-level comments per reel without a login. comments_count gives the true total; comments_returned tells you how many you got. Raising maxComments past what Instagram serves changes nothing.
  • Download URLs expire. Instagram signs its CDN links, so video_url and image_url are valid for hours, not indefinitely. Fetch the media promptly or re-run for fresh links.
  • Enrichment costs one request per reel. With it off you still get views, captions, owner details and download URLs, because those come inlined with the keyword page. Only exact like counts, comment totals and the comments themselves need the extra request.
  • Long-tail terms return fewer related keywords. Head terms give 30, niche terms give as few as 3. That is the graph thinning out, not an error.
  • Volume is mostly a head-term figure. Instagram publishes a reels count for popular terms but usually omits it on long-tail ones, so expanded keywords often have reels_volume: null. Their related links and reels are unaffected.
  • No login means no private data. Private accounts, stories, follower lists and comment threads are all out of reach by design.
  • Engagement rate is uncapped and can exceed 100%. It is likes divided by the creator's followers. A reel that escapes its creator's audience will read in the thousands of percent (597,018 likes against 2,745 followers is 21,749%). That is real signal, not a bug. Use like_to_view_rate when you want a measure that does not depend on audience size.
  • Exact volumes come from the trending page, not term pages. Term pages show a rounded figure (243M for sneakers); the trending page publishes the exact integer (15,273,919 for new month) for the terms it lists.
  • Profile mode goes back through the full post history, up to 1000 posts per profile. Deep runs take longer: 1000 posts are about 84 page reads.
  • Free Apify plans are capped at 10 rows per run. Paid plans are uncapped.

FAQ

Can I scrape Instagram without logging in? Yes. This actor only reads pages Instagram serves publicly, so no credentials are used or stored, and nothing you own can be rate-limited or restricted.

How do I do Instagram keyword research? Seed a term you care about, set expandRelated to 1 or 2, and sort the keyword rows by reels_volume. You get real Instagram search terms with volume attached, which is the closest equivalent to a keyword planner Instagram has.

Is this an Instagram hashtag generator? Not exactly, and it is more useful for planning. It returns search phrases rather than tags. Hashtags found in reel captions are extracted into the hashtags field, so you get real tags in use as a by-product.

How do I find Instagram trends? Set includeTrending to true, with any search type. You get Instagram's current trending topics with rankings, and each topic is a keyword you can then expand for volume and reels.

How accurate are the follower and like counts? Profile rows carry the exact follower and post counts from Instagram's own data (natgeo: 268,480,747 followers). Like counts are exact too. Keyword volumes are the rounded figure Instagram displays (243M becomes 243000000), except on the trending page, which publishes exact integers.

Can I download Instagram reels and videos with this? Yes. Every reel row carries video_url with a direct MP4 link in the highest available quality, plus video_urls for the other renditions and image_url for the still. The links are Instagram's own signed CDN URLs, so download promptly, they expire after a few hours.

Can I scrape Instagram comments without logging in? Yes. Each reel row includes a comments array with author, user id, verified badge, text, like count, reply linkage and timestamp. Instagram serves roughly 12 to 15 top-level comments per reel publicly, and comments_count tells you the true total.

Can I scrape all posts from an Instagram account? Yes, up to 1000 posts per profile, newest first, with exact likes, comments, views on videos, tagged accounts, collaborators, place and download links. Set maxPostsPerProfile to the depth you need.

Can I get an Instagram creator's follower count and engagement rate? Yes. Every reel row includes owner_followers, engagement_rate (likes over followers) and like_to_view_rate (likes over views), plus a went_viral flag when a reel outperformed its creator's audience.

Do I need an Instagram account or API key to use this Instagram scraper? No. It reads public pages only. You need an Apify account to run it, nothing from Instagram.

What is an Instagram location ID and where do I find one? It is the number in an instagram.com/explore/locations/<id>/ URL. Pass it in locationIds to get the name, coordinates and total tagged post count.