Instagram Followers And Following Scrapper With Profile Emails
Pricing
Pay per usage
Instagram Followers And Following Scrapper With Profile Emails
π² Instagram Followers & Following Scrapper extracts public follower/following lists, usernames, bios, and counts in seconds. π Export CSV/JSON for growth, influencer outreach, and competitive analysis. β‘οΈ Fast, reliable, GDPR-aware. π Perfect for marketers & researchers.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
API Empire
Maintained by CommunityActor stats
0
Bookmarked
6
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
Instagram Scraper β Extract Followers, Following, Emails
Instagram Followers And Following Scrapper With Profile Emails pulls the followers or following list of any public Instagram profile and turns each entry into a lead row. It returns three real data types β follower profiles, following profiles, and enriched profile emails/phones/bio data β as typed, normalized JSON, with no HTML or selectors to parse. Turn on audience filters and you get a qualified lead list, not a raw dump, ready to export or route into a CRM or agent workflow.
What is Instagram Followers And Following Scrapper With Profile Emails?
Instagram Followers And Following Scrapper With Profile Emails is an Apify Actor that scrapes the followers or following list of one or more public Instagram profiles, then optionally enriches each collected profile with biography, contact, and business data pulled from Instagram's own web_profile_info endpoint. No Instagram account is required to run it, though pasting your own sessionid cookie improves reliability.
- Scrape followers of one or more public Instagram profiles
- Scrape the accounts those profiles follow
- Enrich collected profiles with bio, external links, follower/following/media counts, business category, and public email/phone
- Filter the audience down to verified, business, has-email, has-phone, follower-range, or bio-keyword matches
- Export results as JSON, CSV, or Excel, or pull them by API β no proxy management required
What data does Instagram Followers And Following Scrapper With Profile Emails collect?
Every collected row can carry up to four kinds of data, depending on scrapeMode and whether enrichProfiles is on.
| Data Type | Key Fields | JSON Field Names |
|---|---|---|
| Follower profiles | identity, verification, privacy status | username, full_name, is_verified, is_private, followed_by |
| Following profiles | same identity fields, sourced from the following endpoint | username, profileUrl, pk, followed_by |
| Enriched contact & business data | biography, external links, business category, public email/phone | biography, externalUrl, bioLinks, isBusinessAccount, businessCategoryName, publicEmail, publicPhoneNumber |
| Audience size metrics | follower/following/media/highlight-reel counts | followerCount, followingCount, mediaCount, highlightReelCount |
Need more Instagram data?
If you only need follower counts and bio/contact fields for verified or blue-checkmark accounts rather than full follower lists, Instagram Followers: Blue Checkmark Accounts & Bio Contacts is built for that narrower, faster lookup. If you want to expand a single profile into a list of similar or lookalike accounts instead of its actual followers, Instagram Related Person Scraper With Similar Audience Builder covers that audience-building angle.
How does this differ from the official Instagram API?
Meta's Graph API for Instagram requires a connected Instagram business or creator account, a registered Meta app, and app review for most permissions β and even then it only returns data for accounts you (or your app) manage. It has no endpoint for listing another account's followers or following, and it does not expose a follower's public email or phone number. Instagram Followers And Following Scrapper With Profile Emails takes any public username or profile URL and returns that data directly, without app review or a Meta developer account.
| Feature | Instagram Graph API | This Actor |
|---|---|---|
| Access model | Requires a Meta app, business/creator account link, and access token | No Instagram account or token needed to start a run |
| Approval process | App review required for most permission scopes | No approval process β provide input and start the run |
| Arbitrary profile lookup | Limited to accounts you or your app manage | Works on any public profile URL or username |
| Follower/following list access | No endpoint to list another account's followers/following | Scrapes followers or following for any public profile |
| Contact enrichment | Not provided by the API | Surfaces public email/phone via profile enrichment, where Instagram exposes them |
| Setup time | Developer account, app review, token/permission management | Provide startUrls and scrapeMode, then run |
The Graph API is the right choice when you own the account and need first-party, authenticated access to your own audience insights. This Actor fits better when you need followers, following, or lead-ready contact data from any public profile β yours or someone else's β without going through app review.
Why do developers and teams scrape Instagram?
For lead-generation and sales teams
A competitor's or influencer's follower base is a ready-made prospect list. Point this Actor at a relevant profile with scrapeMode: "following" or "followers", turn on enrichProfiles and hasEmail/businessOnly, and every row that clears the filter is a business account with a public contact field already attached β publicEmail, publicPhoneNumber, businessCategoryName β ready to load into outreach tooling without manually opening hundreds of profiles by hand. Tune enrichTopN and enrichConcurrency to size a run, then filter further with minFollowers/maxFollowers to prioritize accounts big enough to matter but small enough to still reply.
For marketers and influencer/brand teams
Marketers use keywordInBio to find accounts whose bio mentions a niche term (a service, city, or brand), and minFollowers/maxFollowers to keep the search inside a follower-count band that matches a campaign's target reach β micro-influencer scouting, for instance, without wading through accounts with too small or too large an audience. Run it against a few relevant creator or brand accounts' followers and the matchedKeywords field tells you exactly why each row qualified, turning a raw follower list into a shortlist worth reaching out to, complete with verification status (is_verified) to sanity-check who is a real account.
For researchers and audience analysts
Analysts studying how an audience is composed β the split between verified accounts, business accounts, and personal accounts, or how bio language clusters around certain keywords β can pull a profile's full follower or following list along with isBusinessAccount, is_verified, followerCount, and biography for each row. Comparing the same audience-composition breakdown across two or more competing profiles' startUrls in one run makes cross-account audience-overlap analysis straightforward. Because only public account data is returned and no private or restricted content is accessed, the resulting dataset stays within the scope of legitimate public-data audience research.
For developers building lead and CRM pipelines
Developers wire the dataset's success flag, enrichmentError, and enrichment fields directly into a scoring or CRM-import pipeline: rows are already pre-filtered server-side by the input's audience filters, so downstream code can read publicEmail/publicPhoneNumber straight off the row instead of writing scraping or HTML-parsing logic first. Because the Actor is callable by REST API (see Integrate below) with the exact same JSON input fields documented here, the same startUrls/filter configuration can be scheduled to re-run periodically, refreshing a lead list or an audience-monitoring product as an underlying account's followers change over time.
How to scrape Instagram (step by step)
- Open Instagram Followers And Following Scrapper With Profile Emails on its Apify Store listing and click Run (or Try for free).
- Add one or more profile URLs or bare usernames to
startUrls, and set the requiredscrapeModeβfollowersorfollowing. - Turn on
enrichProfilesand configure the audience filters you need (verifiedOnly,businessOnly,hasEmail,hasPhone,minFollowers/maxFollowers,keywordInBio) if you want a qualified lead list rather than a raw follower/following dump. - Start the run from the Apify Console, the API, or the CLI β pasting your own Instagram
sessionIdcookie first improves reliability. - Download the results dataset as JSON, CSV, or Excel, or pull it by API into your own pipeline.
What to do when Instagram changes its structure
The Actor is actively maintained, and the output schema stays stable β field names and types on your end don't change even when Instagram alters its internal API or GraphQL structure behind the scenes. No action is required on your part when that happens.
β¬οΈ Input
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
startUrls | Yes | array | Instagram profile URLs or bare usernames whose followers/following to scrape. | ["https://www.instagram.com/cristiano/"] |
scrapeMode | Yes | string | followers (who follows these profiles) or following (who these profiles follow). Default followers. | "followers" |
maxData | No | integer | Max rows collected per source profile before filters apply. 0 = unlimited (collect until pagination ends). Range 0-100,000. Default 100. | 100 |
pageSize | No | integer | Users requested per pagination page from Instagram's internal friendships API. Range 5-50. Default 12. | 12 |
enrichProfiles | No | boolean | When on, calls Instagram's web_profile_info endpoint per collected row (up to enrichTopN) for biography, contact, business, and count data. Off by default. | false |
enrichTopN | No | integer | Cap on how many rows get enriched per source profile. Range 1-500. Default 20. | 20 |
enrichConcurrency | No | integer | Max concurrent enrichment requests across the whole run. Range 1-10. Default 3. | 3 |
verifiedOnly | No | boolean | Keep only rows where is_verified=true. Works without enrichment. Default false. | false |
businessOnly | No | boolean | Keep only rows where isBusinessAccount=true. Requires enrichProfiles=true. Default false. | false |
hasEmail | No | boolean | Keep only rows with a non-empty publicEmail. Requires enrichProfiles=true. Default false. | false |
hasPhone | No | boolean | Keep only rows with a non-empty publicPhoneNumber. Requires enrichProfiles=true. Default false. | false |
minFollowers | No | integer | Keep only rows with followerCount >= this value. Requires enrichProfiles=true. | 1000 |
maxFollowers | No | integer | Keep only rows with followerCount <= this value. Requires enrichProfiles=true. | 50000 |
keywordInBio | No | array | Keep only rows whose biography contains at least one keyword (case-insensitive). Matches reported in matchedKeywords. Requires enrichProfiles=true. | ["coach", "agency"] |
sessionId | No | string | Instagram sessionid cookie. Optional but recommended for better success rates. | "your_session_id_here" |
proxyConfiguration | No | object | Proxy config. Smart fallback: no proxy β datacenter β residential (3 retries). Also used for enrichment requests. | {"useApifyProxy": false} |
Example JSON input
{"startUrls": ["https://www.instagram.com/cristiano/"],"scrapeMode": "followers","maxData": 100,"pageSize": 12,"enrichProfiles": true,"enrichTopN": 20,"enrichConcurrency": 3,"verifiedOnly": false,"businessOnly": false,"hasEmail": false,"hasPhone": false,"minFollowers": 1000,"maxFollowers": 50000,"keywordInBio": ["coach", "agency"],"sessionId": "your_session_id_here","proxyConfiguration": { "useApifyProxy": false }}
The most common input mistake is turning on hasEmail, businessOnly, minFollowers/maxFollowers, or keywordInBio without also setting enrichProfiles: true β those filters only have data to check once a row is enriched, so with enrichment off every row is excluded and the run returns zero results.
β¬οΈ Output
Every run pushes typed, normalized JSON rows to the Apify dataset, exportable as JSON, CSV, or Excel. Only rows that pass your active audience filters are pushed, billed under the row_result charged event β rows removed by a filter, and profiles that fail to fetch entirely, are never pushed to the dataset and are never charged.
Scraped follower/following profile (enrichment off)
{"pk": "73320179592","username": "example_user","full_name": "Example User","profile_pic_url": "https://scontent.cdninstagram.com/example.jpg","is_verified": false,"is_private": false,"followed_by": "cristiano","profileUrl": "https://www.instagram.com/example_user/","enriched": false,"biography": null,"externalUrl": null,"bioLinks": null,"followerCount": null,"followingCount": null,"mediaCount": null,"isBusinessAccount": null,"businessCategoryName": null,"publicEmail": null,"publicPhoneNumber": null,"profilePicUrlHD": null,"highlightReelCount": null,"matchedKeywords": [],"enrichmentError": null,"success": true,"scrapedAt": "2026-07-25T12:00:00.000Z","pk_id": "73320179592","id": "73320179592","fbid_v2": "17843123456789012","third_party_downloads_enabled": 0,"strong_id__": "73320179592","profile_pic_id": "3123456789012345678_73320179592","has_anonymous_profile_picture": false,"account_badges": [],"latest_reel_media": 0,"is_favorite": false}
Enriched profile with contact email (enrichProfiles: true)
{"pk": "51928374650","username": "coach_jane_fit","full_name": "Jane β Online Fitness Coach","profile_pic_url": "https://scontent.cdninstagram.com/example2.jpg","is_verified": false,"is_private": false,"followed_by": "cristiano","profileUrl": "https://www.instagram.com/coach_jane_fit/","enriched": true,"biography": "Online fitness coach | Custom plans | DM or email to start","externalUrl": "https://linktr.ee/coach_jane_fit","bioLinks": ["https://linktr.ee/coach_jane_fit"],"followerCount": 15230,"followingCount": 512,"mediaCount": 340,"isBusinessAccount": true,"businessCategoryName": "Coach","publicEmail": "coach.jane@example.com","publicPhoneNumber": null,"profilePicUrlHD": "https://scontent.cdninstagram.com/example2_hd.jpg","highlightReelCount": 8,"matchedKeywords": ["coach"],"enrichmentError": null,"success": true,"scrapedAt": "2026-07-25T12:00:05.000Z","pk_id": "51928374650","id": "51928374650","fbid_v2": "17843198765432109","third_party_downloads_enabled": 0,"strong_id__": "51928374650","profile_pic_id": "3123456789098765432_51928374650","has_anonymous_profile_picture": false,"account_badges": [],"latest_reel_media": 0,"is_favorite": false}
followed_by always reports the source profile from startUrls you targeted, regardless of whether scrapeMode was followers or following β it identifies the parent profile a row came from, not a literal "is followed by" relationship in following mode. publicEmail/publicPhoneNumber stay null even with enrichment on for the majority of accounts β Instagram only populates them for some business accounts that have added public contact info.
How many results can you scrape with this Actor?
maxData controls the per-profile ceiling: 0-100,000, default 100, with 0 meaning unlimited (collect until Instagram's pagination ends). In following mode, the underlying endpoint paginates fully to whatever maxData you set. In followers mode, Instagram's direct friendships-list endpoint currently returns only around 45-50 profiles per source account regardless of the requested count β a current platform limitation on this cookie-authenticated web API, not a bug in the Actor β so this Actor additionally harvests further followers who appear as commenters on that profile's own posts, up to your maxData target, to get closer to a complete list. Enrichment is separately capped by enrichTopN (max 500 per source profile) and throttled by enrichConcurrency (max 10 in flight). Multiple startUrls are processed one after another in the same run. There is no published throughput benchmark for a maximum run size.
Integrate Instagram Followers And Following Scrapper With Profile Emails and automate your workflow
Instagram Followers And Following Scrapper With Profile Emails works with any language or tool that can send an HTTP request, using the standard Apify API.
REST API integration
import requestsTOKEN = "YOUR_APIFY_TOKEN"ACTOR = "API-Empire~instagram-followers-and-following-scrapper-with-profile-emails"run = requests.post(f"https://api.apify.com/v2/acts/{ACTOR}/run-sync-get-dataset-items",params={"token": TOKEN},json={"startUrls": ["https://www.instagram.com/cristiano/"],"scrapeMode": "followers","enrichProfiles": True,"hasEmail": True,},)leads = run.json()for row in leads:if row.get("publicEmail"):print(row["username"], row["publicEmail"])
Works in Python, Node.js, Go, Ruby, cURL.
MCP for AI agents
The Actor can be exposed to an MCP-compatible client through Apify's Actors MCP Server by adding its ID to the server's actor list, for example running npx @apify/actors-mcp-server --actors API-Empire/instagram-followers-and-following-scrapper-with-profile-emails. Compatible with Claude, Cursor, and other MCP clients.
Automation platforms (n8n, Make)
In n8n, the Apify node's "Run Actor" operation can call this Actor by ID and pass startUrls, scrapeMode, and the filter fields directly from an upstream node. In Make, the Apify app's "Run an Actor" module takes the same actor ID and input JSON, letting you chain the resulting lead dataset into a CRM, Google Sheets, or email-outreach module without custom code.
Is it legal to scrape Instagram?
Yes, scraping publicly accessible Instagram profile and follower data is generally legal β this Actor only returns data from profiles, followers, and following lists that anyone can view without logging in, and it cannot access private accounts. Usernames, bios, and any public email or phone number returned by profile enrichment are personal data, so GDPR (for EU residents) and CCPA (for California residents) govern how you may lawfully store, use, and retain it β you need a valid lawful basis, such as legitimate interest, and must honor access/deletion requests. Consult legal counsel for commercial use cases involving bulk personal data such as lead lists.
Frequently asked questions
Does this Actor work without an Instagram account?
Yes. sessionId is optional β the Actor runs without it, though pasting your own Instagram sessionid cookie is recommended for better success rates on both the base scrape and enrichment requests.
How often is the scraped data updated?
Each run fetches followers, following, and profile-enrichment data live from Instagram at the time the run executes; nothing is served from a previous run's cache. Run the Actor again to get current data.
What happens if a profile has few results or a request gets blocked?
Followers mode returns what Instagram's direct friendships endpoint exposes (typically 45-50 profiles) plus any additional followers found via posts and comments, up to maxData; if a source profile fails to load entirely (invalid username, blocked request), the Actor logs the failure and moves on to the next profile in startUrls rather than stopping the run. A row-level enrichment failure sets enrichmentError and success: false on that row instead of dropping it silently.
Can I scrape private Instagram accounts?
No. Only public profiles, followers, and following lists are accessible β Instagram does not serve this data for private accounts to a logged-out or non-following session, and this Actor does not attempt to bypass that restriction.
Does this Actor work for AI agent workflows and LLM pipelines?
Yes. It's callable as a standard HTTP API endpoint from any agent framework, and it's also reachable through Apify's Actors MCP Server for MCP-compatible clients. Every response is typed JSON with stable field names β no HTML or parsing step before passing rows to an LLM.
How does this Actor handle Instagram's anti-bot system?
It escalates through three proxy tiers β no proxy (direct), datacenter, then sticky residential with retries β falling back automatically when Instagram returns a block signal (401/403/429, checkpoint, or login-wall response). If Instagram's own transport still fingerprint-blocks a request, the Actor retries it through an alternate Chrome-TLS-impersonating client before giving up on that request.
Does this Actor return data in a format LLMs can use directly?
Yes. Every row is typed, normalized JSON with stable field names β no HTML, no selectors, no parsing step. Pass rows directly into an LLM context window, index them into a vector store, or route them through an agent tool call.
Can I use this Actor without managing proxies?
Yes. Proxy selection and the direct β datacenter β residential fallback are handled automatically by the Actor's own proxy manager; you only need to touch proxyConfiguration if you want to route requests through your own proxy groups.
What happens when Instagram changes its structure or blocks the scraper?
The Actor is maintained on an ongoing basis, and the output schema stays stable on your end β field names and types don't change even when Instagram's internal API or GraphQL structure shifts. No numeric turnaround time is guaranteed.
Your feedback
Found a bug or missing a field? We want to know. Reach out through the Actor's Apify Store page (Issues tab) or your Apify Console support channel with a run ID and we'll take a look β reports like this directly shape what gets fixed and maintained.