Instagram Phone Number Scraper
Pricing
$19.99/month + usage
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
Maintained by CommunityActor stats
1
Bookmarked
347
Total users
22
Monthly active users
16 hours
Issues response
5 days ago
Last modified
Categories
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 Category | Publicly Available (Google's index) | Restricted (Instagram login) |
|---|---|---|
| Phone number in a public snippet | Yes, if indexed | Needs a logged-in profile visit |
| Result title and snippet text | Yes | — |
| Instagram post/profile URL | Yes | — |
| Keyword/dial-code match | Yes | — |
| Bio, follower count, verified badge | No — not fetched | Needs an authenticated visit |
| Stories, DMs, private posts | No | Login, 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 Name | Description |
|---|---|
platform | Platform label used for the search (e.g. Instagram.com). |
keyword | The keyword, username, or URL from your input that produced this result. |
title | The title of the matching Google search result. |
description | The Google snippet text the phone number was extracted from. |
url | The instagram.com URL of the matching result. |
phone_number | The extracted phone number, normalized to start with the selected country's dial code. |
country | The country name selected for the run. |
dial_code | The dial code used to build the query and validate the number. |
Search & match fields
platform— which site thesite:query targetedkeyword— the input term that matchedcountry/dial_code— the region used to build and validate the query
Extracted result fields
title— Google's result headlinedescription— the snippet the phone number was pulled fromurl— the Instagram page Google linked tophone_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.
- Open the actor's page in Apify Console (or find it via the Apify API/CLI).
- Fill in
keywords— the required list of search terms, usernames, or profile URLs. - Select
country— the required dial code used to search and validate numbers. - Optionally set
maxPhoneNumbers(default 20) and a customproxyConfiguration. - 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_numberandkeywordto compile region-specific contact lists for a target niche before dialing. - A lead-generation agency filters by
countryanddial_codeto 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
urlwithtitle/descriptionto 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
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
keywords | Yes | array | Keywords, Instagram usernames, or profile URLs to search for. | ["marketing", "founder"] |
country | Yes | string (enum) | Country to search for; the dial code normalizes and filters phone numbers. Default: United Kingdom (+44). | "United Kingdom (+44)" |
platform | No | string (enum: Instagram) | Target platform for the site: search. Default: Instagram. | "Instagram" |
maxPhoneNumbers | No | integer (1–10000) | Maximum phone numbers to collect per keyword. Default: 20. | 20 |
proxyConfiguration | No | object (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 requestsAPI_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.
Is it legal to scrape Instagram phone numbers?
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.
Related scrapers
| Scraper Name | What it extracts |
|---|---|
| Instagram Profile Scraper | Bio, follower/following counts, profile metadata |
| Instagram B2B Email Scraper | Email addresses by keyword |
| Instagram Followers Scraper With Bio Contact Enrichment | Followers enriched with bio contact details |
| Instagram Comments Scraper With Lead Enrichment | Comments enriched with lead signals |
| Instagram Hashtag Scraper | Posts and metadata for a hashtag |
| Instagram Related Person Scraper | Profiles 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.