Instagram Profile Scraper – Followers, Bio, Links & Posts
Pricing
from $1.60 / 1,000 profiles
Instagram Profile Scraper – Followers, Bio, Links & Posts
Scrape public Instagram profiles from usernames, profile URLs or IDs: followers, following, posts count, bio, website links, verified and business status, profile picture, highlights and the latest posts. No login. Pay per profile.
Pricing
from $1.60 / 1,000 profiles
Rating
0.0
(0)
Developer
Badr Bouargan
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
15 days ago
Last modified
Categories
Share
Scrape public Instagram profiles from a list of usernames or profile URLs: followers, following, posts count, bio, website links, verified and private status, live story, highlights, linked Threads account, profile picture and the 12 latest posts. No Instagram account, no login, no API key. You pay per profile, only for profiles found.
What can it do?
- 👤 Profile identity: ID, username, display name, URL, profile picture
- 📝 Bio and all bio links (title and URL), plus the first link on its own
- 👥 Followers, following and posts counts
- ✅ Verified badge, private account, memorialized account, pronouns
- 🎞️ Has reels, story live right now (and when it was posted), highlights with title and cover
- 🧵 Linked Threads username and URL
- 📮 The 12 latest posts: type, shortcode, URL, caption, hashtags, mentions, image, alt text
- ⬇️ Export to JSON, CSV, Excel, XML or HTML, or read through the API
Use it to vet influencers, qualify leads from their bio links, track competitors' audience over time (schedule it daily), or enrich a CRM with Instagram data.
How to use it in 3 steps
- Add usernames or profile URLs in Instagram usernames (Bulk edit accepts a pasted list).
- Click Start.
- Download the dataset (JSON, CSV, Excel) or read it through the API.
The prefilled run (humansofny) returns one profile in about 20 seconds, for less than a cent.
Paste names the way you have them: nasa, @NASA, https://www.instagram.com/nasa/?igsh=…, mobile or instagr.am links, or a comma-separated list on one line. Duplicates are read (and billed) once. A post URL, a numeric ID or a typo is listed in FAILED_INPUTS with the reason, never billed, and the run carries on.
Input
{"usernames": ["humansofny", "nasa", "https://www.instagram.com/nike/"]}
Output example
{"inputUrl": "nasa","id": "528817151","username": "nasa","url": "https://www.instagram.com/nasa","fullName": "NASA","biography": "🚀 🌎 Exploring the universe and our home planet.","externalUrl": "https://www.nasa.gov/","externalUrls": [{ "title": "NASA+", "url": "https://plus.nasa.gov", "link_type": "external" }],"followersCount": 104267078,"followsCount": 90,"postsCount": 4954,"highlightReelCount": 12,"highlights": [{ "id": "18195781759377100", "title": "Roman", "coverUrl": "https://…" }],"hasReels": true,"hasPublicStory": true,"verified": true,"private": false,"threadsUsername": "nasa","threadsUrl": "https://www.threads.net/@nasa","profilePicUrl": "https://…","latestPosts": [{ "id": "3983118388705688735", "type": "Video", "productType": "clips", "shortCode": "DdG4RIxIPyf","url": "https://www.instagram.com/reel/DdG4RIxIPyf/", "caption": "…", "hashtags": ["nasa"] }]}
Each run also writes RUN_SUMMARY (profiles saved, failures, amount charged) and FAILED_INPUTS (each username that gave nothing, with a code: not_found, invalid_input, blocked). Failed inputs are never billed.
How much does it cost?
Pay per profile. Platform usage is included.
| Apify plan | Price per 1,000 profiles |
|---|---|
| Free | $2.60 |
| Starter | $2.30 |
| Scale | $1.90 |
| Business and above | $1.60 |
With the free $5 monthly credit you can read about 1,900 profiles. Set Maximum profiles or a maximum cost per run and the run stops cleanly there.
What it cannot do
This Actor reads profiles as a logged-out visitor sees them. Instagram keeps some details for signed-in users only, so they are not included:
- the "About this account" panel (join date, country, former usernames) — the
includeAboutSectionoption is accepted for compatibility but adds nothing and costs nothing; - business category and contact buttons, related ("suggested") profiles, IGTV counts;
- likes and comments counts of the latest posts (use the Instagram Scraper with post URLs for those);
- numeric profile IDs as input — use the username.
Private profiles return their public details (name, bio, counts) but no posts.
Use it via API
Python (pip install apify-client):
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("badr_xba/instagram-profile-scraper").call(run_input={"usernames": ["humansofny", "nasa", "https://www.instagram.com/nike/"],})for profile in client.dataset(run["defaultDatasetId"]).iterate_items():print(profile["username"], profile["followersCount"], profile["externalUrl"])
JavaScript (npm install apify-client):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('badr_xba/instagram-profile-scraper').call({usernames: ['humansofny', 'nasa'],});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
cURL (runs the Actor and returns the rows in one call):
curl -X POST "https://api.apify.com/v2/acts/badr_xba~instagram-profile-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"usernames": ["humansofny", "nasa"]}'
Integrations
- Make, Zapier and n8n: use the Apify app or node with
badr_xba/instagram-profile-scraperand push each profile to Google Sheets, Airtable, HubSpot or any CRM. - AI agents (MCP): add
https://mcp.apify.com/?actors=badr_xba/instagram-profile-scraperto Claude, Cursor or any MCP client. - Schedules and webhooks: run it daily on the same accounts to chart follower growth, and get notified when a run ends.
Troubleshooting
| What you see | What to do |
|---|---|
invalid_input in FAILED_INPUTS | The line is not a username or profile URL (often a post URL or a typo). The reason tells you which. |
id_not_supported | Numeric IDs need a signed-in session: use the username. |
not_found | The account does not exist, was renamed, or is not shown to visitors. Check it in a private browser window. |
blocked | Instagram refused every address tried. Keep the RESIDENTIAL proxy group and run again; never billed. |
latestPosts is empty | The profile is private or has no posts. |
FAQ
Do I need an Instagram account? No. Nothing is asked from you but usernames.
Why is postsCount rounded for big accounts? For logged-out visitors Instagram shows "32K posts" rather than the exact number.
Is it legal? The Actor only reads what profiles show publicly. That can include personal data protected by laws like the GDPR: collect it only for a legitimate purpose.
Something does not work? Open an issue on the Issues tab with the run ID and the username.