Website Contact Extraction - Email & Phone Number Extractor avatar

Website Contact Extraction - Email & Phone Number Extractor

Pricing

Pay per event

Go to Apify Store
Website Contact Extraction - Email & Phone Number Extractor

Website Contact Extraction - Email & Phone Number Extractor

Enrich an existing list of company websites with structured email, phone, and social-profile fields while preserving the original rows, except where incoming keys use the Actor's output field names. Contact fields can be empty, and email deliverability is not verified.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Rook DataTools

Rook DataTools

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

22 days ago

Last modified

Share

Business Website Contact Extractor

Turn a list of business websites into a structured contact dataset with emails, phone numbers, and social profiles. It is built for lead-generation teams, agencies, researchers, and automation workflows that already have company websites and need usable contact fields for each site.

Use it for a direct list of URLs or to enrich the output dataset from another Apify Actor. Each processed site produces a consistent record that is easy to export, filter, or pass to the next step in your workflow.

What you get

For every site, the Actor returns these fields:

FieldTypeMeaning
websitestringThe website URL associated with the result.
emailsarray of stringsEmail addresses found on publicly reachable pages. The array is empty when none are found.
primaryEmailstring or nullOne email selected as the primary result, or null when no email is found.
phonesarray of stringsPhone numbers found for the site. The array is empty when none are found.
socialsarray of stringsSocial-profile URLs found for the site. The array is empty when none are found.
pagesCheckedarray of stringsThe public page URLs checked for this result.
contactFoundbooleantrue when an email or phone was found; otherwise false.
scrapedAtstringISO 8601 timestamp recording when the site was processed.

Example output row

This example is shaped like a run against a typical small-business website. Synthetic record used to document the output shape.

{
"website": "https://www.example-insurance.example/",
"emails": [
"info@example-insurance.example",
"sales@example-insurance.example"
],
"primaryEmail": "info@example-insurance.example",
"phones": [
"555-010-0100",
"555-010-0101"
],
"socials": [
"https://www.facebook.com/example-insurance"
],
"pagesChecked": [
"https://www.example-insurance.example/",
"https://www.example-insurance.example/about/",
"https://www.example-insurance.example/contact/"
],
"contactFound": true,
"scrapedAt": "2026-08-03T01:23:12.855Z"
}

The exact values and number of contacts vary by site. If you supply lead objects or another Actor's dataset, the original row fields are retained alongside the contact fields above.

Input examples

Process a list of websites

{
"websites": [
"https://www.example-insurance.example/",
"https://example.com/"
],
"crawlContactPages": true,
"maxPagesPerSite": 3,
"onlyWithContact": false,
"maxSites": 100,
"concurrency": 5,
"requestDelayMs": 200
}

Enrich lead objects

Each lead must include a website, url, or site field. Other fields are kept in the output.

{
"leads": [
{
"company": "Example Insurance Agency",
"website": "https://www.example-insurance.example/",
"source": "regional directory"
},
{
"company": "Example Company",
"website": "https://example.com/",
"source": "CRM export"
}
],
"crawlContactPages": true,
"maxPagesPerSite": 3
}

Enrich another Actor's dataset

Paste the source run's dataset ID into inputDatasetId, along with your apifyToken.

{
"inputDatasetId": "YOUR_SOURCE_DATASET_ID",
"apifyToken": "YOUR_APIFY_API_TOKEN",
"crawlContactPages": true,
"maxPagesPerSite": 3,
"onlyWithContact": false
}

Store the token as a secret in Actor input. Each source row must contain a website, url, or site value.

Input options

OptionTypeDefaultWhat it controls
websitesarray of stringsWebsite URLs to process directly.
leadsarray of objectsLead rows containing a website, url, or site field.
inputDatasetIdstringDataset ID from another Actor run to enrich.
apifyTokensecret stringRequired only when using inputDatasetId. See Enrich another Actor's dataset above.
crawlContactPagesbooleantrueWhether the run may check relevant public pages beyond the homepage.
maxPagesPerSiteinteger3Maximum pages checked per site, from 1 to 6.
onlyWithContactbooleanfalseWhen true, omit results where no email or phone was found.
maxSitesinteger1000Maximum number of sites processed in the run. Use this as a cost cap.
concurrencyinteger5Number of sites processed in parallel, from 1 to 15.
requestDelayMsinteger200Delay between requests in milliseconds, from 0 to 5000.

You can provide websites, leads, or inputDatasetId. For audit-friendly results, leave onlyWithContact set to false so sites with no public contact details remain visible as contactFound: false.

Cost guidance

A verified one-site run on August 3, 2026 cost about $0.0035 in execution usage with maxPagesPerSite: 3 and crawlContactPages: true. As a rough execution-usage estimate, multiply the number of sites by $0.0035: 100 similar sites would be about $0.35 and 1,000 would be about $3.50.

This is an observed execution-cost example, not a fixed quote or the Actor's pay-per-event charge. Actual usage varies with the sites, pages checked, settings, and Apify platform pricing. Set maxSites and maxPagesPerSite to keep the scope predictable, and use the current pricing panel for the amount billed for a paid run.

Honest limitations

  • It reads publicly reachable pages only.
  • It cannot access anything behind a login.
  • Sites that block automated access may return nothing.
  • Sites that show contact details only through client-side scripts may return nothing.
  • contactFound: false is a normal result, not necessarily an error.
  • Coverage varies by site because businesses publish different information in different ways.
  • Email addresses are not verified, and the Actor does not enrich results from third-party contact databases.
  • No contact detail or coverage level is guaranteed.

When not to use this

Do not use this Actor when you need data from logged-in pages, guaranteed coverage, verified deliverability, guessed email addresses, or contacts that are not publicly displayed. It is also a poor fit for a single known business when manually checking its website would be faster, or for sources that consistently block automated access or expose contact details only through scripts.

Use it when you already have website URLs and want a structured, honest record of the public contact details available for each site—including normal empty results.