Instagram Email Scraper with Phone Number & Website avatar

Instagram Email Scraper with Phone Number & Website

Pricing

$19.99/month + usage

Go to Apify Store
Instagram Email Scraper with Phone Number & Website

Instagram Email Scraper with Phone Number & Website

๐Ÿ“งInstagram Email Scraper with Phone Number & Website extracts verified emails from public Instagram profiles, bios & contact info to fuel lead gen, outreach & influencer marketing. โšก Fast, accurate, CSV export, filters & deduping. ๐Ÿ” Ideal for agencies, founders & sales teams. โœ… Public data only.

Pricing

$19.99/month + usage

Rating

5.0

(1)

Developer

ScrapeFlow

ScrapeFlow

Maintained by Community

Actor stats

1

Bookmarked

26

Total users

0

Monthly active users

5 days ago

Last modified

Share

Instagram Email Scraper With Phone Number & Website ๐Ÿ“ฑ

Search Instagram by keyword and export the public business contacts behind the results: email address, phone number and website, with every profile returned as one merged row.

This is an Instagram email scraper with two extra contact channels bolted onto the same run. It works from plain keywords โ€” no profile URLs, no login, no cookies โ€” and it is built for lead generation, cold outreach list building and B2B prospecting on Instagram.

One profile = one row ๐ŸŽฏ

Email, phone and website are found by three different lead searches, because the filters that surface them are mutually exclusive: a query that pins an email domain and a query that pins a dial code return almost nothing when combined.

Most Instagram lead scrapers push each search's hits straight to the dataset. When the same profile turns up in two of them you get two half-empty rows โ€” one with an email and no phone, one with a phone and no email โ€” and you have to de-duplicate them yourself in a spreadsheet.

This actor keeps a per-keyword index keyed on the profile/post URL:

  • every result block is read by all three extractors (email, phone, website), not just the one that found it;
  • a profile seen by more than one search is merged into a single record;
  • the discoveredBy column tells you which searches found it (email, phone+email, phone+website+email, โ€ฆ);
  • contactsFound counts how many of the three contact fields that row actually carries, so you can sort your richest leads to the top.

Rows are pushed to the output table as the run progresses, keyword by keyword โ€” never buffered to the end.

Extractable Data Table ๐Ÿ“Š

FieldDescription
networkSource network host the result was matched on (instagram.com)
keywordThe keyword that surfaced this profile
titleProfile / post title as shown in the result
descriptionBio or caption text collected with the result (up to 500 chars)
urlInstagram profile, post or reel URL
emailPublic email address, filtered by your domain list
phoneNumberValidated phone number in +CCXXXXXXXXX form
phoneDialCodeDial code of the country you selected (+44, +1, โ€ฆ)
phoneCountryCountry name you selected
websiteDomainExternal website domain (acme.co.uk)
websiteUrlThe same website as a clickable https:// link
discoveredByWhich lead searches found this profile, joined with +
contactsFoundHow many of email / phone / website this row carries (0โ€“3)

Any contact a profile does not publish is left empty โ€” never a placeholder, never a guessed value.

Key Features ๐Ÿš€

  • Keyword-driven Instagram lead search โ€” no profile URLs or account IDs needed.
  • Email extraction with a domain filter (@gmail.com, @outlook.com, a client's business domain, or everything).
  • Phone number extraction for 194 countries, with the number validated against that country's real national-number length. Fiction/placeholder ranges, double-typed country codes, truncated fragments and street numbers glued onto the end of a number are all rejected rather than shipped.
  • Website extraction from the profile text already collected, with a free-mail-provider denylist so gmail.com is never reported as somebody's website.
  • Cross-channel enrichment โ€” a phone number found on a result the email search returned still lands on that row, and vice versa. On those results, which are not country-targeted, a number is only reported when the result itself prints the international dial code (+44 7386 โ€ฆ). Anything written as a bare local number there is left empty rather than relabelled with your country โ€” measured on live results, a "local" number on an untargeted result was as likely to be Kenyan or Pakistani as British.
  • Merged output โ€” one row per profile, with provenance and a completeness count.
  • De-duplication that survives tracking links โ€” the same post indexed as /p/ABC/ and /p/ABC/?utm_source=ig is one lead, not two.
  • Real-time output โ€” rows appear in the table during the run.

How to use it ๐Ÿงญ

  1. Add one or more keywords. Specific beats generic: hair salon manchester returns far richer contact data than beauty.
  2. Optionally add a city or region to keep only profiles mentioning that place.
  3. Pick the email domains you want to keep (or none, to accept every domain).
  4. Leave Also Collect Phone Numbers on and pick the country whose numbers you want.
  5. Choose a Website Collection Mode (see coverage below).
  6. Press Start. Export the results as CSV, Excel, JSON or XML, or pull them from the Apify API.

Use Cases ๐ŸŽฏ

  • Build cold email + phone lists for local service businesses (salons, plumbers, restaurants, studios).
  • Enrich an existing Instagram prospect list with a phone number and a website.
  • Agency lead-gen: find businesses in a niche and city that publish a contact detail in their bio.
  • Influencer and creator outreach where the creator publishes a booking email.
  • Feed a CRM or an outreach tool through the Apify API or an integration.

Coverage โ€” honest numbers, not promises ๐Ÿ“‰

Contact data is published by some profiles, not all. Measured on this actor's own live runs:

ContactWhere it comes fromMeasured coverage
EmailIts own lead search~60โ€“80% of the results that search returns
PhoneIts own lead search33/101 result blocks = 33% (54% of the profiles that search returns), strongly keyword-shaped: [service] [city] peaks at 9/10, one-word keywords bottom out at 3/11
WebsiteRead from collected text4/60 rows = 7%
WebsiteDedicated web-address lead search16/50 rows = 32% of the rows it returns (20/110 = 18% across all rows in a mixed run)

(Measured over 18 live searches across 6 keyword shapes and 3 dial codes. Your numbers will move with the keyword.)

One correction worth stating plainly, because it is often claimed the other way round: website coverage is not driven by "commercial intent" keywords. Measured, shop now and boutique link in bio โ€” both maximally commercial โ€” returned zero websites, while a search forcing a written-out web address into the match returned them on 32% of rows against 7% for the same keywords without it. The only thing that moves website coverage is whether the result text actually contains a domain-shaped token, which is exactly what the third Website Collection Mode targets. Everything else is a coin flip on what the profile chose to publish.

Input Parameters ๐Ÿงฉ

FieldKeyTypeDefault
๐Ÿ” Search Keywordskeywordsarray of strings (required)["marketing"]
๐Ÿ“ฑ Source NetworkplatformselectInstagram
๐Ÿ—บ๏ธ City Or Regionlocationstring(empty)
๐Ÿ“ง Email Domains To KeepemailDomainsarray of strings["@gmail.com"]
๐ŸŽฏ Email Leads Per KeywordmaxEmailsinteger 1โ€“10000010
โ˜Ž๏ธ Also Collect Phone NumberscapturePhoneNumbersbooleantrue
๐ŸŒ Phone Number CountryphoneCountryselect (194 countries)United Kingdom (+44)
๐Ÿ“ž Phone Leads Per KeywordmaxPhoneLeadsinteger 1โ€“10000010
๐ŸŒ Website Collection ModewebsiteCaptureoff | harvest | harvest_plus_domain_passharvest
๐Ÿ”— Website Leads Per KeywordmaxWebsiteLeadsinteger 1โ€“10000010
๐Ÿ›ก๏ธ Connection SettingsproxyConfigurationobjectauto

Example input

{
"keywords": ["hair salon manchester", "plumber london"],
"platform": "Instagram",
"location": "",
"emailDomains": ["@gmail.com"],
"maxEmails": 10,
"capturePhoneNumbers": true,
"phoneCountry": "United Kingdom (+44)",
"maxPhoneLeads": 10,
"websiteCapture": "harvest_plus_domain_pass",
"maxWebsiteLeads": 10
}

Output Format ๐Ÿ“ค

Each row is one Instagram profile/post with everything the run learned about it.

Example output

{
"network": "instagram.com",
"keyword": "hair salon manchester",
"title": "Jess | Cheshire Hairstylist",
"description": "Booking enquiries hausofmajorhair@gmail.com +44 7386 483214 www.hausofmajor.co.uk",
"url": "https://www.instagram.com/jess_cheshire_hairstylist/reel/DCTyEI8M-5x/",
"email": "hausofmajorhair@gmail.com",
"phoneNumber": "+447386483214",
"phoneDialCode": "+44",
"phoneCountry": "United Kingdom",
"websiteDomain": "hausofmajor.co.uk",
"websiteUrl": "https://hausofmajor.co.uk",
"discoveredBy": "phone+email",
"contactsFound": 3
}

A row with only one contact looks the same, with the other fields null:

{
"network": "instagram.com",
"keyword": "marketing",
"title": "SEO Appoint",
"description": "DM for audits - seoappoint@gmail.com",
"url": "https://www.instagram.com/p/DUU3hy1k35g/",
"email": "seoappoint@gmail.com",
"phoneNumber": null,
"phoneDialCode": null,
"phoneCountry": null,
"websiteDomain": null,
"websiteUrl": null,
"discoveredBy": "email",
"contactsFound": 1
}

Output Table

ColumnFormat
Network, Keyword, Profile / Post Title, Bio / Caption Texttext
Instagram URLclickable link
Email, Phone Number, Dial Code, Phone Country, Website Domaintext
Websiteclickable link
Found Bytext
Contacts On Rownumber

Two table views ship with the dataset: ๐ŸŽฏ Merged Leads (everything) and ๐Ÿ“‡ Contact Book (just the URL and the contact columns, ready to paste into an outreach tool).

Scalability ๐Ÿ“ˆ

Each keyword has its own per-search limits, so cost scales with what you ask for. Run a handful of tightly-scoped keywords for a quick list, or queue hundreds of [service] [city] combinations for a full territory sweep. Results stream to the dataset during the run, so a long run is usable before it finishes.

  • Only public Instagram content is read. Private accounts, follower lists and logged-in-only data are out of scope.
  • Contact details are collected exactly as the profile owner published them; nothing is inferred, completed or generated.
  • You are responsible for using the collected data in line with GDPR, CAN-SPAM, PECR and any local marketing rules โ€” including honouring opt-outs and having a lawful basis for outreach.

FAQ โ“

What does this Instagram email scraper do?

It searches public Instagram content by keyword and returns the email addresses, phone numbers and websites those profiles publish, one merged row per profile.

How is it different from a plain Instagram email extractor?

A plain email extractor returns one contact channel. This returns three, reads all three off every result it fetches, and merges a profile found by several searches into a single complete row instead of several partial ones.

Do I need an Instagram login or cookies?

No. Only public content is used and no credentials are accepted.

Can it scrape private profiles?

No. If a profile is private, none of its content is available and nothing is returned for it.

Why is a phone number sometimes empty?

Because that profile did not publish one, or the number it published failed validation (wrong length for the country, a reserved fiction range, a fragment cut off by a truncated snippet), or it appeared on a result that was not country-targeted without showing which country it belongs to. An empty field is deliberate โ€” a wrong number is worse than no number.

Why do I get fewer websites than emails?

Most bios publish an email or a phone but not a web address. Switch Website Collection Mode to the dedicated web-address lead search to raise website coverage on the rows it returns; see the coverage table above for real figures.

Can I filter to business email domains only?

Yes. Put the domains you want in Email Domains To Keep โ€” free providers, a specific company domain, or several at once. Leave it empty to accept every domain.

Does the email domain filter also apply to phone results?

Yes. The filter governs the email column on every row, whichever search surfaced it, so you never get an off-domain address smuggled in on a phone lead.

What is the discoveredBy column for?

It records which lead searches found that profile. phone+email means the same profile surfaced in two searches and was merged into the one row you are looking at.

How do I export the results?

Download the dataset as CSV, Excel, JSON, XML or RSS from the run page, or fetch it from the Apify API / an integration.

Can I run several keywords at once?

Yes. Every keyword is processed in turn with its own limits, and its keyword is stamped on every row it produced.

How many results will I get?

Up to your per-search limits, per keyword โ€” minus any duplicates, because a profile found by two searches is merged into one row rather than counted twice.