Instagram Scraper avatar

Instagram Scraper

Pricing

$2.50 / 1,000 results

Go to Apify Store
Instagram Scraper

Instagram Scraper

One Instagram scraper for everything — profiles, contacts (emails & phones), posts, reels, comments, likers, followers, following, tagged, stories, highlights, hashtags, locations & search. No code: paste usernames or URLs, export to Excel, CSV, JSON or API. Public data needs no login.

Pricing

$2.50 / 1,000 results

Rating

5.0

(1)

Developer

VortexData

VortexData

Maintained by Community

Actor stats

2

Bookmarked

81

Total users

28

Monthly active users

7 days ago

Last modified

Share

📸 Instagram Scraper

Extract public Instagram data — profiles, contacts, posts, reels, comments, likers, followers, following, tagged posts, stories, highlights, hashtags, locations, and keyword search — then download it as Excel, CSV, JSON, or pull it through the API. No code. No login needed for public data.

One Actor replaces a dozen single-purpose scrapers: pick what you want, paste usernames or links, and press Start. Perfect for marketers, agencies, lead generation, researchers, and founders who need Instagram data without writing a line of code.

What can this Instagram Scraper extract?

You choose one mode"What do you want to scrape?" — and the mode decides what every line you paste turns into.

ModeWhat you getPaste
👤 Profile detailsBio, followers/following/posts counts, category, links, verification, latest postsa username
📇 Contacts (lead-gen)Emails, phones and links pulled from the bio + business fieldsa username
🖼️ Profile postsA user's timeline — captions, likes, comments, media, datesa username
🎬 Profile reelsA user's videos with view/play counts and audioa username
📄 Post / Reel detailOne post or reel in full (plus tagged users and top comments)a post URL
ModeWhat you getPaste
💬 Post commentsEvery comment with author, likes, replies, timestampa post URL
❤️ Post likersUsers who liked a posta post URL
👥 Followers / FollowingA profile's follower or following lista username
🏷️ Tagged postsPosts a user is tagged ina username
📸 StoriesA user's currently-active storiesa username
HighlightsA user's highlight reelsa username
#️⃣ Hashtag postsTop and recent posts for a hashtaga #tag or word
📍 Location postsPosts from a placea location id / URL
🔎 SearchMatching users, hashtags, or placesuse the Search field

The 🔑 modes need cookies because Instagram hides those pages from logged-out visitors — see the "Do you need an Instagram login cookie?" section below.

🚀 How to scrape Instagram in 3 steps

  1. Choose a mode under "What do you want to scrape?".
  2. Paste usernames or URLs, one per line, into "Instagram URLs or usernames". Then set Results per input — how many records to get from each line.
  3. Press Start. When it finishes, open the Dataset tab and click Export → Excel, CSV, or JSON.

That's it — no setup, no proxy configuration. Want to try it right now? Just press Start with the default input and you'll get 100 recent posts from @humansofny.

Bare usernames, @handles, #hashtags and plain location ids all work — you don't have to paste full URLs. Lines that don't fit the chosen mode (for example a hashtag pasted into a Followers run) are skipped with a note, so you never get a confusing empty run.

How many results will I get?

Your total is simply Results per input × number of lines. For example, 100 results per input with 3 profiles pasted = up to 300 records. Profiles with fewer posts, or short comment/follower lists, return whatever exists.

📊 Example output

Every record is one row in your spreadsheet. A post looks like this:

{
"url": "https://www.instagram.com/p/C3TTthZLoQK/",
"type": "Image",
"shortCode": "C3TTthZLoQK",
"caption": "New York City, one story at a time.",
"hashtags": ["nyc", "humansofny"],
"likesCount": 40213,
"commentsCount": 512,
"timestamp": "2024-02-13T20:49:57.000Z",
"displayUrl": "https://scontent.cdninstagram.com/...",
"ownerUsername": "humansofny",
"ownerFullName": "Humans of New York",
"ownerIsVerified": true
}

A Contacts (lead-gen) record projects a profile down to what you need for outreach:

{
"username": "thecoffeestudio",
"fullName": "The Coffee Studio",
"emails": ["hello@coffeestudio.com"],
"phones": ["+12125559000"],
"links": ["https://coffeestudio.com", "https://coffeestudio.com/menu"],
"followersCount": 48210,
"isBusinessAccount": true,
"biography": "Specialty coffee · Order: hello@coffeestudio.com"
}

Fields you get, by mode

  • 🖼️ Posts & Reels (40+ columns): input URL, caption, hashtags, mentions, likes, comments count, first comment, latest comments preview, timestamp, image URL, all image sizes (carousels included), video URL, view and play counts, duration, alt text, owner (username, name, picture, verified), location, tagged users, coauthors (collabs), music info, product type, sponsored / paid-partnership / ad flags, pinned flag, comments-disabled flag, post URL, and more.
  • 👤 Profile details (45 columns): username, full name, biography, bio hashtags and mentions, bio links, external URL, followers / following / posts counts, verified and private flags, business and professional flags, category, business email and phone, pronouns, profile picture (regular and HD), IGTV and highlight counts, has-Reels / has-Guides, Facebook page, plus the 12 most recent posts inline, latest IGTV videos, and related profiles.
  • 📇 Contacts: username, full name, biography, emails, phones, links, business email/phone/category, followers count, business and verified flags, profile picture.
  • 💬 Comments: comment id, post id/shortcode/URL, comment URL, text, timestamp, likes, replies count, inline replies, author (username, id, verified, picture).
  • ❤️ Likers · 👥 Followers · 👥 Following: id, username, full name, private flag, verified flag, profile picture.
  • 📸 Stories · ⭐ Highlights: the same rich media fields as posts, plus story expiry time and (for highlights) the highlight id.
  • #️⃣ Hashtag details: id, name, total posts count, subtitle, description, cover image, top and recent posts.
  • 📍 Location details: id, name, slug, latitude, longitude, full address, phone, website, description, cover image, top and recent posts.

No — for profile details, contacts, posts, reels, and single post/reel detail. These use only public data, the same anyone sees in an incognito tab.

Yes — for the 🔑 modes (comments, likers, followers, following, tagged, stories, highlights, hashtag, location, search) and any private or login-limited page. Instagram simply doesn't serve those to logged-out visitors.

The Actor uses its own managed proxy automatically — there is nothing to configure. When a mode needs cookies, open Instagram login cookie and paste your own.

⚠️ Cookies are sensitive. They work like a temporary password for your Instagram session. Use only cookies from your own account, and don't share them.

Easiest — a cookie extension:

  1. Install the EditThisCookie or Cookie-Editor browser extension.
  2. Open instagram.com and log in.
  3. Click the extension and Export your cookies (as JSON).
  4. Paste the whole thing into Instagram login cookie.

Manual — the Cookie header:

  1. Open instagram.com logged in, press F12, and go to the Network tab.
  2. Refresh the page (Ctrl+R) and click the top www.instagram.com document request.
  3. Open Headers → Request Headers, find Cookie, and copy the whole value (not the word Cookie:).
  4. Paste it in. The simplest format looks like: sessionid=...; csrftoken=...; ds_user_id=...; mid=...

The Actor accepts Cookie-header text, cookie-extension JSON, and Netscape cookie files. It hides cookie values in logs and only records which cookie names it installed. For best results include sessionid, csrftoken, ds_user_id, and mid.

Right below the cookie field there is Country you use Instagram from. Instagram watches where a session is used: a cookie created in one country but used from another looks stolen, so Instagram challenges it — and a challenged session looks exactly like an expired one, which sends people off to re-export a cookie that was never the problem.

Pick the country you normally open Instagram from and the Actor browses from there. Leave it on Automatic when you aren't using a cookie — without a login, spreading across the whole IP pool is the better default.

💡 Example use cases

📈 Track 3 competitors' posts from the last week

{
"resultsType": "posts",
"directUrls": ["nike", "adidas", "puma"],
"resultsLimit": 100,
"onlyPostsNewerThan": "7 days"
}

Every post each brand made in the last 7 days — likes, comments, captions, hashtags and image URLs side by side.

📇 Build a lead list of creator emails and phones

{
"resultsType": "contacts",
"directUrls": ["thecoffeestudio", "berlinbakes", "studio.mila"],
"resultsLimit": 1
}

One lean row per profile with emails, phones and links pulled from the bio and business fields — ready for outreach. No cookie needed.

{
"resultsType": "comments",
"directUrls": ["https://www.instagram.com/reel/CXXXXXXX/"],
"resultsLimit": 500,
"sessionCookies": "sessionid=...; csrftoken=...; ds_user_id=...; mid=..."
}

Perfect for sentiment analysis, customer feedback, or spotting influencer mentions.

{
"resultsType": "hashtag",
"directUrls": ["summertravel"],
"resultsLimit": 200,
"sessionCookies": "sessionid=...; csrftoken=...; ds_user_id=...; mid=..."
}

Content research, influencer discovery, or catching trends early.

{
"resultsType": "search",
"search": "sustainable fashion",
"searchType": "hashtag",
"searchLimit": 5,
"resultsLimit": 50,
"sessionCookies": "sessionid=...; csrftoken=...; ds_user_id=...; mid=..."
}

Finds 5 matching hashtags, then scrapes 50 posts from each — 250 posts of fresh content for your niche.

💰 How much does it cost?

You pay per result — the price for each record is shown at the top of this page. Lightweight results (a comment, a follower row) cost less than a full post, so you only pay for what you actually pull. Your first results are typically just a few cents.

Want a predictable spend? Every result is billed as it's saved, so a small Results per input keeps any run in check. Runs also honour your Apify account-level usage limits.

⚡ How fast is it?

JobTypical time
Profile with 50 recent posts5–10 seconds
Profile with 1,000 posts (with date filter)30–60 seconds
One recent post detail3–5 seconds
Hashtag with 100 posts8–15 seconds
500 comments on one post15–30 seconds

Multiple inputs are scraped in parallel, so adding more usernames barely slows things down.

❓ FAQ

Is it legal to scrape Instagram? The Actor collects only public Instagram data — the same data any visitor can see. You're responsible for using the output in line with your local laws (especially GDPR when records contain personal data). For a deeper look, read Apify's guide to the legality of web scraping.

Do I need my own Instagram account? Only for the 🔑 modes. Public modes (profile details, contacts, posts, reels, post detail) need no login at all.

Can I scrape a private account? No. Only public profile metadata is available for private accounts — their posts can't be scraped.

Why are some fields empty? For very old posts Instagram doesn't expose every field publicly. The Actor uses a multi-tier fallback to fill in as much as possible — captions, likes, comments, dates and authors come through virtually always.

Can I run this on a schedule? Yes. Open the Schedules tab in the Apify Console and add a cron expression — great for daily competitor tracking or weekly trend reports.

Can I get the data through an API? Yes. Apify offers a REST API and SDKs for Python, JavaScript and more. See the API tab on this Actor's page for ready-to-paste snippets, or integrate with Make, Zapier, Google Sheets, and others.

A run saved 0 records — what now? Open the run's Storage → Key-value store and copy SUPPORT_DIAGNOSTICS, then post it with the run log in the Issues tab. It captures the mode, input type, and proxy/cookie flags — but never your raw cookies. The most common cause is a 🔑 mode without a login cookie.

🤝 Support and feedback

Something not working as expected, or an idea for a new feature? Open an issue on the Actor's Issues tab — we read every report.

Built for marketers, researchers, and curious people. Happy scraping! 📸