Website Contact Extractor avatar
Website Contact Extractor

Pricing

Pay per event

Go to Apify Store
Website Contact Extractor

Website Contact Extractor

The cheapest contact scraper on Apify. Extract emails, phones, company names, addresses & 15+ social profiles at just $0.001/page - 50% less than competitors. Smart crawling auto-finds contact pages, bypasses Cloudflare protection, and supports sitemap discovery.

Pricing

Pay per event

Rating

5.0

(2)

Developer

Better Devs Scrape

Better Devs Scrape

Maintained by Community

Actor stats

2

Bookmarked

9

Total users

4

Monthly active users

3 hours ago

Last modified

Share

๐Ÿ“‡ Contact Details Extractor - Extract Emails, Phone Numbers & Social Media From Any Website

The most affordable contact scraper on Apify. Extract emails, phone numbers, and 25+ social media profiles from any website at just $0.001 per page - 50% cheaper than alternatives.

๐Ÿš€ Dead simple: Paste URLs, click Run, get contacts.


๐Ÿ† Why Use This Contact Scraper?

FeatureContact Details ExtractorAlternatives
๐Ÿ’ฐ Price per page$0.001$0.002+
๐ŸŒ Social platforms25+ platformsLimited
๐Ÿ›ก๏ธ Cloudflare bypassโœ… Built-in decodingโŒ Often fails
๐ŸŽฏ Smart crawlingโœ… Auto-prioritizes contact pagesโŒ Basic crawling
๐Ÿงน URL filteringโœ… Skips parked domains, social, directoriesโŒ Wastes budget
โšก Setup complexityPaste URL, click RunComplex configs

๐Ÿ“Š What Data Can You Extract?

CategoryData Types
๐Ÿ“ง EmailsAll email addresses (mailto: links, text, Cloudflare-protected)
๐Ÿ“ž Phone NumbersPhone numbers (tel: links, international formats, validated)
๐Ÿ’ผ LinkedInCompany pages, personal profiles
๐Ÿฆ Twitter / XProfiles, handles
๐Ÿ“ธ InstagramProfiles
๐Ÿ‘ฅ FacebookPages, profiles
๐ŸŽฌ YouTubeChannels, custom URLs
๐ŸŽต TikTokProfiles
๐Ÿ“Œ PinterestProfiles, boards
๐ŸŽฎ DiscordServer invites
โœˆ๏ธ TelegramChannels, groups
๐Ÿค– RedditSubreddits, user profiles
๐Ÿ’ฌ WhatsAppClick-to-chat links
๐Ÿ‘ป SnapchatProfiles
๐Ÿงต ThreadsProfiles
๐Ÿฆ‹ BlueskyProfiles
๐Ÿ˜ MastodonProfiles (multiple instances)
๐Ÿ™ GitHubProfiles, organizations
๐Ÿ“ MediumAuthor profiles, publications
๐Ÿ“ฐ SubstackNewsletter profiles
๐ŸŽฎ TwitchChannels
๐ŸŽง SpotifyArtists, podcasts, users
๐ŸŽฅ VimeoChannels, profiles
๐Ÿ€ DribbbleDesigner profiles
๐ŸŽจ BehanceCreative portfolios
๐ŸŽต SoundCloudArtist profiles

๐Ÿ†• Contact Scraper Features

๐Ÿงน Smart URL Filtering

Your crawl budget goes further with intelligent URL filtering:

  • Parked domains - Detects 30+ parking services and "domain for sale" pages
  • Social media - Skips Facebook login walls, LinkedIn gates, and 35+ social platforms
  • Directory sites - Filters Yelp, Yellow Pages, and other listing sites
  • Parking redirects - Detects when start URLs redirect to parking pages
  • End-of-run summary shows exactly what was filtered and why

๐Ÿข Company Name Extraction

Automatically extracts the company/business name from:

  • Open Graph meta tags (og:site_name)
  • Schema.org Organization data
  • Page title (cleaned)
  • Copyright notices (heuristics mode)

๐Ÿ“ Address Extraction

Extracts physical addresses with parsed components:

  • US addresses (ZIP codes)
  • UK addresses (postcodes)
  • Canadian addresses (postal codes)
  • Schema.org PostalAddress data

๐Ÿค– Auto Browser Mode

Set browserMode: "auto" to let us detect when a page needs JavaScript rendering:

  • Detects React, Vue, Angular, Next.js apps
  • Auto-retries with browser if no contacts found
  • Only charges browser rate when actually used

๐Ÿ—บ๏ธ Sitemap Crawling

Enable useSitemap: true to discover URLs via sitemap.xml:

  • Auto-detects sitemap location
  • Supports sitemap index files
  • More efficient than link crawling

โš™๏ธ How to Scrape Contact Details from Any Website

1๏ธโƒฃ Paste your URLs (websites, landing pages, directories)
2๏ธโƒฃ Set crawl depth (how many pages per site)
3๏ธโƒฃ Click "Start" and get clean, structured data

The scraper automatically:

  • ๐ŸŽฏ Finds contact pages - Prioritizes /contact, /about, /team, /connect pages
  • ๐Ÿ”“ Decodes protected emails - Bypasses Cloudflare email obfuscation
  • โœ… Validates phone numbers - Filters out dates, IPs, and false positives
  • ๐Ÿ”„ Merges contacts per domain - One clean record per website

๐Ÿ“ฅ Contact Scraper Input Options

{
"startUrls": [
{ "url": "https://example.com" },
{ "url": "https://another-site.com/contact" }
],
"maxPagesPerStartUrl": 10,
"maxDepth": 2,
"sameDomain": true,
"mergeContacts": true,
"browserMode": "off",
"useResidentialProxy": false
}

๐Ÿ“‹ Input Parameters Explained

ParameterTypeDefaultDescription
startUrlsarrayrequiredList of websites to scrape
maxPagesPerStartUrlnumber20Maximum pages to crawl per website
maxDepthnumber2How deep to follow links (0 = only start URL)
sameDomainbooleantrueStay on the same domain
mergeContactsbooleantrueCombine all contacts per domain into one record
useResidentialProxybooleanfalseUse residential proxies for blocked sites (adds $0.001/page)
companyNameMethodstring"heuristics""meta", "heuristics", or "off"
addressExtractionbooleantrueExtract physical addresses
browserModestring"off""off", "on", or "auto"
useSitemapbooleanfalseUse sitemap.xml for URL discovery
allowCrossDomainRedirectsbooleanfalseAllow redirects to different domains (disabled by default to save budget)
sitemapUrlstringnullCustom sitemap URL (optional)

๐Ÿ“ค What Contact Data Can You Extract?

Each result contains all discovered contact information for a domain:

{
"originalStartUrl": "https://example.com",
"domain": "example.com",
"companyName": "Example Corp",
"addresses": [
{
"full": "123 Main Street, San Francisco, CA 94102",
"street": "123 Main Street",
"city": "San Francisco",
"state": "CA",
"zip": "94102",
"country": "USA"
}
],
"scrapedUrls": [
"https://example.com/",
"https://example.com/contact",
"https://example.com/about"
],
"emails": [
"hello@example.com",
"sales@example.com"
],
"phones": [
"+1-555-123-4567"
],
"phonesUncertain": [
"555-123-4567"
],
"linkedIns": [
"https://linkedin.com/company/example"
],
"twitters": [
"https://twitter.com/example"
],
"instagrams": [
"https://instagram.com/example"
],
"facebooks": [
"https://facebook.com/example"
],
"youtubes": [],
"tiktoks": [],
"pinterests": [],
"discords": [],
"snapchats": [],
"threads": [],
"telegrams": [],
"reddits": [],
"whatsapps": [],
"blueskys": [],
"mastodons": [],
"githubs": [],
"mediums": [],
"substacks": [],
"twitchs": [],
"spotifys": [],
"vimeos": [],
"dribbbles": [],
"behances": [],
"soundclouds": []
}

๐Ÿ“– Understanding the Output

  • ๐Ÿ“ง emails: Confirmed email addresses from mailto: links
  • ๐Ÿ“ž phones: Confirmed phone numbers from tel: links
  • โ“ phonesUncertain: Phone patterns found in text (may include false positives)
  • ๐ŸŒ Social arrays: Direct links to social media profiles

๐Ÿ’ฐ How Much Does It Cost to Scrape Contact Details?

This Actor uses Pay-Per-Event pricing. You only pay for pages actually scraped.

EventCost
๐Ÿ“„ Page scraped (HTTP)$0.001
๐ŸŒ Page scraped (Browser)$0.002
๐Ÿ  Residential proxy used+$0.001
โญ Premium add-ons (SEO/Forms/Business)+$0.001/page each

๐Ÿ’ต Cost Examples

TaskPagesModeTotal Cost
Scrape 100 company websites (1 page each)100HTTP$0.10
Deep crawl 10 sites (20 pages each)200HTTP$0.20
Scrape 50 JS-heavy sites50Browser$0.10
Extract contacts from 1,000 landing pages1,000HTTP$1.00

๐ŸŽ‰ Compare: Competitors charge $0.002+ per page. You save 50% on every scrape!


Premium Features

Optional paid add-ons that extract additional data. You only pay when data is found.

FeatureWhat it extractsPrice
SEO DataMeta tags, Open Graph, Twitter cards, h1 headings, keywords, robots, schema type+$0.001/page
Contact FormsForm URLs, types (contact, quote, newsletter), field names+$0.001/page
Business InfoOpening hours, business type, employee count, price range, payment methods, service areas+$0.001/page

Enable Premium Features

{
"startUrls": [{ "url": "https://example.com" }],
"extractSeo": true,
"extractForms": true,
"extractBusinessInfo": true
}

Premium Output Example

{
"domain": "example.com",
"emails": ["hello@example.com"],
"seo": {
"title": "Example Corp - Best Widgets",
"description": "We sell the best widgets",
"ogImage": "https://example.com/og.jpg",
"h1": ["Welcome to Example Corp"],
"schemaType": "Organization"
},
"forms": [
{
"url": "https://example.com/contact",
"type": "contact",
"fields": ["name", "email", "message"]
}
],
"businessInfo": {
"type": "LocalBusiness",
"foundedYear": 2015,
"employeeCount": "11-50",
"openingHours": ["Monday, Tuesday 09:00-17:00"]
}
}

๐ŸŽฏ Contact Scraping Use Cases

๐Ÿ“ˆ Lead Generation

Scrape business directories, industry listings, or competitor websites to build targeted lead lists with verified contact information.

๐Ÿ’ผ Sales Prospecting

Extract email addresses and phone numbers from company websites to fuel your outreach campaigns.

๐Ÿ” Competitor Analysis

Discover which social platforms your competitors use and how they structure their contact information.

๐Ÿ“Š Data Enrichment

Enhance your existing company database with social media links and additional contact methods.

๐ŸŒ Market Research

Collect contact data from websites in specific industries or geographic regions.


๐Ÿ’ก Tips for Scraping Contact Information

๐Ÿงช Start Small

Begin with maxPagesPerStartUrl: 5 to test on a few sites before scaling up.

๐ŸŽฏ Target Contact Pages

For single-page extractions, append /contact or /about to your URLs:

{
"startUrls": [{ "url": "https://example.com/contact" }],
"maxPagesPerStartUrl": 1,
"maxDepth": 0
}

๐ŸŒ Handle JavaScript Sites

If you're not finding contacts on modern React/Vue/Angular sites, enable browser mode:

{
"browserMode": "on"
}

โ“ Check Uncertain Phones

The phonesUncertain field contains phone-like patterns found in text. Review these manually as they may include false positives.

๐Ÿ”„ Merge for Clean Data

Keep mergeContacts: true (default) to get one record per domain with all contacts combined.


โ“ Frequently Asked Questions

How is this different from other contact scrapers?

We focus on simplicity and value. Paste URLs, click Run, get data. No complex configuration. And at $0.001/page, we're 50% cheaper than alternatives.

Does it work on Cloudflare-protected sites?

Yes! โœ… We automatically decode Cloudflare email obfuscation to extract the real email addresses.

What about JavaScript-heavy websites?

Set browserMode: "on" to render JavaScript. This uses a real browser and costs $0.002/page total. You can also use browserMode: "auto" for automatic detection.

Can I scrape thousands of sites?

Absolutely! ๐Ÿš€ The Actor is designed for scale. Set your maxPagesPerStartUrl and let it run. Pay-per-event means you only pay for what you use.

Why are some phone numbers in "phonesUncertain"?

Phones from tel: links are 100% confirmed and go to phones. Phone patterns found in regular text go to phonesUncertain since they might be order numbers, dates, or other numeric data.

Do you extract personal data?

We only extract publicly visible contact information from websites. No scraping of private data, social media DMs, or protected content.

Yes, scraping publicly available business contact information is generally legal. See our Legal & Compliance section for details on responsible use.

When am I charged for premium features?

Only when data is found. If you enable SEO extraction but a page has no meta tags, you won't be charged for that page's SEO extraction.


๐Ÿ”Œ How to Integrate Scraped Contact Data

๐Ÿ“ฆ Export Options

  • JSON - Full structured data
  • CSV - Spreadsheet-ready format
  • Excel - Direct download

๐Ÿ”— API Access

Use the Apify API to run this Actor programmatically:

Invoke-RestMethod -Uri "https://api.apify.com/v2/acts/betterdevsscrape~contact-details-extractor/runs" `
-Method POST `
-Headers @{ "Authorization" = "Bearer YOUR_API_TOKEN"; "Content-Type" = "application/json" } `
-Body '{ "startUrls": [{ "url": "https://example.com" }], "maxPagesPerStartUrl": 10 }'

๐Ÿช Webhooks

Configure webhooks to receive results automatically when the scrape completes.

๐Ÿ”„ Integrations

Connect via Zapier, Make (Integromat), or any platform that supports REST APIs.


Web scraping publicly available data is generally legal. This Actor extracts only publicly visible contact information that businesses choose to display on their websites.

Our scraper is ethical and does not extract any private user data, such as personal emails from social media profiles, private messages, or data behind login walls. It only extracts what businesses have chosen to share publicly on their websites.

However, you should be aware that your results could contain personal data. Personal data is protected by GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so.

Users are responsible for:

  • โœ… Complying with applicable data protection laws (GDPR, CCPA, etc.)
  • โœ… Respecting website terms of service
  • โœ… Using extracted data ethically and legally
  • โœ… Obtaining necessary consents before contacting individuals

If you're unsure whether your use case is legitimate, consult your lawyers. You can also read Apify's blog post on the legality of web scraping.


๐Ÿ’ฌ Support & Feedback

  • ๐Ÿ› Issues? Open a GitHub issue or contact us through Apify
  • ๐Ÿ’ก Feature requests? We'd love to hear what you need
  • โ“ Questions? Check the FAQ above or reach out

๐Ÿงช Contact Scraping Examples

Basic: Scrape one website

{
"startUrls": [{ "url": "https://example.com" }]
}

Extract from contact page only

{
"startUrls": [{ "url": "https://example.com/contact" }],
"maxPagesPerStartUrl": 1,
"maxDepth": 0
}

Deep crawl with browser for JS sites

{
"startUrls": [{ "url": "https://react-app.com" }],
"maxPagesPerStartUrl": 50,
"maxDepth": 3,
"browserMode": "on"
}

Use sitemap for efficient crawling

{
"startUrls": [{ "url": "https://example.com" }],
"useSitemap": true,
"maxPagesPerStartUrl": 100
}

Scrape blocked sites with residential proxy

{
"startUrls": [{ "url": "https://blocked-site.com" }],
"useResidentialProxy": true
}

Bulk scraping multiple sites

{
"startUrls": [
{ "url": "https://company1.com" },
{ "url": "https://company2.com" },
{ "url": "https://company3.com" }
],
"maxPagesPerStartUrl": 5,
"maxDepth": 1
}

Built with โค๏ธ by BetterDevsScrape | View on Apify Store