Instagram Scraper
Pricing
$2.50 / 1,000 results
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
Maintained by CommunityActor stats
2
Bookmarked
81
Total users
28
Monthly active users
7 days ago
Last modified
Categories
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.
✅ Works without login (no cookie)
| Mode | What you get | Paste |
|---|---|---|
| 👤 Profile details | Bio, followers/following/posts counts, category, links, verification, latest posts | a username |
| 📇 Contacts (lead-gen) | Emails, phones and links pulled from the bio + business fields | a username |
| 🖼️ Profile posts | A user's timeline — captions, likes, comments, media, dates | a username |
| 🎬 Profile reels | A user's videos with view/play counts and audio | a username |
| 📄 Post / Reel detail | One post or reel in full (plus tagged users and top comments) | a post URL |
🔑 Needs your Instagram login cookie
| Mode | What you get | Paste |
|---|---|---|
| 💬 Post comments | Every comment with author, likes, replies, timestamp | a post URL |
| ❤️ Post likers | Users who liked a post | a post URL |
| 👥 Followers / Following | A profile's follower or following list | a username |
| 🏷️ Tagged posts | Posts a user is tagged in | a username |
| 📸 Stories | A user's currently-active stories | a username |
| ⭐ Highlights | A user's highlight reels | a username |
| #️⃣ Hashtag posts | Top and recent posts for a hashtag | a #tag or word |
| 📍 Location posts | Posts from a place | a location id / URL |
| 🔎 Search | Matching users, hashtags, or places | use 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
- Choose a mode under "What do you want to scrape?".
- 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.
- 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.
🔑 Do you need an Instagram login cookie?
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.
How to copy your Instagram cookie
Easiest — a cookie extension:
- Install the EditThisCookie or Cookie-Editor browser extension.
- Open instagram.com and log in.
- Click the extension and Export your cookies (as JSON).
- Paste the whole thing into Instagram login cookie.
Manual — the Cookie header:
- Open instagram.com logged in, press F12, and go to the Network tab.
- Refresh the page (Ctrl+R) and click the top
www.instagram.comdocument request. - Open Headers → Request Headers, find Cookie, and copy the whole value (not the word
Cookie:). - 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.
Set your country when you use a cookie
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.
💬 Read every comment on a viral reel (needs cookie)
{"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.
🔥 Find trending posts under a hashtag (needs cookie)
{"resultsType": "hashtag","directUrls": ["summertravel"],"resultsLimit": 200,"sessionCookies": "sessionid=...; csrftoken=...; ds_user_id=...; mid=..."}
Content research, influencer discovery, or catching trends early.
🔎 Discover top hashtags around a topic (needs cookie)
{"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?
| Job | Typical time |
|---|---|
| Profile with 50 recent posts | 5–10 seconds |
| Profile with 1,000 posts (with date filter) | 30–60 seconds |
| One recent post detail | 3–5 seconds |
| Hashtag with 100 posts | 8–15 seconds |
| 500 comments on one post | 15–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! 📸