Instagram Followers And Following Scrapper With Profile Emails avatar

Instagram Followers And Following Scrapper With Profile Emails

Pricing

Pay per usage

Go to Apify Store
Instagram Followers And Following Scrapper With Profile Emails

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

API Empire

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

0

Monthly active users

3 days ago

Last modified

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 TypeKey FieldsJSON Field Names
Follower profilesidentity, verification, privacy statususername, full_name, is_verified, is_private, followed_by
Following profilessame identity fields, sourced from the following endpointusername, profileUrl, pk, followed_by
Enriched contact & business databiography, external links, business category, public email/phonebiography, externalUrl, bioLinks, isBusinessAccount, businessCategoryName, publicEmail, publicPhoneNumber
Audience size metricsfollower/following/media/highlight-reel countsfollowerCount, 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.

FeatureInstagram Graph APIThis Actor
Access modelRequires a Meta app, business/creator account link, and access tokenNo Instagram account or token needed to start a run
Approval processApp review required for most permission scopesNo approval process β€” provide input and start the run
Arbitrary profile lookupLimited to accounts you or your app manageWorks on any public profile URL or username
Follower/following list accessNo endpoint to list another account's followers/followingScrapes followers or following for any public profile
Contact enrichmentNot provided by the APISurfaces public email/phone via profile enrichment, where Instagram exposes them
Setup timeDeveloper account, app review, token/permission managementProvide 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)

  1. Open Instagram Followers And Following Scrapper With Profile Emails on its Apify Store listing and click Run (or Try for free).
  2. Add one or more profile URLs or bare usernames to startUrls, and set the required scrapeMode β€” followers or following.
  3. Turn on enrichProfiles and 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.
  4. Start the run from the Apify Console, the API, or the CLI β€” pasting your own Instagram sessionId cookie first improves reliability.
  5. 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

ParameterRequiredTypeDescriptionExample Value
startUrlsYesarrayInstagram profile URLs or bare usernames whose followers/following to scrape.["https://www.instagram.com/cristiano/"]
scrapeModeYesstringfollowers (who follows these profiles) or following (who these profiles follow). Default followers."followers"
maxDataNointegerMax rows collected per source profile before filters apply. 0 = unlimited (collect until pagination ends). Range 0-100,000. Default 100.100
pageSizeNointegerUsers requested per pagination page from Instagram's internal friendships API. Range 5-50. Default 12.12
enrichProfilesNobooleanWhen 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
enrichTopNNointegerCap on how many rows get enriched per source profile. Range 1-500. Default 20.20
enrichConcurrencyNointegerMax concurrent enrichment requests across the whole run. Range 1-10. Default 3.3
verifiedOnlyNobooleanKeep only rows where is_verified=true. Works without enrichment. Default false.false
businessOnlyNobooleanKeep only rows where isBusinessAccount=true. Requires enrichProfiles=true. Default false.false
hasEmailNobooleanKeep only rows with a non-empty publicEmail. Requires enrichProfiles=true. Default false.false
hasPhoneNobooleanKeep only rows with a non-empty publicPhoneNumber. Requires enrichProfiles=true. Default false.false
minFollowersNointegerKeep only rows with followerCount >= this value. Requires enrichProfiles=true.1000
maxFollowersNointegerKeep only rows with followerCount <= this value. Requires enrichProfiles=true.50000
keywordInBioNoarrayKeep only rows whose biography contains at least one keyword (case-insensitive). Matches reported in matchedKeywords. Requires enrichProfiles=true.["coach", "agency"]
sessionIdNostringInstagram sessionid cookie. Optional but recommended for better success rates."your_session_id_here"
proxyConfigurationNoobjectProxy 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 requests
TOKEN = "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.

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.