Website Contact Extractor
Pricing
Pay per event
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
Actor stats
2
Bookmarked
9
Total users
4
Monthly active users
3 hours ago
Last modified
Categories
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?
| Feature | Contact Details Extractor | Alternatives |
|---|---|---|
| ๐ฐ Price per page | $0.001 | $0.002+ |
| ๐ Social platforms | 25+ platforms | Limited |
| ๐ก๏ธ 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 complexity | Paste URL, click Run | Complex configs |
๐ What Data Can You Extract?
| Category | Data Types |
|---|---|
| ๐ง Emails | All email addresses (mailto: links, text, Cloudflare-protected) |
| ๐ Phone Numbers | Phone numbers (tel: links, international formats, validated) |
| ๐ผ LinkedIn | Company pages, personal profiles |
| ๐ฆ Twitter / X | Profiles, handles |
| ๐ธ Instagram | Profiles |
| ๐ฅ Facebook | Pages, profiles |
| ๐ฌ YouTube | Channels, custom URLs |
| ๐ต TikTok | Profiles |
| ๐ Pinterest | Profiles, boards |
| ๐ฎ Discord | Server invites |
| โ๏ธ Telegram | Channels, groups |
| ๐ค Reddit | Subreddits, user profiles |
| ๐ฌ WhatsApp | Click-to-chat links |
| ๐ป Snapchat | Profiles |
| ๐งต Threads | Profiles |
| ๐ฆ Bluesky | Profiles |
| ๐ Mastodon | Profiles (multiple instances) |
| ๐ GitHub | Profiles, organizations |
| ๐ Medium | Author profiles, publications |
| ๐ฐ Substack | Newsletter profiles |
| ๐ฎ Twitch | Channels |
| ๐ง Spotify | Artists, podcasts, users |
| ๐ฅ Vimeo | Channels, profiles |
| ๐ Dribbble | Designer profiles |
| ๐จ Behance | Creative portfolios |
| ๐ต SoundCloud | Artist 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
| Parameter | Type | Default | Description |
|---|---|---|---|
startUrls | array | required | List of websites to scrape |
maxPagesPerStartUrl | number | 20 | Maximum pages to crawl per website |
maxDepth | number | 2 | How deep to follow links (0 = only start URL) |
sameDomain | boolean | true | Stay on the same domain |
mergeContacts | boolean | true | Combine all contacts per domain into one record |
useResidentialProxy | boolean | false | Use residential proxies for blocked sites (adds $0.001/page) |
companyNameMethod | string | "heuristics" | "meta", "heuristics", or "off" |
addressExtraction | boolean | true | Extract physical addresses |
browserMode | string | "off" | "off", "on", or "auto" |
useSitemap | boolean | false | Use sitemap.xml for URL discovery |
allowCrossDomainRedirects | boolean | false | Allow redirects to different domains (disabled by default to save budget) |
sitemapUrl | string | null | Custom 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.
| Event | Cost |
|---|---|
| ๐ 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
| Task | Pages | Mode | Total Cost |
|---|---|---|---|
| Scrape 100 company websites (1 page each) | 100 | HTTP | $0.10 |
| Deep crawl 10 sites (20 pages each) | 200 | HTTP | $0.20 |
| Scrape 50 JS-heavy sites | 50 | Browser | $0.10 |
| Extract contacts from 1,000 landing pages | 1,000 | HTTP | $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.
| Feature | What it extracts | Price |
|---|---|---|
| SEO Data | Meta tags, Open Graph, Twitter cards, h1 headings, keywords, robots, schema type | +$0.001/page |
| Contact Forms | Form URLs, types (contact, quote, newsletter), field names | +$0.001/page |
| Business Info | Opening 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.
Is it legal to scrape websites for contact information?
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.
โ๏ธ Is It Legal to Scrape Contact Details?
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