Website Contact Scraper avatar

Website Contact Scraper

Pricing

from $2.00 / 1,000 website with contacts

Go to Apify Store
Website Contact Scraper

Website Contact Scraper

Extract emails, phone numbers, social media profiles and addresses from any list of websites. Finds contact, about and imprint pages automatically, filters out fake and placeholder emails, and validates every phone number. Built for lead generation, sales prospecting and CRM enrichment.

Pricing

from $2.00 / 1,000 website with contacts

Rating

0.0

(0)

Developer

Coder

Coder

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

5 days ago

Last modified

Categories

Share

Extract emails, phone numbers, social media profiles and postal addresses from any list of websites, in a clean, structured format.

Paste a list of domains or links, choose how many pages to check on each site, and export the results as JSON, CSV or Excel, or pull them through the Apify API.

What This Actor Does

  • Collects contact details from any website: emails, phone numbers, social media profiles and postal addresses
  • Finds the right pages automatically: contact, about, imprint, team, locations and more, picked from each site's own links
  • Filters out fake and useless addresses: placeholders like you@example.com, image file names, tracking and vendor emails, and no-reply inboxes
  • Validates every phone number for the website's country and returns it in international format (+14155550100)
  • Picks a main email and phone for each website, preferring the business's own general inbox, and keeps every other contact alongside
  • Finds profiles on Instagram, Facebook, LinkedIn, X (Twitter), TikTok, YouTube, Pinterest, Threads, WhatsApp and Yelp
  • Handles modern websites built with JavaScript frameworks and site builders
  • Returns one row per website, with a status that says whether contacts were found or why a website could not be checked

Best For

  • Lead generation and sales prospecting
  • Enriching CRM, spreadsheet or Google Maps business lists with emails and phone numbers
  • Finding social media profiles for a list of companies
  • Building outreach lists for agencies, recruiters and B2B sales teams
  • Cleaning and completing company databases

Input

Add one or more websites and choose how many pages to check on each.

Main input fields

  • websites One website per row. Accepts domains (bluebottlecoffee.com), links (https://www.bluebottlecoffee.com/) and any page on a site (https://www.bluebottlecoffee.com/about). Each website is checked once, even if it appears in several rows.
  • maxPagesPerSite How many pages to check on each website, including its homepage. 1 checks only the homepage. 5 adds the most useful pages, such as contact, about and imprint pages, and suits most lists. Up to 20 goes deeper, into team, location and press pages.
  • includeEmptyResults On by default: every website gets a row, with a status explaining empty ones, so the results line up with your list. Turn it off to get only websites where contact details were found.

Example input

{
"websites": [
"bluebottlecoffee.com",
"https://www.levainbakery.com/",
"dishoom.com"
],
"maxPagesPerSite": 5,
"includeEmptyResults": true
}

Output

Each dataset item is one website from your input. With includeEmptyResults turned off, only websites where contact details were found are included.

Fields

FieldDescription
domain, url, inputUrlThe website, its homepage, and the row from your input
status, statusMessagecontacts_found, no_contacts_found, website_not_found, blocked or unreachable, with a plain-language explanation
email, phoneThe main email and phone number for the website
emails, phonesEvery email and phone number found, main ones first
instagram, facebook, linkedin, twitter, tiktok, youtube, pinterest, threads, whatsapp, yelpThe website's main profile on each platform
socialLinksEvery social profile found, grouped by platform
addressesPostal addresses the website publishes, split into street, city, region, postcode and country
countryThe country the website's phone numbers were validated for
pagesScraped, scrapedUrlsHow many pages were checked, and which

Example output

{
"inputUrl": "dishoom.com",
"domain": "dishoom.com",
"url": "https://www.dishoom.com/",
"status": "contacts_found",
"statusMessage": "Contact details found.",
"email": "hello@dishoom.com",
"phone": "+441135171712",
"instagram": "https://www.instagram.com/dishoom",
"facebook": null,
"linkedin": "https://uk.linkedin.com/company/dishoom",
"twitter": "https://x.com/dishoom",
"tiktok": "https://www.tiktok.com/@dishoom_uk",
"youtube": "https://www.youtube.com/user/DishoomLondon",
"emails": [
"hello@dishoom.com",
"reservations@dishoom.com",
"team@dishoom.com",
"all-ears@dishoom.com",
"press@dishoom.com"
],
"phones": ["+441135171712", "+441218095986", "+441312026406"],
"socialLinks": {
"instagram": ["https://www.instagram.com/dishoom"],
"linkedin": ["https://uk.linkedin.com/company/dishoom"],
"twitter": ["https://x.com/dishoom"],
"tiktok": ["https://www.tiktok.com/@dishoom_uk"],
"youtube": ["https://www.youtube.com/user/DishoomLondon"]
},
"addresses": [
{
"streetAddress": "4 Derry Street",
"addressLocality": "London",
"addressCountry": "England"
}
],
"country": "GB",
"pagesScraped": 5,
"scrapedUrls": [
"https://www.dishoom.com/",
"https://www.dishoom.com/say-hello/",
"https://www.dishoom.com/locations/"
]
}

How To Use

  1. Add your websites to websites, one per row. Domains and links both work.
  2. Set maxPagesPerSite: 5 suits most lists; use 1 for a quick check or up to 20 for a deeper crawl.
  3. Run the actor and open the dataset, export it as JSON, CSV or Excel, or read it through the Apify API.
  4. Filter by status to see which websites had contact details and which could not be checked, or turn off includeEmptyResults to receive only websites with contacts.

Pricing

This actor uses pay-per-event pricing, so you only pay for results you receive. Websites that don't exist, block automated access, or show no contact details are never charged for contacts, and checking extra pages beyond the homepage is an optional add-on.

Current prices for each Apify plan are shown on the actor's Pricing tab.

Free plan

On the Apify free plan, each run checks a limited number of websites and pages. Upgrade to a paid Apify plan to remove these limits.

Best Practices

  • Start with a few websites to check the output quickly.
  • Keep maxPagesPerSite at 5 for most lists; go higher only when you need staff, branch or press contacts.
  • Use the main email and phone columns for outreach, and the full lists when you need every contact.
  • Use JSON export when you need nested data such as social links and addresses.
  • Remove duplicates and social media links from your list first; they are skipped anyway.

FAQ

Why did a website return no contact details?

Many websites only offer a contact form and don't publish an email or phone number. The status column shows no_contacts_found for these. Checking more pages with a higher maxPagesPerSite sometimes helps.

What does "blocked" or "unreachable" mean?

blocked means the website uses bot protection that refuses automated visits. unreachable means the website did not respond, usually because it is down. Unreachable websites often work on a later run.

How are fake emails filtered out?

Every email is checked for a real domain, and placeholders, image file names, tracking and vendor addresses and no-reply inboxes are removed. Emails from structured data, email links and contact pages are trusted most, so the main email is almost always the business's real inbox.

Are phone numbers validated?

Yes. Each number is checked against the numbering rules of the website's country and returned in international format. Dates, prices and product codes are not mistaken for phone numbers.

Can I scrape social media profiles or marketplace pages directly?

No. This actor reads business websites. Social media, marketplace and link-in-bio pages in your input are skipped with a note in the log.

How long does a run take?

Websites are checked in parallel. Around 200 websites at 5 pages each typically finish in a few minutes.

Responsible Use

Use this actor only for publicly available information, and make sure your use complies with applicable laws, including data protection and anti-spam rules such as GDPR and CAN-SPAM. Avoid collecting personal data you don't need.

Troubleshooting

  • Open the website in a browser to confirm the address is correct and the site is online.
  • Check the status and statusMessage columns for the reason a website had no results.
  • If a website did not respond, run it again a little later.
  • Test with a few websites before large runs.