Website Contacts Extractor — Email, Phone & Social Scraper avatar

Website Contacts Extractor — Email, Phone & Social Scraper

Pricing

$4.00 / 1,000 site processeds

Go to Apify Store
Website Contacts Extractor — Email, Phone & Social Scraper

Website Contacts Extractor — Email, Phone & Social Scraper

Contact details scraper and email extractor. Find public emails, phone numbers, and social profiles (LinkedIn, X, Facebook, Instagram, YouTube, GitHub) from a list of websites. Static HTML, robots.txt respected.

Pricing

$4.00 / 1,000 site processeds

Rating

0.0

(0)

Developer

CleanData Tools

CleanData Tools

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Security

Limited permissions

Share

Website Contacts Extractor — email, phone, and social scraper

Contact scraper and email extractor for public websites. Pass a list of URLs. For each site the Actor reads the page you give it, plus a few same-site contact, about, impressum, and team links, and returns the emails, phone numbers, and social profiles it found, with the source page for each one.

It is a website contact finder for lead lists: homepages in, a table of contacts out.

What one site returns

FieldMeaning
statusok, blocked (partial results after a 403, 429, or bot wall), error (the site could not be fetched), or blocked_by_robots (robots.txt disallows the page; nothing fetched).
emailsAddress plus the pages it was found on. emails_text is the same list for the table.
phonesDisplay text, E.164 when the number includes a country code or the site country is known, and source pages.
socialslinkedin, x, facebook, instagram, youtube, tiktok, or github, with the profile URL and source pages.
pagesEvery fetched page: URL, HTTP status, outcome (ok, blocked, timeout, skipped_robots, skipped_login, and others).
source_pagesJust the page URLs, for the table.
noticesNotes such as a page that was cut off because it was too long.

An invalid URL or a failed call to the extractor is saved with worker_error and is not charged. A site that returns blocked_by_robots is saved and not charged. A site that returns blocked or error from the extractor is charged: the site was processed, and any partial contacts are in the row.

Input

FieldDefaultWhat to put
Website URLsTwo public example pagesUp to 10,000 http(s) URLs. A bare host such as gnu.org is read as https://gnu.org.
Concurrent sites41–10 sites at once.
Retries per site3Extra attempts after a timeout, HTTP 429, or HTTP 5xx. HTTP 400 is not retried.

Example:

{
"urls": ["https://www.gnu.org/home.html", "https://nodejs.org/en/about"],
"concurrency": 4
}

Output

The Contacts table is one row per site: status, counts, and the email, phone, and social lists. Source pages shows which URLs were fetched and how each one ended. Full objects are on the dataset item for JSON and CSV export. A run summary is stored as the OUTPUT record in the key-value store.

Pricing

Pay per event. One charge per site the extractor finishes. You are not charged platform compute on top, and you are not charged when the extractor call itself fails.

Event nameWhat it isPrice to set in Console
site-processedOne website extracted$0.004
apify-actor-startPlatform start event. Do not charge this from the Actor.Leave the default $0.00005

250 sites are $1.00. 1,000 sites are $4.00.

vdrmota/contact-info-scraper is the large contact scraper on the Store, priced from $1.05 per 1,000 scraped pages ($0.00105 per page). That Actor bills every page it crawls. This Actor bills once per site. The extractor fetches the URL you pass plus up to four contact, about, impressum, or team links, so a typical site is about two to five page fetches, roughly $0.002 to $0.005 on the per-page price. $0.004 per site sits in that band as a single line item. Copy the numbers from .actor/pay_per_event.json into the Monetization tab. The dollar amount is not hard-coded in the source.

Set the minimum run budget (minimalMaxTotalChargeUsd) to $0.005 so a run can pay for the start event and one site. When the run hits its maximum charge, the Actor saves the last billed site and skips the rest.

Honest limits

  • Static HTML only. A React, Vue, or Angular page that injects the address after load returns an empty list. There is no headless browser in this Actor.
  • The fetcher identifies itself with an honest User-Agent and obeys robots.txt. A page skipped for robots, a login wall, or a non-HTML type is reported on pages and is not silently retried with a different identity.
  • When a page answers 403 or 429, or shows a bot challenge, status is blocked and any contacts already found are kept.
  • Phone numbers are E.164 only when the number includes a country code or the site country is clear. Otherwise e164 is null and display still has the text.
  • Social profiles are the seven networks listed above, not every icon on the page.
  • This Actor does not verify that a found address can receive mail. There is no SMTP mailbox probing.
  • One run accepts at most 10,000 URLs.

Operator setup

Set these Actor environment variables only after the extractor expects a shared secret. Leave both unset until then. Set both, or neither.

VariableExample
WORKER_AUTH_HEADERX-Origin-Secret
WORKER_AUTH_VALUEthe shared secret

The header is sent on every extractor call and is never written to the dataset or the log.

Local run

npm install
npm test
mkdir -p storage/key_value_stores/default
printf '%s\n' '{"urls":["https://www.gnu.org/home.html","https://example.com"]}' > storage/key_value_stores/default/INPUT.json
npm start

npm start sets ACTOR_TEST_PAY_PER_EVENT=1 and ACTOR_USE_CHARGING_LOG_DATASET=1. Locally, each event is priced at $1 and appended to storage/datasets/charging_log. That log is not created on the Apify platform. OUTPUT.charged_events is the number of events the run actually billed. Publish from this folder with apify push.