Website Contact Scraper: Emails, Phones, Socials avatar

Website Contact Scraper: Emails, Phones, Socials

Pricing

$2.00 / 1,000 websites

Go to Apify Store
Website Contact Scraper: Emails, Phones, Socials

Website Contact Scraper: Emails, Phones, Socials

Emails, phones and social links from company websites, one row per website with the page each came from. $2 per 1,000 websites. Priced per website, not per page; reads Google Maps results.

Pricing

$2.00 / 1,000 websites

Rating

0.0

(0)

Developer

Luzi

Luzi

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Get the emails, phone numbers and social profile links of company websites, one row per website, priced per website rather than per page: up to 30 pages of a site cost the same as one. Each contact comes with the page it was found on. Feed it website links, or the results of a Google Maps run.

Tested daily. Latest check: 2 of 2 websites read, up to 10 pages each, with emails on both. In a wider check, 17 of 20 well-known websites were read in one minute; the other 3 refuse automated visits.

What does this Actor do?

You give it website links. For each website it reads the page you gave, then the site's own pages its links lead to, contact, imprint and about pages first, up to your page limit and link depth. It collects every email, phone number and social profile link it finds and saves one row per website.

Each website comes with:

  • every email address on its pages, including addresses hidden by Cloudflare's email protection
  • phone numbers from call links and from the site's business details, and numbers written in the text, kept apart because a number in the text can be something else
  • links to its profiles on LinkedIn, X/Twitter, Facebook, Instagram, YouTube, TikTok, Pinterest, Threads, Telegram, WhatsApp, Discord, Snapchat, Reddit and GitHub
  • the company name, the home page's title, description and language, and the postal addresses the site publishes about itself
  • its contact page, the pages read, and where each contact was found

Why use it?

  • One price per website. You pay for a website, not for each page read, so reading more pages to find a contact page costs nothing extra.
  • Contact pages first. Contact, imprint ("Impressum"), about and legal pages are read before the rest, in many languages, so a small page limit still finds most contacts.
  • Straight from Google Maps. Give the dataset of a Google Maps run, or paste its rows, and every place's website is read.
  • Use the data anywhere. Download as JSON, CSV or Excel, or send it to your own tools through Apify's API and integrations.

How to use it

  1. Paste Website links, one per website, or give the Dataset id from a Google Maps run, or paste Rows from a Google Maps run.
  2. Optionally, set Max pages per website and Max link depth.
  3. Click Start. When the run ends, open the Output tab to view the websites or download them.

Run it with no input to see a sample: two websites, charged as usual.

A company's own website, as a full link or a bare domain (https://www.example.com, example.com), or any page of it. Only that host's pages are read, with or without www.. Social networks, search engines, maps and marketplaces are refused before anything is read.

Input

FieldWhat it doesDefault
Website links (startUrls)Company websites, one row each—
Dataset id from a Google Maps run (datasetId)Reads each place's website from a run's dataset—
Rows from a Google Maps run (datasetRows)The same, from rows pasted as JSON—
Max pages per website (maxPages)Pages read per website, the start page included, 1 to 3010
Max link depth (maxDepth)Links away from the start page, 0 to 5; 0 reads it alone2

Example input:

{
"startUrls": [{ "url": "https://www.example.com" }, { "url": "example.org" }],
"maxPages": 10,
"maxDepth": 2
}

Output

One row per website. An example, with made-up values and lists cut:

{
"domain": "example-bakery.com",
"website": "https://www.example-bakery.com/",
"company_name": "Example Bakery Ltd",
"title": "Example Bakery | Bread & Cakes",
"description": "Fresh bread and cakes, baked daily.",
"language": "en",
"emails": ["hello@example-bakery.com", "orders@example-bakery.com"],
"phones": ["+1 555 010 0199"],
"phones_uncertain": ["+44 20 7946 0958"],
"linkedins": ["https://www.linkedin.com/company/example-bakery"],
"twitters": [],
"facebooks": ["https://www.facebook.com/examplebakery"],
"instagrams": ["https://www.instagram.com/examplebakery"],
"youtubes": [],
"tiktoks": [],
"pinterests": [],
"threads": [],
"telegrams": [],
"whatsapps": ["https://wa.me/15550100199"],
"discords": [],
"snapchats": [],
"reddits": [],
"githubs": [],
"addresses": [
{
"full": "1 Example Street, Springfield, IL, 62701, US",
"street": "1 Example Street",
"city": "Springfield",
"region": "IL",
"postal_code": "62701",
"country": "US"
}
],
"contact_page_url": "https://www.example-bakery.com/contact",
"pages_crawled": ["https://www.example-bakery.com/", "https://www.example-bakery.com/contact"],
"pages_count": 2,
"sources": [
{
"type": "email",
"value": "hello@example-bakery.com",
"page_url": "https://www.example-bakery.com/"
}
]
}
FieldWhat it holds
domainThe website's host, without www.
websiteThe link the website was read from
company_nameThe name the site gives itself, when it states one
titleThe start page's title
descriptionThe start page's description
languageThe start page's language
emailsEvery email address found, in lower case
phonesPhone numbers from call links and the site's business details
phones_uncertainNumbers written in the page text that look like phone numbers
linkedinsLinkedIn company, school and profile links
twittersX/Twitter profile links
facebooksFacebook Page, profile and group links
instagramsInstagram profile links
youtubesYouTube channel links
tiktoksTikTok profile links
pinterestsPinterest profile links
threadsThreads profile links
telegramsTelegram links
whatsappsWhatsApp chat and channel links
discordsDiscord invite links
snapchatsSnapchat profile links
redditsReddit community and user links
githubsGitHub links
addressesPostal addresses the site publishes about itself: full, street, city, region, postal_code, country
contact_page_urlThe first contact or imprint page read
pages_crawledEvery page read, in order
pages_countHow many pages were read
sourcesEach contact once, with its type, value and the page_url it was first found on

How much does it cost?

No surcharges and no paid options; an item that fails is not charged.

You pay for what you get:

  • $2 per 1,000 websites ($0.002 a website), however many pages of it are read. Each website is charged once per run, even when two of your links lead to it.
  • No start fee, and nothing per page.

So 500 websites cost $1. A website that cannot be read is not charged. If you set a maximum cost for a run, the Actor stops when it reaches it and keeps every website saved so far.

How long does a run take?

About 20 to 40 seconds for two websites; 20 websites of up to 10 pages each in about a minute.

Good to know

  • Pages are read as the server sends them. A site that builds its pages in the browser with JavaScript may show few or no contacts.
  • One host per website. Links to other hosts, subdomains included, are not followed; give a subdomain as its own link.
  • Numbers in the text are kept apart (phones_uncertain): a number that looks like a phone can be an order number or a fax.
  • A website that cannot be read (it does not answer, refuses, its start page is not found, or one of its pages keeps refusing) is reported in the run's status and not charged; the other websites carry on. The run fails only when none could be read. If a website fails this way, a lower Max pages per website often reads it.
  • A website found twice in your links, or in a Google Maps dataset, is read and charged once.

More Actors from us

Use it from an AI agent or the API

One call starts a run and returns its items (Apify waits up to 300 seconds; for a longer run, start it with POST /v2/acts/…/runs and read its dataset):

POST https://api.apify.com/v2/acts/luzivanlt~website-contacts-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>

With the sample input as its JSON body:

{
"startUrls": [
{
"url": "https://www.eff.org"
},
{
"url": "https://www.python.org"
}
],
"maxPages": 10,
"maxDepth": 2
}

Its inputs, in the order of the input form:

InputWhat it takesDefault
startUrls (Website links)Links to company websites, one website per link, e.g. https://www.eff.org or eff.org.—
datasetId (Dataset id from a Google Maps run)The id of a run's dataset from Google Maps Scraper (compass/crawler-google-places), so you do not copy websites by hand.—
datasetRows (Rows from a Google Maps run)Rows pasted from Google Maps Scraper (compass/crawler-google-places) results, as a JSON list, when its dataset id is not readable by your account.—
maxPages (Max pages per website)Read at most this many pages of each website, the start page included, from 1 to 30.10
maxDepth (Max link depth)How many links away from the start page to go, from 0 to 5.2

Apify's MCP server, https://mcp.apify.com, lists it as luzivanlt/website-contacts-scraper. To give an AI agent this Actor as a tool, add the server to the agent's MCP config:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=luzivanlt/website-contacts-scraper"
}
}
}

The client signs in with OAuth, or add "headers": { "Authorization": "Bearer <APIFY_TOKEN>" }.

Charged per website delivered; the sample input above costs at most $0.01.

FAQ

Can I feed it Google Maps results? Yes. Give the dataset id of a Google Maps Scraper run (or paste its rows), and each place's website is read. Places without a website are skipped and counted in the run's status.

Does it verify emails? No. It returns the addresses the website shows.

Can I run it from my own code, on a schedule, or with other apps? Yes. Like any Apify Actor, you can start it through the Apify API, run it on a schedule, and connect it to other apps with Apify's integrations and webhooks.

This Actor reads only pages anyone can open. Contact details of a person, such as a named email address or a direct phone number, are personal data. Check the laws that apply to you (such as the GDPR, the CCPA or anti-spam laws) before you use the data, especially for unsolicited messages. If you are unsure, ask a lawyer.

Support

Found a problem or missing a feature? Open an issue on the Issues tab and include the run's link.