Instagram Profile Phone Number & Email Finder Scraper avatar

Instagram Profile Phone Number & Email Finder Scraper

Pricing

Pay per usage

Go to Apify Store
Instagram Profile Phone Number & Email Finder Scraper

Instagram Profile Phone Number & Email Finder Scraper

Instagram Profile Phone Number Scraper gathers public phone contacts for agencies and B2B teams. Filter profiles by niche, category, or follower count to streamline prospecting and outbound calling at scale.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Scrapier

Scrapier

Maintained by Community

Actor stats

0

Bookmarked

78

Total users

8

Monthly active users

2 days ago

Last modified

Share

Instagram Scraper — Extract Phone Numbers and Emails Together

Instagram Profile Phone Number & Email Finder Scraper searches Google's public index of instagram.com pages by keyword and country, then mines each matching result's title, description and URL for phone numbers and email addresses in the same pass. No Instagram login, cookie, or session is required. Every response is structured JSON — ready to pass directly to an LLM, index into a vector store, or feed a lead-generation pipeline. Point it at a niche, a username, or a profile URL and get back reachable contact details.

What is Instagram Profile Phone Number & Email Finder Scraper?

Instagram Profile Phone Number & Email Finder Scraper is a Google-SERP-based lead finder that returns both phone numbers and email addresses for public Instagram accounts in a single run — most Instagram contact scrapers extract only phone numbers, leaving email lookups to a separate tool. No Instagram account, login, or cookie is needed since it never touches instagram.com directly; it reads what Google has already indexed. Because it runs off Google's cache, it can only surface a phone or email if the target page's snippet or bio text has it visible to Google in the first place.

  • Extracts phone numbers from each result and normalizes them to the selected country's dial code
  • Extracts every public email found in the title, description, and URL of a result (emails[] plus a primaryEmail)
  • Accepts niche keywords, @usernames, or full profile URLs as search input
  • Filters phone numbers by a selected country's dial code so numbers aren't misattributed
  • Optionally drops rows where neither an email nor a phone was found (requireEmailOrPhone)
  • Runs multiple keywords in one job and tags every row with the keyword that produced it

What data can you get with Instagram Profile Phone Number & Email Finder Scraper?

Each run returns one row per matching Google result for instagram.com, carrying both contact channels side by side.

Result TypeExtracted FieldsPrimary Use Case
Contact rowplatform, keyword, title, description, url, phone_number, emails, primaryEmail, hasEmail, hasPhone, country, dial_codeBuilding an outreach list with both a phone number and an email per lead

Combined phone + email extraction

Where most Instagram lead scrapers stop at a phone number, this Actor regex-mines the same snippet for public email addresses at the same time, so one row can carry both contact channels instead of requiring a second tool run against a separate email-only scraper. The extractEmails option controls whether this layer runs at all; when it does, every email found in the result's title, description, or URL is collected into emails[], deduplicated and lowercased, with the first one repeated as primaryEmail for quick filtering without iterating the array. Junk domains such as tracker pixels and image-asset filenames are filtered out before an email is ever considered valid. A row with no visible email gets an empty list and a null primaryEmail — it is never fabricated. Example shape:

{
"phone_number": "+14155550123",
"emails": ["hello@sweetcornerbakery.com"],
"primaryEmail": "hello@sweetcornerbakery.com",
"hasEmail": true,
"hasPhone": true
}

Contact-completeness flags

Every row also carries hasEmail and hasPhone booleans so you can filter or sort a dataset by contact completeness without re-parsing the phone_number and emails fields yourself. Combined with requireEmailOrPhone at input time, this lets you decide once whether to keep zero-contact rows for manual review or drop them before they ever reach the dataset.

Why not build this yourself?

Building your own Instagram contact finder means handling Google's SERP layout changes, rotating headers and proxies to avoid block pages, and writing regex extraction for both phone and email formats that vary by country and by how a Google snippet truncates bio text. Instagram itself has no public API for arbitrary contact lookup by keyword, and Google's own Search API does not expose the phone/email content buried inside indexed snippets. This Actor already handles the SERP fetch, the GOOGLE_SERP proxy routing, block detection, and dual-field extraction, so you start from structured rows instead of raw HTML.

How to scrape Instagram with Instagram Profile Phone Number & Email Finder Scraper?

  1. Open the Actor's page in the Apify Store and click Run (or call it via the API — no separate signup is needed beyond an Apify account).
  2. Enter your search terms in keywords — niche keywords, @usernames, or profile URLs (required).
  3. Select the country whose dial code should be used to build the query and normalize phone numbers (required).
  4. Optionally set maxPhoneNumbers, toggle extractEmails, or enable requireEmailOrPhone to drop contact-less rows.
  5. Start the run and download results as JSON, CSV, or the other export formats Apify datasets support.

Example request body:

{
"keywords": ["bakery", "real estate agent"],
"country": "United States (+1)",
"maxPhoneNumbers": 20,
"extractEmails": true,
"requireEmailOrPhone": false
}

How to run multiple queries in one job

Pass more than one string into the keywords array to batch several searches in a single run — the Actor processes each keyword in turn, tags every resulting row with its source keyword, and applies maxPhoneNumbers as a per-keyword cap rather than a total. There is no separate batch-upload input; the array itself is the batching mechanism.

⬇️ Input

ParameterRequiredTypeDescriptionExample Value
keywordsYesarrayNiche keywords, @usernames, or profile URLs to search for on Instagram via Google's SERP.["bakery"]
countryYesstringCountry whose dial code builds the search and normalizes/filters phone numbers. Emails are extracted regardless of country."United States (+1)"
maxPhoneNumbersNointegerMaximum number of Instagram result rows to collect per keyword (default 20, min 1, max 10000).20
extractEmailsNobooleanRegex-extract public emails from each result alongside the phone number (default true).true
requireEmailOrPhoneNobooleanWhen true, drop rows where neither an email nor a phone was found (default false).false
platformNostringTarget platform for the site: search filter. Currently only Instagram is supported (default Instagram)."Instagram"
proxyConfigurationNoobjectApify proxy configuration. The Actor always enforces the GOOGLE_SERP proxy group internally regardless of what is selected here.{"useApifyProxy": true}

Example JSON input:

{
"keywords": ["bakery", "@sweetcornerbakery"],
"country": "United Kingdom (+44)",
"maxPhoneNumbers": 15,
"extractEmails": true,
"requireEmailOrPhone": true,
"platform": "Instagram",
"proxyConfiguration": { "useApifyProxy": true }
}

Common pitfall: country selects the dial code used to filter phone numbers — a bakery's number that doesn't start with the selected country's dial code is treated as not matching and won't populate phone_number, even if a valid number appears in the snippet. Pick the country your target leads actually operate in, not your own location.

⬆️ Output

Each run produces a typed, normalized JSON dataset with a consistent row schema — exportable as JSON, CSV, Excel, or the other formats Apify datasets support.

Scraped results

[
{
"platform": "Instagram.com",
"keyword": "bakery",
"title": "Sweet Corner Bakery (@sweetcornerbakery)",
"description": "📧 hello@sweetcornerbakery.com · ☎ +1 415 555 0123 · Fresh bread daily.",
"url": "https://www.instagram.com/sweetcornerbakery/",
"phone_number": "+14155550123",
"emails": ["hello@sweetcornerbakery.com"],
"primaryEmail": "hello@sweetcornerbakery.com",
"hasEmail": true,
"hasPhone": true,
"country": "United States",
"dial_code": "+1"
},
{
"platform": "Instagram.com",
"keyword": "bakery",
"title": "Riverside Real Estate (@riverside_realestate)",
"description": "Call us: (415) 555-0199 for listings in the Bay Area.",
"url": "https://www.instagram.com/riverside_realestate/",
"phone_number": "+14155550199",
"emails": [],
"primaryEmail": null,
"hasEmail": false,
"hasPhone": true,
"country": "United States",
"dial_code": "+1"
},
{
"platform": "Instagram.com",
"keyword": "real estate agent",
"title": "Dana Ruiz Realty (@danaruizrealty)",
"description": "Reach me at dana@danaruizrealty.com for a free consultation.",
"url": "https://www.instagram.com/danaruizrealty/",
"phone_number": null,
"emails": ["dana@danaruizrealty.com"],
"primaryEmail": "dana@danaruizrealty.com",
"hasEmail": true,
"hasPhone": false,
"country": "United States",
"dial_code": "+1"
}
]

How can I use the data extracted with Instagram Profile Phone Number & Email Finder Scraper?

  • Sales outreach teams: build a call-and-email list from a single run by filtering on hasPhone and hasEmail, then routing each row into the matching outreach channel instead of merging two separate tools' outputs.
  • Lead generation agencies: run a batch of niche keywords per client vertical, dedupe on url, and hand off a dataset that already carries both phone_number and primaryEmail per lead.
  • AI engineers and LLM developers: have an agent issue a keyword query, receive structured JSON rows back, and pass title, description, phone_number, and emails directly into a model as grounding context for lead-qualification or enrichment tasks.
  • B2B prospecting teams: target a niche keyword plus a country's dial code to find reachable local businesses, using requireEmailOrPhone to discard rows with no usable contact before they reach a CRM import.

Integrate Instagram Profile Phone Number & Email Finder Scraper and automate your workflow

Instagram Profile Phone Number & Email Finder Scraper works with any language or tool that can send an HTTP request.

REST API with Python

import requests
TOKEN = "<YOUR_APIFY_TOKEN>"
ACTOR = "Scrapier~instagram-profile-phone-number-email-finder-scraper"
run_input = {
"keywords": ["bakery"],
"country": "United States (+1)",
"extractEmails": True,
}
resp = requests.post(
f"https://api.apify.com/v2/acts/{ACTOR}/run-sync-get-dataset-items",
params={"token": TOKEN},
json=run_input,
)
resp.raise_for_status()
rows = resp.json()
for row in rows:
print(row["title"], row["phone_number"], row["primaryEmail"])

Scheduled monitoring and delivery

Use Apify's built-in Scheduler to run this Actor against a fixed keyword set on a recurring cadence, and configure a webhook on the Actor run to push each new dataset to your own endpoint when the run finishes. There is no built-in polling API beyond the standard Apify run and dataset endpoints, so downstream delivery is either the webhook or a scheduled pull of the latest dataset.

Scraping publicly visible Instagram content that Google has already indexed is generally permissible — this Actor returns only what appears in a public Google search result, not private profile data or anything behind a login wall. However, phone numbers and email addresses are personal data, and processing them for outreach can trigger GDPR (if any data subject is in the EU/UK) or CCPA (for California residents) obligations around lawful basis, consent, and the right to erasure — regardless of where the data was originally publicly posted. Using this data for one-off research monitoring carries a different risk profile than storing it in bulk for repeated marketing outreach. Consult your legal team before using extracted contact data for commercial outreach or bulk storage.

Frequently asked questions

How does Instagram Profile Phone Number & Email Finder Scraper filter phone numbers by country?

The country parameter selects a dial code (for example +44 for the United Kingdom) that is both inserted into the underlying Google search query and used to filter extracted phone numbers — a number that doesn't match the selected dial code is not returned as phone_number. Emails are extracted regardless of the selected country.

Can I control how many results I get per keyword?

Yes — maxPhoneNumbers caps the number of result rows collected per keyword, not per run, with a default of 20 and an allowed range of 1 to 10,000. The Actor stops paging through Google results for a given keyword once that cap is reached.

How does Instagram Profile Phone Number & Email Finder Scraper handle Google's anti-bot measures?

It routes every search request through Apify's GOOGLE_SERP proxy group (enforced internally regardless of the proxyConfiguration input), rotates user agents and Accept-Language headers per request, adds randomized delays between requests, and retries with a fresh proxy URL when it detects a block page or a redirect to Google's /sorry/ interstitial, up to 5 attempts before giving up on a page.

Does Instagram Profile Phone Number & Email Finder Scraper extract both phone numbers and emails?

Yes — both are extracted in the same pass and returned on the same row: phone_number holds the normalized phone number (or null), while emails holds every public email found in the result's title, description, and URL, with primaryEmail set to the first one. Set extractEmails to false to skip the email layer if you only need phone numbers.

How many results does Instagram Profile Phone Number & Email Finder Scraper return per query?

Up to maxPhoneNumbers rows per keyword (default 20, maximum 10,000), or fewer if Google's index for that keyword and country runs out of matching instagram.com results first.

How do I use Instagram Profile Phone Number & Email Finder Scraper to monitor new leads over time?

Schedule a recurring run (via Apify's Scheduler) across the same keywords and country, then diff the new dataset's url values against the previous run's to isolate newly indexed profiles, and check hasEmail/hasPhone on those new rows to see which are immediately actionable.

Does Instagram Profile Phone Number & Email Finder Scraper work with Claude, ChatGPT, and AI agent frameworks?

It is callable as an HTTP endpoint by any agent framework that can send a POST request, which lets an agent issue a keyword query, receive structured JSON rows back, and generate a grounded outreach or research answer from phone_number, emails, and the surrounding snippet fields.

How does Instagram Profile Phone Number & Email Finder Scraper differ from other Instagram scrapers?

Its output row carries both phone_number and emails/primaryEmail from a single run; a scraper that only validates and dedups phone numbers (such as the sibling instagram-phone-number-scraper-lead-validator Actor in this account, which adds libphonenumber validation fields like isValidNumber and e164Format but has no email extraction) does not return email fields at all. Choose this Actor when you need both contact channels together, or the validator Actor when you need stricter phone-number validation and deduplication instead.

Can I use Instagram Profile Phone Number & Email Finder Scraper without managing proxies or Instagram credentials?

Yes — the Actor enforces Apify's GOOGLE_SERP proxy group internally and never logs into Instagram, so you only need to supply keywords and country; no Instagram account, cookie, or session token is required.

Your feedback

Found a bug or a field that doesn't match what's documented here? Let us know through the Actor's page on the Apify Store — issues and suggestions submitted there help keep this scraper accurate and maintained.