Instagram Phone Number Scraper avatar

Instagram Phone Number Scraper

Pricing

$19.99/month + usage

Go to Apify Store
Instagram Phone Number Scraper

Instagram Phone Number Scraper

Instagram Phone Number Scraper extracts publicly listed phone numbers from Instagram profiles, bios, and linked pages. Build targeted contact lists for sales, partnerships, and local outreach campaigns at scale.

Pricing

$19.99/month + usage

Rating

3.6

(4)

Developer

Scraper Engine

Scraper Engine

Maintained by Community

Actor stats

1

Bookmarked

347

Total users

22

Monthly active users

16 hours

Issues response

5 days ago

Last modified

Share

Instagram Phone Number Scraper — Extract Phone Numbers and URLs

Instagram Phone Number Scraper finds Google-indexed instagram.com pages that publicly mention a phone number for your chosen keyword and country, then returns the phone number, the Instagram URL, the matching result title, and the snippet description as structured JSON — no HTML parsing required. It never logs in to Instagram. Give it a keyword and a country and start a run to see real results.

What is Instagram Phone Number Scraper?

Instagram Phone Number Scraper is a Google-SERP-based lead discovery tool: it searches Google for site:instagram.com results that contain both your keyword and a country dial code, then extracts and normalizes any phone number found in the result's title or snippet. No Instagram account, login, or session cookie is used or required — every request goes to Google, never to Instagram, through Apify's GOOGLE_SERP proxy. It's built for outreach and lead-generation teams, growth marketers, and developers assembling contact lists by niche and region.

Note: this is a separate Apify Store listing from Instagram Profile Phone Number Scraper. Both use the same Google-SERP phone-lookup method and return the same fields, so you only need one — this listing runs on Apify's pay-per-event pricing model (billed per row_result).

What Instagram phone number data is publicly available to scrape?

Instagram gates almost everything behind a login, but this actor never visits Instagram directly — it only reads what Google has indexed.

Data CategoryPublicly Available (Google's index)Restricted (Instagram login)
Phone number in a public snippetYes, if indexedNeeds a logged-in profile visit
Result title and snippet textYes
Instagram post/profile URLYes
Keyword/dial-code matchYes
Bio, follower count, verified badgeNo — not fetchedNeeds an authenticated visit
Stories, DMs, private postsNoLogin, plus a follow if private

Only data Google has already indexed publicly is returned — nothing behind an Instagram login wall.

What data can I extract with Instagram Phone Number Scraper?

Every run returns exactly 8 fields per matched result — the same fields the actor's row-builder writes and nothing more.

Field NameDescription
platformPlatform label used for the search (e.g. Instagram.com).
keywordThe keyword, username, or URL from your input that produced this result.
titleThe title of the matching Google search result.
descriptionThe Google snippet text the phone number was extracted from.
urlThe instagram.com URL of the matching result.
phone_numberThe extracted phone number, normalized to start with the selected country's dial code.
countryThe country name selected for the run.
dial_codeThe dial code used to build the query and validate the number.

Search & match fields

  • platform — which site the site: query targeted
  • keyword — the input term that matched
  • country / dial_code — the region used to build and validate the query

Extracted result fields

  • title — Google's result headline
  • description — the snippet the phone number was pulled from
  • url — the Instagram page Google linked to
  • phone_number — the normalized number itself

🤖 Add-on: Need additional Instagram data?

If you need more than a phone number, pair this actor with Instagram Profile Scraper for bio, follower count, and verification status, or Instagram B2B Email Scraper for email addresses instead of phone numbers. For a fuller contact record per lead, Instagram Followers Scraper With Bio Contact Enrichment adds bio-based contact enrichment on top of a followers list.

Why not build this yourself?

Instagram's Graph API has no endpoint for arbitrary phone-number lookup by keyword, so this isn't a build-vs-official-API decision — it's a build-vs-maintain one. A homegrown Google-SERP scraper has to track Google's rotating result-wrapper markup (this actor already carries fallback selectors for exactly that reason), detect and route around SERP blocking without misfiring on Google's own anti-bot JavaScript, and rotate proxies to avoid IP-level blocks — all before you've extracted a single phone number. Maintaining that pipeline, plus paying for reliable SERP-capable proxy infrastructure, is ongoing work that a maintained actor absorbs for you.

How to use Instagram Phone Number Scraper

Instagram Phone Number Scraper runs on the Apify platform — there's no separate signup or API key beyond your Apify account.

  1. Open the actor's page in Apify Console (or find it via the Apify API/CLI).
  2. Fill in keywords — the required list of search terms, usernames, or profile URLs.
  3. Select country — the required dial code used to search and validate numbers.
  4. Optionally set maxPhoneNumbers (default 20) and a custom proxyConfiguration.
  5. Start the run and export the dataset as JSON, CSV, or Excel.

How to scale to bulk Instagram phone number extraction

keywords accepts an array, so one run already covers many terms in bulk — each keyword is processed in sequence up to maxPhoneNumbers. The schema has no multi-country input; country is a single value per run, since the dial code drives both the query and the number validation. To cover several countries, loop the actor with a different country value per run (via the API or a scheduled task) rather than expecting one run to span regions.

What can you do with Instagram phone number data?

  • A sales development rep building an outreach list uses phone_number and keyword to compile region-specific contact lists for a target niche before dialing.
  • A lead-generation agency filters by country and dial_code to hand clients phone leads scoped to a specific market.
  • A local-business marketer runs a city or industry keyword to find Instagram accounts that already advertise a contact number publicly.
  • A B2B prospecting team combines url with title/description to verify the business context behind a number before reaching out.
  • An AI agent building a lead-enrichment pipeline feeds the JSON rows directly into a CRM-matching or outreach-drafting LLM step — no parsing layer needed since every field is already a typed string.

How does Instagram Phone Number Scraper handle rate limits and blocking?

Every Google request goes through Apify's GOOGLE_SERP proxy group and rotates a fresh proxy URL on each retry attempt. Requests use randomized browser user-agents and accept-language headers, and a randomized jitter delay is inserted before every request. If a response looks blocked — a 429/503/4xx status, a redirect to Google's /sorry interstitial, or known captcha-page text with no real result markup present — the actor retries with a new proxy URL and an exponential backoff (starting at 2 seconds, multiplying by 1.8 up to a 20-second cap), for up to 5 attempts per page. If a keyword produces 3 consecutive empty or failed pages, the actor stops that keyword and moves to the next rather than retrying indefinitely. It does not solve CAPTCHAs.

⬇️ Input

ParameterRequiredTypeDescriptionExample Value
keywordsYesarrayKeywords, Instagram usernames, or profile URLs to search for.["marketing", "founder"]
countryYesstring (enum)Country to search for; the dial code normalizes and filters phone numbers. Default: United Kingdom (+44)."United Kingdom (+44)"
platformNostring (enum: Instagram)Target platform for the site: search. Default: Instagram."Instagram"
maxPhoneNumbersNointeger (1–10000)Maximum phone numbers to collect per keyword. Default: 20.20
proxyConfigurationNoobject (proxy editor)Proxy configuration; the actor always searches through the GOOGLE_SERP proxy group.{ "useApifyProxy": true }

Example input

{
"keywords": ["marketing", "founder"],
"platform": "Instagram",
"country": "United Kingdom (+44)",
"maxPhoneNumbers": 20,
"proxyConfiguration": {
"useApifyProxy": true
}
}

⬆️ Output

Each run produces typed, normalized JSON rows with a consistent 8-field schema, downloadable as JSON, CSV, or Excel from the run's dataset. Every dataset row is a billed row_result event — there are no separate free or error rows mixed in.

Example output

{
"platform": "Instagram.com",
"keyword": "marketing",
"title": "+44 7413 081142 RSA Marketing provides premium digital ...",
"description": "WhatsApp: +44 7413 081142 RSA Marketing provides premium digital marketing services, professional website development, advanced SEO ...",
"url": "https://www.instagram.com/p/DTAqEJrAsFl/",
"phone_number": "+447413081142",
"country": "United Kingdom",
"dial_code": "+44"
}

How does it work?

For each keyword, the actor builds a Google query in the form site:instagram.com "<dial code>" "<keyword>" and sends it through Apify's GOOGLE_SERP proxy, which performs the search and returns SERP HTML. It pages through results 10 at a time, parsing each page with BeautifulSoup against a list of known Google result-wrapper classes plus a generic <h3>-in-<a> fallback, so parsing keeps working as Google rotates its markup. Only results linking to instagram.com are kept, and a phone number is extracted from the title/snippet text and normalized against the selected dial code — non-matching numbers are discarded. A keyword stops once its limit is reached or after 3 consecutive empty/failed pages. Only what Google has publicly indexed is ever returned, and the 8-field output schema stays the same regardless of how Google's page layout changes.

Integrations

Instagram Phone Number Scraper works like any Apify actor — call it from your own code or connect it to no-code automation tools without managing scraping infrastructure yourself.

Calling Instagram Phone Number Scraper programmatically

import requests
API_TOKEN = "YOUR_APIFY_API_TOKEN"
ACTOR = "instagram-phone-number-scraper-pay-per-events"
resp = requests.post(
f"https://api.apify.com/v2/acts/{ACTOR}/run-sync-get-dataset-items",
params={"token": API_TOKEN},
json={
"keywords": ["marketing"],
"country": "United Kingdom (+44)",
"maxPhoneNumbers": 20,
},
)
print(resp.json())

Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request.

No-code tools (n8n, Make, LangChain)

In n8n, use the HTTP Request node pointed at the Apify run endpoint above, authenticated with your API token. In Make, the same call fits an HTTP module in any scenario. In LangChain or a custom agent, the run-sync endpoint can be wrapped as a standard HTTP tool, since the response is already typed JSON with no parsing step needed.

Scraping data that is already publicly visible — such as Google's own public search index — is generally permitted, and Instagram Phone Number Scraper only returns results Google has indexed and shown to any searcher; it never logs in or accesses private content. Phone numbers are personal data, so storage and use of any numbers you collect should have a lawful basis and follow applicable frameworks such as GDPR (EU/UK) or CCPA (California), including honoring deletion or opt-out requests. Consult legal counsel if your use case involves bulk storage of personal data.

Frequently asked questions

What Instagram phone number fields does Instagram Phone Number Scraper return?

It returns phone_number, url, title, and description as its core fields, plus keyword, platform, country, and dial_code — see the data fields section above for all 8.

Does Instagram Phone Number Scraper require an Instagram account or login?

No. It only queries Google through Apify's GOOGLE_SERP proxy and never sends a request to Instagram itself, so no Instagram login, session ID, or cookie is used.

How many Instagram phone numbers can I extract in one run?

maxPhoneNumbers caps results per keyword between 1 and 10,000 (default 20), and you can list multiple keywords in one run — total volume scales with how many keywords you provide and how many indexed matches Google actually has for each.

What happens if a keyword returns no phone numbers?

The actor keeps paging Google's results until it hits 3 consecutive empty or failed pages for that keyword, then stops and moves to the next keyword. A keyword returning nothing usually means Google has no indexed instagram.com page containing both that keyword and the dial code in visible text — not that the run failed.

Can I scrape multiple Instagram keywords at once?

Yes. keywords is an array — list as many keywords, usernames, or profile URLs as you want in a single run, and each is searched and capped by maxPhoneNumbers independently.

Does Instagram Phone Number Scraper work with Claude, ChatGPT, and other AI agent tools?

Yes, as an HTTP endpoint. Any agent framework that can call an API — including custom Claude or GPT tool integrations — can call the actor's run endpoint and receive typed JSON rows directly.

Does Instagram Phone Number Scraper return data in a format LLMs can use directly?

Yes. Output is typed, normalized JSON with the same 8 field names on every run — no HTML parsing or CSS selectors required. Pass it directly to an LLM prompt, index it into a vector store, or feed it to an agent tool.

What happens when Google changes its search result layout?

The parser already tries several known result-wrapper classes plus a generic <h3>-inside-<a> fallback, specifically so it degrades gracefully rather than breaking outright when Google rotates markup. The 8-field output schema stays stable regardless of layout changes on Google's side.

Can I use Instagram Phone Number Scraper without managing proxies or browser infrastructure?

Yes. The actor provisions and rotates Apify's GOOGLE_SERP proxy automatically — you don't configure your own proxy pool or run a browser to get results.

Which fields work best for AI training data and RAG indexing?

For RAG, index title and description — they're the free-text snippet content with the most searchable context. For structured filtering or training data, keyword, country, and dial_code are the most consistent fields across every record, and all fields return as typed string primitives.

Scraper NameWhat it extracts
Instagram Profile ScraperBio, follower/following counts, profile metadata
Instagram B2B Email ScraperEmail addresses by keyword
Instagram Followers Scraper With Bio Contact EnrichmentFollowers enriched with bio contact details
Instagram Comments Scraper With Lead EnrichmentComments enriched with lead signals
Instagram Hashtag ScraperPosts and metadata for a hashtag
Instagram Related Person ScraperProfiles related to an account

Your feedback

Found a bug or missing a field? Let us know through the Issues tab on this actor's Apify Store listing so we can take a look. Feedback like this helps keep the actor accurate as Google and Instagram continue to change.