Website Phone Number Finder ✅ $2/1k
Pricing
from $2.00 / 1,000 saved website phone results
Website Phone Number Finder ✅ $2/1k
From $2.00 / 1,000 saved phone results. Fast website phone number finder for public business phone numbers, tel links, social profiles, source URLs, and contact-page diagnostics from domains.
Pricing
from $2.00 / 1,000 saved website phone results
Rating
0.0
(0)
Developer
Hundevmode Labs
Maintained by CommunityActor stats
1
Bookmarked
3
Total users
2
Monthly active users
a day ago
Last modified
Categories
Share
Website Phone Number Finder: Scrape Phone Numbers from Websites
From $2.00 / 1,000 saved phone results on paid Apify plans. Use this website phone number finder and business phone number scraper to scan domains or website URLs and extract public phone numbers, tel: links, social profiles, source URLs, and crawl diagnostics.
This actor is built for fast domain phone number scraping. Paste a list of websites, run a shallow browserless crawl, and get one clean result per website where at least one public phone number is found. It checks the homepage or supplied URL, follows likely contact/about/legal/team pages, and saves phone-first lead records by default.
Use it when you already have domains from Google Maps, CRMs, spreadsheets, directories, search results, company databases, or lead lists and need public phone contacts from each website.
AI agent skill
Use the dedicated Website Phone Number Finder Apify agent skill when you want AI agents to normalize domain lists, run this actor through Apify, control spend with maxTotalChargeUsd, and return public website phone rows for outreach, CRM, Sheets, n8n, BI, or enrichment workflows.
Install with skills.sh-compatible agents:
npx skills add hundevmode/apify-website-phone-number-finder-agent-skill \--skill website-phone-number-finder-apify
ClawHub skill slug: website-phone-number-finder-apify.
At a glance
| Need | Use this actor for |
|---|---|
| Website phone scraping | Find public phone numbers from company websites |
| Domain phone number finder | Turn domains and URLs into structured phone lead records |
| Business phone scraper | Extract visible phone numbers and tel: links from contact pages |
| Lead generation | Enrich existing website lists with phone-ready outreach data |
| Sales enrichment | Add phones, source URLs, and social profiles to domain lists |
| CRM cleanup | Convert raw domains into normalized phone contact records |
| Agency prospecting | Scan niche website lists collected from Google Maps, directories, or search results |
| Bulk export | Download phone results as JSON, CSV, Excel, or through the Apify API |
Quick start
Start with a list of domains. The actor accepts bare domains and full URLs in the same input field.
{"domains": ["alchemist.dk","disfrutarbarcelona.com","diverxo.com"],"maxResults": 1000,"resultMode": "phonesOnly","maxPagesPerWebsite": 3,"concurrency": 100,"extractPhones": true,"extractEmails": false,"extractSocials": true,"includePersonalData": true}
Pricing
The actor uses Apify pay-per-event pricing. The primary event is website-phone-saved, charged only when a website phone result is saved to the dataset.
| Event | Free | Paid plans |
|---|---|---|
| Saved website phone result | $5.00 / 1,000 saved phone results | $2.00 / 1,000 saved phone results |
| Actor start | $0.00005 per start event | $0.00001 per start event |
Scanned websites that do not match the selected result mode are not charged as saved phone results. The actor respects Apify maxTotalChargeUsd and stops before saving more paid results than the run budget allows.
What it extracts
| Data group | Example fields |
|---|---|
| Website identity | input, url, domain, status |
| Phone numbers | phones, phoneDetails.phone, phoneDetails.sourceUrl |
| Optional emails | emails, emailDetails.email, emailDetails.type, emailDetails.sourceUrl, emailDetails.domainMatch |
| Social links | facebooks, instagrams, linkedIns, twitters, youtubes, tiktoks, socialLinks |
| Crawl diagnostics | pagesFetched, fetchedUrls, httpStatusCodes, errors, durationMs |
| Contact counts | contactSignals.phones, contactSignals.emails, contactSignals.socialProfiles, contactSignals.pagesFetched |
Phone numbers are normalized to an international-style format when possible. For example, many US 10-digit numbers are returned as +1..., while international + numbers keep their country code.
Input options
Domains or URLs
Use domains for domains and URLs. Both formats are accepted:
{"domains": ["example.com","https://example.com/contact"]}
The actor tries HTTPS, WWW, and HTTP variants when needed. For bulk phone scraping, paste one domain per row. For exact-page extraction, paste full URLs such as contact pages, locations pages, booking pages, or company profile pages.
Result mode
| Mode | Saved dataset items |
|---|---|
phonesOnly | Only websites where at least one public phone number was found. This is the default. |
contactsOnly | Websites with at least one phone, optional email, or social profile. |
allWebsites | All scanned websites, including websites where no phone number was found. |
Crawl depth and speed
| Field | What it does |
|---|---|
maxPagesPerWebsite | Number of pages to fetch per website. Default is 3. |
concurrency | Number of websites scanned in parallel. Default is 100. |
requestTimeoutSecs | Per-page timeout. Default is 5 seconds. |
sameDomainOnly | Follow only same-domain contact/about links. Social links are still extracted. |
The actor prioritizes URLs containing contact, about, team, staff, impressum, imprint, legal, privacy, reservation, booking, and similar contact-page hints.
Contact fields
| Field | What it does |
|---|---|
extractPhones | Extract phone numbers from visible text and tel: links. Keep this enabled for phone scraping. |
extractEmails | Optionally include public emails as secondary fields. Disabled by default. |
extractSocials | Extract public social media profile links. |
includePersonalData | Include personal LinkedIn URLs and person-like emails when optional email extraction is enabled. |
How it works
- Normalizes every domain or URL.
- Tries HTTPS, WWW, and HTTP variants when needed.
- Downloads HTML with a Chrome-like HTTP client optimized for high concurrency.
- Extracts phone numbers from visible text and
tel:links. - Scores internal links and follows the best contact/about/legal/team pages.
- Optionally extracts emails and social profile links.
- Applies
resultMode. - Saves one dataset item per matching website using the PPE result event.
- Writes
RUN_SUMMARYwith processed count, saved count, filters, and budget guard details.
The default path is HTTP-first and browserless for speed. It uses a Chrome-like HTTP client with high concurrency, so large domain lists can run faster than browser-first website contact scrapers.
Output example
{"input": "alchemist.dk","url": "https://alchemist.dk/","domain": "alchemist.dk","status": "found","phones": ["+4531716161"],"phoneDetails": [{"phone": "+4531716161","sourceUrl": "https://alchemist.dk/"}],"emails": [],"emailDetails": [],"facebooks": [],"instagrams": ["https://www.instagram.com/restaurantalchemist/"],"linkedIns": [],"contactSignals": {"emails": 0,"phones": 1,"socialProfiles": 1,"pagesFetched": 3},"pagesFetched": 3,"fetchedUrls": ["https://alchemist.dk/","https://alchemist.dk/contact","https://alchemist.dk/about"],"durationMs": 1240}
Run summary
Every run writes RUN_SUMMARY to the default key-value store.
Useful fields:
| Field | Meaning |
|---|---|
inputWebsites | Number of submitted websites |
processed | Number of websites scanned |
saved | Number of saved dataset items |
filteredOut | Websites scanned but not saved due to result mode |
failed | Websites that could not be fetched |
chargeLimitReached | Whether Apify PPE budget stopped the run |
budget.remainingItems | PPE budget guard estimate before saving |
exhaustionReason | target_reached, input_exhausted, or charge_limit_reached |
Per-website errors are stored in the item and run summary. The actor is designed to finish successfully and report failed websites in RUN_SUMMARY instead of failing the whole run because one domain is slow, invalid, or blocked.
API usage
curl -X POST "https://api.apify.com/v2/acts/x_guru~website-phone-number-finder/runs?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"domains": ["alchemist.dk", "disfrutarbarcelona.com"],"resultMode": "phonesOnly","maxPagesPerWebsite": 3,"concurrency": 100,"extractPhones": true,"extractEmails": false,"extractSocials": true}'
Tips
- Use
phonesOnlyfor paid phone lead extraction and website phone scraping. - Use
contactsOnlyif social profiles or optional emails are useful even when no phone number is found. - Increase
maxPagesPerWebsiteto 5-10 for sites where phones are hidden on locations, booking, contact, legal, or imprint pages. - Keep
requestTimeoutSecslow for large batches so slow websites do not block throughput. - Set an Apify maximum cost per run when processing very large domain lists.
- Paste full contact-page URLs when you already know the exact page that contains phone numbers.
Common searches this actor covers
- website phone number finder
- website phone scraper
- domain phone number finder
- business phone number scraper
- company phone finder
- phone number scraper
- phone scraper for lead generation
- website contact phone extractor