Website Contact Details Scraper (Emails, Phones, Socials) avatar

Website Contact Details Scraper (Emails, Phones, Socials)

Pricing

from $1.40 / 1,000 website scrapeds

Go to Apify Store
Website Contact Details Scraper (Emails, Phones, Socials)

Website Contact Details Scraper (Emails, Phones, Socials)

Paste a list of websites or domains and get emails, phone numbers and social profiles (LinkedIn, Facebook, Instagram, X, YouTube, TikTok, WhatsApp, Telegram) from the home, contact and about pages. One row per website. Export to Excel, CSV or JSON.

Pricing

from $1.40 / 1,000 website scrapeds

Rating

0.0

(0)

Developer

Julio Barcellos Rangel

Julio Barcellos Rangel

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 hours ago

Last modified

Share

This website contact details scraper takes a list of websites or domains and returns the emails, phone numbers and social profile links it finds on each one: LinkedIn, Facebook, Instagram, X (Twitter), YouTube, TikTok, Pinterest, GitHub, WhatsApp and Telegram. It is made for sales teams, marketers, agencies and data teams who need to enrich a lead list. Use it as an email extractor for websites or to find the social media links of a list of companies, with one row per website, ready to export to Excel or CSV.

What does Website Contact Details Scraper do?

For every website in your list, the robot:

  1. Loads the home page. If you typed only a domain such as apify.com, it adds https:// for you.
  2. Reads the links on the page and follows the ones on the same website that look like contact pages: URLs with words such as contact, kontakt, contato, contacto, about, sobre, team, equipe, impressum, imprint, legal, support, suporte, fale or quem-somos.
  3. If the home page has none of those links, it visits other internal pages instead.
  4. Stops when it reaches Max pages per website (5 by default, up to 30).
  5. Collects emails from the page text and from mailto: links, phone numbers from click-to-call (tel:) links, and links to social profiles.
  6. Merges the results of all pages, removes duplicates and puts emails on the website's own domain first.

It accepts bare domains (stripe.com), full URLs (https://www.basecamp.com) and subdomains. You can paste hundreds of websites at once; repeated entries are removed, and five websites are processed at the same time.

Simple email obfuscation is decoded, for example name [at] domain [dot] com, name (at) domain (dot) com or HTML codes like @. Addresses that are clearly not real contacts are dropped: image file names ending in .png or .jpg, placeholders such as example@, email@, your@, user@ or test@, @example. and @domain. addresses, and technical addresses of services such as Sentry and Wix.

Social links are cleaned too: http becomes https, the host is unified (for example twitter.com becomes x.com and br.linkedin.com becomes www.linkedin.com), trailing slashes are removed, and the same profile is kept only once. Share buttons, login pages, posts, reels and similar non-profile links are ignored.

What data can you extract?

FieldWhat it meansExample
inputThe website exactly as you entered itrdstation.com
domainHost name without www.rdstation.com
urlStart URL that was loaded (with https:// added if missing)https://rdstation.com
emailsEmails found, own-domain addresses first["contato@rdstation.com"]
phonesPhone numbers from click-to-call links, digits only (with + when the link has it)["+442073243700"]
linkedInLinkedIn company, school or profile links["https://www.linkedin.com/company/rd-station"]
facebookFacebook page links["https://www.facebook.com/ResultadosDigitais"]
instagramInstagram profile links["https://www.instagram.com/rdstation"]
twitterX (Twitter) profile links, as x.com["https://x.com/rd_station"]
youtubeYouTube channel links["https://www.youtube.com/channel/UC5lPKvmw6-DFya_qreisENQ"]
tiktokTikTok profile links["https://www.tiktok.com/@dentalspeed"]
pinterestPinterest profile links["https://br.pinterest.com/dentalspeedbr"]
githubGitHub account links["https://github.com/stripe"]
whatsappWhatsApp links (wa.me or api.whatsapp.com/send)["https://api.whatsapp.com/send/?phone=…"]
telegramTelegram links (t.me or telegram.me)["https://t.me/…"]
pagesCrawledHow many pages of the website were loaded3
scrapedAtWhen the row was collected (UTC)2026-10-09T20:17:44.525Z
errorOnly on error rows: what went wrongWebsite could not be loaded

Every contact field is a list. When nothing is found, the list is empty ([]), so the columns stay the same for every row.

How to use Website Contact Details Scraper

  1. Open the robot in Apify Console and go to the Input tab.
  2. Paste your domains or URLs in Websites, one per line. A column copied from a spreadsheet, a CRM export or a Google Maps list works well.
  3. Optional: raise Max pages per website to look at more pages on each site. More pages can find more contacts but take longer.
  4. Click Start and wait for the run to finish.
  5. Open the Output tab to see the Contacts table, then export the data as JSON, CSV, Excel or HTML.
  6. Optional: save the input as a task and connect it to your CRM or a spreadsheet through an integration.

Input

FieldTypeDefaultWhat it does
websitesarray of strings (required)["apify.com"]Domains or URLs, one per entry.
maxPagesPerSiteinteger5Pages loaded per website, from 1 to 30: the home page plus contact, about, team and imprint pages.
proxyobject{"useApifyProxy": true}Apify Proxy settings. The default works for most runs.

Example input:

{
"websites": ["apify.com", "https://www.basecamp.com", "stripe.com"],
"maxPagesPerSite": 5,
"proxy": { "useApifyProxy": true }
}

Output example

One real row from the latest run:

{
"input": "rdstation.com",
"domain": "rdstation.com",
"url": "https://rdstation.com",
"emails": ["contato@rdstation.com"],
"phones": [],
"linkedIn": ["https://www.linkedin.com/company/rd-station"],
"facebook": ["https://www.facebook.com/ResultadosDigitais"],
"instagram": ["https://www.instagram.com/rdstation"],
"twitter": ["https://x.com/rd_station"],
"youtube": ["https://www.youtube.com/channel/UC5lPKvmw6-DFya_qreisENQ"],
"tiktok": [],
"pinterest": [],
"github": [],
"whatsapp": [],
"telegram": [],
"pagesCrawled": 3,
"scrapedAt": "2026-10-09T20:17:44.525Z"
}

When none of the pages of a website can be loaded, you get an error row such as {"input": "thisdomaindoesnotexist-xyz123.com", "domain": "thisdomaindoesnotexist-xyz123.com", "error": "Website could not be loaded", "scrapedAt": "2026-10-09T20:15:20.572Z"}.

How much does it cost?

The robot uses pay per event pricing: you pay $2.00 per 1,000 websites ($0.002 per website returned) on the Free plan. Platform usage is included in the price, so there is no separate charge for compute or proxy. The price is per website, not per page, so raising Max pages per website does not change what you pay.

Apify planPrice per 1,000 websites
Free$2.00
Bronze (10% off)$1.80
Silver (20% off)$1.60
Gold and higher (30% off)$1.40

Worked examples on the Free plan:

  • 100 websites from a lead list: $0.20.
  • 5,000 websites: $10.00.
  • 10,000 websites: $20.00 (or $14.00 on Gold).

What is not charged: error rows, that is websites where no page could be loaded and entries that are not a valid URL. A website that loads is charged even if no email, phone or social link was found on it.

Use cases

  • Lead enrichment: add emails and social profiles to a list of company websites from a directory, a trade show or a CRM export.
  • Google Maps lead lists: take the website column of a Google Maps export and get the emails behind it.
  • Social media research: find the LinkedIn, Instagram and TikTok accounts of a list of brands.
  • WhatsApp outreach lists: check which suppliers, stores or partners offer a WhatsApp chat link.
  • CRM clean-up: fill missing emails and phone numbers, and spot websites that no longer load.
  • Agency prospecting: find businesses with no social profiles linked on their site.
  • Partnership and PR outreach: collect the contact and press emails of companies in a niche.

Tips and limits

  • Phones come from click-to-call links only. A number written as plain text, without a tel: link, is not collected.
  • No browser. The robot reads the HTML each server returns. Contacts that only appear after JavaScript runs in a browser can be missed.
  • Same website only. Only pages on the same host (with or without www.) are followed. Links to other domains or subdomains are not visited, and PDFs, images, ZIP and video files are skipped.
  • Every matching link counts. Social fields list every profile link found on the pages, so a site can include a partner's or a vendor's profile. whatsapp can also hold share-button links (api.whatsapp.com/send?text=…) that carry no phone number. Review the lists before outreach.
  • Emails are collected, not verified. The robot returns addresses published on the site. It does not check that a mailbox exists, and an address used as an example in the page text can be picked up too.
  • Retries: each page is tried up to 3 times with a 25-second timeout. A page that returns 404 is not retried.
  • Errors do not stop the run. A website that cannot be loaded gets an error row and the run moves on.

Use it from the API, Python or JavaScript

JavaScript (Node.js) with the official apify-client package:

const { ApifyClient } = require('apify-client');
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const input = { websites: ['apify.com', 'stripe.com'], maxPagesPerSite: 5 };
const run = await client.actor('juliob.rangel/website-contact-details-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python with the official apify-client package:

from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')
input = {'websites': ['https://www.basecamp.com', 'rdstation.com'], 'maxPagesPerSite': 8}
run = client.actor('juliob.rangel/website-contact-details-scraper').call(run_input=input)
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

You can also connect the robot to Make, Zapier or n8n, export results to Google Sheets, send them to a webhook when a run finishes, or let AI agents call it through the Apify MCP server.

FAQ

Do I need a login or cookies? No. The robot only reads public pages of the websites you give it.

Can I export the results to Excel or CSV? Yes. Download the dataset as JSON, CSV, Excel or HTML from the Output tab, or read it through the API.

How many websites can I process in one run? Hundreds at once. The robot processes five websites at a time, so large lists take longer but need no special setup.

Why are the phones empty for some websites? Phones are only taken from click-to-call (tel:) links. Many websites show their number as plain text, and those numbers are not collected.

Why did I get "Website could not be loaded"? None of the pages answered with an HTML page: the domain may be down or wrong, the site may block automated visits, or it returned an error. These rows are free.

Does it verify the emails? No. It returns the addresses published on the website. Use an email verification tool before sending campaigns.

Is it legal to scrape contact details from websites? The robot only collects publicly available data. You are responsible for complying with each site's terms and with privacy and anti-spam laws such as GDPR, LGPD and CAN-SPAM. Personal data, for example the email of a named employee, needs a legitimate reason to be processed.


Extrator de Contatos de Sites (PT-BR)

Cole uma lista de sites ou domínios e receba e-mails, telefones e redes sociais (LinkedIn, Facebook, Instagram, X, YouTube, TikTok, WhatsApp, Telegram) encontrados na página inicial e nas páginas de contato e "sobre". Uma linha por site. Você paga só por site retornado.