Instagram Profile Scraper – Followers, Bio, Posts, Verified
Pricing
from $1.70 / 1,000 profile scraped successfullies
Instagram Profile Scraper – Followers, Bio, Posts, Verified
Pay-per-result Instagram profile scraper — extracts name, bio, followers, verified/business status, bio links, emails & phones via public page or Google SERP. No login, residential proxies. $2 per 1,000 successful profiles ($0.002/result).
Pricing
from $1.70 / 1,000 profile scraped successfullies
Rating
0.0
(0)
Developer
Scrape Pilot
Maintained by CommunityActor stats
0
Bookmarked
411
Total users
64
Monthly active users
7 days ago
Last modified
Share
📸 Instagram Profile & Leads Scraper – Followers, Bio, Emails, Business Info
Extract detailed public Instagram profile data — name, bio, followers, verified badge, business account info, bio links, emails, phone numbers, and recent posts — directly from Instagram's public profile pages. Includes an optional Google SERP discovery mode to find Instagram profiles by keyword. No login required. Residential proxy ready. Pay per successful result — just $2 per 1,000 successful profiles.
💡 What is the Instagram Profile & Leads Scraper?
This actor extracts public profile information from Instagram by fetching and parsing the public profile page (https://www.instagram.com/{username}/) using a Chrome-impersonating HTTP client (curl_cffi). It uses a multi-strategy parser so it keeps working even when Instagram changes its page structure:
- SSR JSON extraction — pulls the
xig_user_by_usernameobject embedded in the page's server-rendered scripts (most complete data: ID, verified status, bio_links, follower/following counts). - HTML meta-tag fallback — falls back to Open Graph / meta description tags (title, follower/following/post counts, bio) when the SSR JSON block isn't found.
- Google SERP snippet fallback — if the profile page itself can't be fetched or parsed, the actor can fall back to a Google search snippet for that username to recover partial data.
On top of core profile stats, the actor also mines the bio and page content for emails, phone numbers, external websites, and bio links, making it useful for lead generation, not just analytics.
No Instagram login, no password, no cookies required. You are charged only for successful profile retrievals — failed, private, or not-found accounts incur no cost.
🚀 Key Features
| Feature | Description |
|---|---|
| Direct profile scraping | Fetches and parses Instagram's public profile page for any username or profile URL. |
| Google SERP discovery mode | Give a keyword instead of usernames — the actor searches site:instagram.com on Google and scrapes every profile it finds. |
| Multi-strategy parsing | Falls back automatically from SSR JSON → HTML meta tags → Google SERP snippet, maximizing successful extractions. |
| Lead-gen data extraction | Pulls emails, phone numbers, business contact info, external websites, and bio links from the profile. |
| No login required | Works without any Instagram account. |
| Private/blocked accounts | Returned as failed with no charge. |
| Residential proxy ready | Uses Apify's RESIDENTIAL proxy group to avoid IP blocks; falls back to GOOGLE_SERP proxy group for search mode. |
| Pay per success | Charged only when a profile is successfully scraped with substantive data. Failed attempts are free. |
| Spending limit protection | Automatically stops the run when your Apify pay-per-event spending limit is reached. |
| Recent posts | Returns shortcodes/URLs for up to 6 recent posts found on the profile page. |
| Clean, structured JSON | Ready for CRM, spreadsheets, or dashboards. |
📥 Input Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
mode | string | No | "direct_urls" | "direct_urls" to scrape specific usernames/URLs, or "google_serp" to discover profiles by keyword. |
profileUrls | array or string | Yes (if mode = direct_urls) | – | Instagram usernames or profile URLs. Accepts a JSON array or a newline/comma-separated string. @ handles and full URLs are both accepted. |
keyword | string | Yes (if mode = google_serp) | – | Search keyword used to discover Instagram profiles via Google (auto-prefixed with site:instagram.com if not already an Instagram URL/query). |
maxResults | integer | No | 10 | Maximum number of profiles to scrape (direct mode) or discover (SERP mode). |
requestTimeoutSecs | integer | No | 15 | Timeout (seconds) for each profile page request. |
retriesPerStrategy | integer | No | 2 | Number of retry attempts per profile before falling back to the SERP snippet strategy. |
delaySeconds | number | No | 0.5 | Delay between processing each profile, to reduce rate-limiting risk. |
Example Input (Direct usernames)
{"mode": "direct_urls","profileUrls": "cristiano\nleomessi\ninstagram","maxResults": 10}
Example Input (Google SERP discovery)
{"mode": "google_serp","keyword": "fitness coach dubai","maxResults": 20}
📤 Output Fields
Each successful profile is pushed to the dataset as an object with the following fields:
| Field | Type | Description |
|---|---|---|
source | string | Always "instagram". |
status | string | "success" (full profile page parsed) or "partial" (recovered via Google SERP snippet fallback). |
username | string | Instagram username. |
fullName | string | Display name (falls back to username if unavailable). |
instagramId | string or null | Instagram's internal numeric user ID, when available. |
profileUrl | string | Canonical profile URL. |
isVerified | boolean | Verified badge. |
isPrivate | boolean | Private account flag. |
isBusinessAccount | boolean | Business/professional account flag. |
category | string or null | Business category name, if set. |
followersCount | integer or null | Follower count. |
followsCount | integer or null | Following count. |
postsCount | integer or null | Number of posts (media count). |
biography | string or null | Cleaned bio text (boilerplate/username-only bios are filtered out to null). |
emails | array of strings | Emails found in the bio or page content (deduplicated, obvious platform/CDN domains excluded). |
phones | array of strings | Phone numbers found in the bio or business contact fields (international format). |
websites | array of strings | External links found in bio links, external_url, or the bio text itself. |
bioLinks | array of objects | { "title": ..., "url": ... } — Instagram's structured bio-link entries. |
businessEmail | string or null | Business contact email, if the account exposes one. |
businessPhoneNumber | string or null | Business contact phone number, if the account exposes one. |
avatarUrl | string or null | Profile picture URL. |
avatarUrlHd | string or null | High-resolution profile picture URL, when available. |
latestPosts | array of objects | Up to 6 recent posts as { "shortcode": ..., "url": ... }. |
scrapedAt | string | ISO 8601 UTC timestamp. |
Profiles that fail to scrape (not found, blocked, or no usable data recovered even after fallbacks) are not charged and are logged as warnings rather than pushed to the dataset.
Example Output
[{"source": "instagram","status": "success","username": "cristiano","fullName": "Cristiano Ronaldo","instagramId": "173560420","profileUrl": "https://www.instagram.com/cristiano/","isVerified": true,"isPrivate": false,"isBusinessAccount": false,"category": null,"followersCount": 679716462,"followsCount": 634,"postsCount": 4130,"biography": null,"emails": [],"phones": [],"websites": ["https://hrbl.me/CR7Pro2col","http://perplexity.ai/ronaldo","http://join.whoop.com/cr7","https://youtube.com/@cristiano"],"bioLinks": [{ "title": "Herbalife Pro2Col", "url": "https://hrbl.me/CR7Pro2col" },{ "title": "Perplexity", "url": "http://perplexity.ai/ronaldo" },{ "title": "WHOOP", "url": "http://join.whoop.com/cr7" },{ "title": "UR Cristiano", "url": "https://youtube.com/@cristiano" }],"businessEmail": null,"businessPhoneNumber": null,"avatarUrl": "https://scontent.cdninstagram.com/v/t51.2885-19/....jpg","avatarUrlHd": "https://scontent.cdninstagram.com/v/t51.2885-19/....jpg","latestPosts": [{ "shortcode": "DdOSHfkg0ZR", "url": "https://www.instagram.com/p/DdOSHfkg0ZR/" },{ "shortcode": "DdJirxwRLFR", "url": "https://www.instagram.com/p/DdJirxwRLFR/" }],"scrapedAt": "2026-09-13T16:19:55.971032+00:00"}]
💰 Pricing
| Metric | Price |
|---|---|
| Per successful profile | $0.002 |
| Per 1,000 successful profiles | $2.00 |
- Pay-per-event: you are charged one
profileevent ($0.002) per successfully scraped profile (a profile with substantive data — name, followers, ID, bio, or avatar). - Failed, private, not-found, or empty-result profiles are free — no charge.
- Example: 1,000 successful profiles = $2.00. 10,000 successful profiles = $20.00.
- Spending limit protection: the run automatically and gracefully stops as soon as your configured Apify spending limit for the
profileevent is reached — no further profiles are processed or charged.
🛠 How to Use on Apify
- Create a task with this actor.
- Choose a mode:
direct_urls— paste usernames or profile URLs (one per line) intoprofileUrls.google_serp— enter a searchkeywordto discover matching Instagram profiles automatically.
- Proxies are configured automatically — the actor requests Apify's
RESIDENTIALproxy group for profile fetching, and theGOOGLE_SERPproxy group (falling back to residential) for keyword discovery. - Run — the actor scrapes each profile using its multi-strategy parser and pushes successful results to the Dataset.
- Export — download as JSON, CSV, or Excel from the Dataset tab.
Running via API
curl -X POST "https://api.apify.com/v2/acts/your-username~instagram-profile-scraper/runs" \-H "Content-Type: application/json" \-H "Authorization: Bearer YOUR_API_TOKEN" \-d '{"mode": "direct_urls","profileUrls": ["cristiano", "leomessi"],"maxResults": 10}'
🎯 Use Cases
| Industry / Use Case | How It Helps |
|---|---|
| Influencer Marketing | Evaluate potential partners by follower count, verification, and category. |
| Lead Generation | Discover creators/businesses by keyword via Google SERP mode and extract their emails, phone numbers, and websites straight from their bios. |
| Competitor Analysis | Track competitors' follower growth, posting activity, and bio links. |
| Social Listening | Monitor brand ambassadors and industry accounts. |
| Academic Research | Study public social media presence and network patterns. |
| Investment Due Diligence | Assess the reach and authenticity signals of a brand's social presence. |
❓ Frequently Asked Questions
1. Do I need an Instagram account? No. The actor fetches Instagram's public profile pages directly. No login required.
2. Can I scrape private profiles? No. Private accounts are detected and marked, and typically yield little to no data — they are not charged.
3. Why do I need residential proxies? Instagram blocks most datacenter IPs after moderate usage. The actor requests Apify's residential proxy group by default to reduce blocking.
4. What does Google SERP mode do? Instead of giving specific usernames, you give a keyword. The actor searches Google for Instagram profiles matching that keyword, then scrapes each discovered profile the same way as direct mode.
5. Am I charged for failed attempts?
No. You're only charged one profile event per profile that returns substantive data (name, followers, ID, bio, or avatar).
6. Where do the emails/phone numbers come from? They're extracted from the profile's bio text and any exposed business contact fields — the actor does not access private messaging or contact data.
7. What happens when my spending limit is reached? The actor detects the pay-per-event spending limit and stops processing further profiles, preventing overspending.
8. Does the actor return follower/following lists? No, only counts, not the individual accounts. A separate actor would be needed for that.
9. How does it avoid basic blocking?
It uses curl_cffi with Chrome impersonation and realistic headers, combined with Apify's residential proxy network.
10. What if Instagram changes its page structure? The parser has multiple fallback strategies (SSR JSON → HTML meta tags → Google SERP snippet), so it degrades gracefully rather than failing outright.
📝 Technical Notes
- Target:
https://www.instagram.com/{username}/(public profile page). - HTTP client:
curl_cffiimpersonating Chrome (chrome120) to mimic a real browser's TLS fingerprint. - Parsing strategies: (1)
xig_user_by_usernameSSR JSON block, (2) Open Graph / meta description tags, (3) Google SERP snippet fallback. - Discovery: Google SERP mode paginates search results (up to 5 pages) using Apify's
GOOGLE_SERPproxy group, with a residential-proxy or direct-request fallback. - Data enrichment: emails and phone numbers are parsed from bio text and business contact fields using
phonenumbersand regex-based email extraction, filtering out known platform/CDN domains. - Charging: uses Apify's pay-per-event
Actor.charge(event_name="profile"), with spending-limit detection (event_charge_limit_reached) to stop the run gracefully. - Output: pushed to the Apify Dataset per successful profile as camelCase JSON records.
🔍 SEO Keywords
Instagram Profile Scraper, Instagram lead generation, Instagram email scraper, Instagram follower count, Instagram bio extractor, Instagram Google search scraper, Instagram public profile scraper, bulk Instagram lookup, social media intelligence, influencer analytics, Apify Instagram actor, pay per success scraper
🔗 Related Actors
- Instagram Reels & Video Downloader – Download videos and metadata.
Start scraping Instagram profiles today — only $2 per 1,000 successful profiles, with built-in lead-gen data extraction.