Aurelix

Tools › Leads

Contact Page Scraper

Turn a list of company websites into their published emails, phones, addresses, social pages and team members for $3.00 per 1,000 companies, no login.

For sales teams and agencies enriching lead lists. Reads up to 25 contact, about, team and imprint pages per company for one price, and every contact carries the page it came from.

$3.00 per 1,000 companies ($2.10 on paid Apify plans)

At a glance

What the Contact Page Scraper does

Input
Company domains or website URLs
Pages read
Homepage plus contact, about, team, leadership and imprint pages; 8 per company by default, up to 25
Output
21 fields per company; JSON, CSV, Excel, API
Automate
Schedules, webhooks, Zapier, Make, n8n, Google Sheets, MCP for AI agents

Who it is for

  • Sales teams turning a list of target domains into published emails, phones and addresses
  • Agencies enriching a CRM export with company social pages and main phone numbers
  • Lead lists from Google Maps or Yellow Pages: run each website through for published company emails
  • B2B researchers seeing who a company lists on its own team and leadership pages

Output

What you get

  • company_name, domain, website, primary_email, primary_phone, address
  • linkedin_url, facebook_url, x_url, instagram_url, youtube_url (company pages only)
  • emails [{email, source_url}]: every email the company publishes (info@, sales@, toronto@, jane.doe@, Gmail) that is not already attached to a person
  • phones [{number (E.164), display, type phone|fax, source_url}] and addresses [{full, street, city, region, postal_code, country, source_url}]
  • people [{name, title, seniority, function, work_email, work_phone, linkedin_url, twitter_url, source_url}] and people_count
  • pages_crawled, source_url, scraped_at (ISO 8601 UTC)

Example

Input and output

Input

{
  "domains": [
    "sparkbox.com",
    "welchllp.com",
    "steamwhistle.ca"
  ],
  "maxPagesPerDomain": 8,
  "includePeople": true,
  "maxPeoplePerCompany": 50
}

One output record

{
  "domain": "lerners.ca",
  "website": "https://lerners.ca/",
  "company_name": "Lerners Lawyers",
  "primary_email": "london@lerners.ca",
  "primary_phone": "+18887421113",
  "address": "85 Dufferin Ave., Box 2335, London, ON N6A 4G4",
  "linkedin_url": "https://www.linkedin.com/company/lerners-llp",
  "facebook_url": "https://www.facebook.com/LernersLLP",
  "x_url": null,
  "instagram_url": "https://www.instagram.com/lernerslawyers",
  "youtube_url": "https://www.youtube.com/@LernersLLP",
  "emails": [
    {
      "email": "london@lerners.ca",
      "source_url": "https://lerners.ca/"
    },
    {
      "email": "toronto@lerners.ca",
      "source_url": "https://lerners.ca/"
    },
    {
      "email": "strathroy@lerners.ca",
      "source_url": "https://lerners.ca/"
    },
    "… 1 more"
  ],
  "phones": [
    {
      "number": "+18887421113",
      "display": "(888) 742-1113",
      "type": "phone",
      "source_url": "https://lerners.ca/"
    },
    {
      "number": "+15196406344",
      "display": "(519) 640-6344",
      "type": "phone",
      "source_url": "https://lerners.ca/"
    },
    {
      "number": "+15196724510",
      "display": "(519) 672-4510",
      "type": "phone",
      "source_url": "https://lerners.ca/"
    },
    "… 3 more"
  ],
  "addresses": [
    {
      "full": "85 Dufferin Ave., Box 2335, London, ON N6A 4G4",
      "postal_code": "N6A 4G4",
      "region": "ON",
      "country": "CA",
      "source_url": "https://lerners.ca/contact"
    },
    {
      "full": "225 King Street West, Suite 1600, Toronto, ON M5V 3M2",
      "postal_code": "M5V 3M2",
      "region": "ON",
      "country": "CA",
      "source_url": "https://lerners.ca/contact"
    },
    {
      "full": "305 King St. West, Suite 301, Kitchener, ON N2G 1B9",
      "postal_code": "N2G 1B9",
      "region": "ON",
      "country": "CA",
      "source_url": "https://lerners.ca/contact"
    },
    "… 1 more"
  ],
  "social_profiles": [
    {
      "network": "facebook",
      "url": "https://www.facebook.com/LernersLLP",
      "source_url": "https://lerners.ca/"
    },
    {
      "network": "instagram",
      "url": "https://www.instagram.com/lernerslawyers",
      "source_url": "https://lerners.ca/"
    },
    {
      "network": "linkedin",
      "url": "https://www.linkedin.com/company/lerners-llp",
      "source_url": "https://lerners.ca/"
    },
    "… 1 more"
  ],
  "people": [],
  "people_count": 0,
  "pages_crawled": [
    "https://lerners.ca/",
    "https://lerners.ca/lawyers",
    "https://lerners.ca/contact",
    "… 1 more"
  ],
  "input": "https://lerners.ca/",
  "source_url": "https://lerners.ca/",
  "scraped_at": "2026-11-04T11:26:08Z"
}

From a real run of this tool; long text and lists shortened here.

How to use it

Three steps

  1. Paste company domains or website URLs, one per line, e.g. sparkbox.com or https://www.welchllp.com.
  2. Optionally change Max pages per company (default 8), turn people off, or cap people per company.
  3. Click Start, then download JSON, CSV or Excel, or send the results to your CRM, Google Sheets, Zapier, Make or n8n through the API.

API

Call it from Python

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("aurelix/contact-details-scraper").call(run_input={'domains': ['sparkbox.com', 'welchllp.com', 'steamwhistle.ca'],
 'maxPagesPerDomain': 8,
 'includePeople': True,
 'maxPeoplePerCompany': 50})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

pip install apify-client. The same input works from the Apify console, a schedule, Make, n8n, Zapier or an AI agent through the Apify MCP server.

Pricing

Pay per result

Per 1,000 companies, free plan$3.00
Per 1,000 companies, paid plans$2.10
Person result, per 1,000, free plan$0.50
Person result, per 1,000, paid plans$0.35
Start fee per run$0.002

Live prices from the Apify Store; no subscription and no platform usage billed on top. See the Store page.

Honest limits

What it does not do

  • People are detected with rules from the company's own pages (mainly team and leadership pages), so they are best-effort: verify each name and title before outreach. A title naming only an unfamiliar place (e.g. 'General Manager, Kelowna') can be read as another organisation and left out.
  • No JavaScript rendering: contact details that a site only shows through JavaScript (some Wix, Webflow and app-style sites) are not found, and those companies are not charged.
  • People detection reads names and titles from the page layout; unusual layouts can miss people or a title, and a person without a published job title is not returned.
  • Address parsing is tuned for Canadian and US formats; other countries' addresses are found mainly through the site's structured data.
  • At most two requests per second per site and up to 25 pages per company, so very large teams spread over many pages can be partly covered.
  • Social pages: LinkedIn company pages, plus Facebook, X, Instagram and YouTube accounts linked from the site's own header or footer (or its structured data), so a company whose social links sit elsewhere on the page returns none. Personal LinkedIn and X profiles are returned inside the person whose card links them.
  • People coverage: team cards with the name and title together are read reliably; people shown only in images, sliders, JavaScript widgets or long biography text without a title line are missed.
  • A domain that redirects to a domain on the suppression list is skipped and not charged.

FAQ

Questions buyers ask

Can I find email addresses from a list of websites?

Yes. Give it company domains or website URLs; it returns the emails each company publishes on its own pages, each with the page it came from. Emails are never guessed or pinged.

How much does the Contact Page Scraper cost?

$3.00 per 1,000 companies ($2.10 on paid Apify plans), billed through your Apify account; you pay only for results. Apify's free plan includes $5 of credit a month, enough for about 1,666 companies.

Which pages does it read?

The homepage, then the pages the site links to as contact, about, team, leadership, staff or imprint (also French: nous joindre, à propos, équipe), best first, up to 'Max pages per company'. If the homepage links to none, it tries /contact, /about and /team. Individual profile pages are read last.

Which emails are returned?

Every email the company publishes on its own pages: role mailboxes (info@, sales@...), location mailboxes, named addresses such as jane.doe@ and free-mail addresses (Gmail, Outlook...). An address shown on a person's card whose mailbox spells that person's name goes in that person's work_email; every other address is in the company's emails list. Addresses at other companies' domains (e.g. the web designer) are left out. Nothing is guessed, generated or verified.

Which people are returned?

People the company publishes with a name and a job title on its own pages, e.g. a team or leadership page. Testimonials, reviews, blog authors, quotes and partner, customer and case-study pages are skipped. Board members, advisors and investors are excluded: nobody listed under a board, advisor or investor heading, and no board-only title such as Chair, is returned. A person whose title names another organisation or a past role (e.g. 'CEO of Telus', 'Vice President at SoftBank Investment Advisers', 'CEO (Telus)', 'President - Hootsuite', 'Former CTO of Shopify') is left out, whatever the role; a title naming a department, business line or region of the company itself (e.g. 'President, Retail Banking', 'Managing Director, North America') is kept. Work email, phone, linkedin_url and twitter_url are filled only when they appear on that person's own card (or in the page's structured data for that person); a link shared by two people is given to neither.

What is charged?

One company-result for each company that returns at least one email, phone, address, social page or person, plus one person-result per person included. Unreachable sites, sites that disallow crawling and companies with no published contact data are free apart from the run start fee.

Does it respect robots.txt?

Always, and it cannot be switched off. Disallowed pages are never requested, Crawl-delay is honoured, and redirects into disallowed paths are not followed.

Can I use it from an AI assistant?

Yes. Give 'domains' and it works through Apify's MCP server and API; every input has a safe default.

Is this legal?

It reads only public data any logged-out visitor can see: companies' own websites. It goes at a polite pace, respects robots.txt, never logs in and never solves CAPTCHAs. It returns the contact details the company publishes (emails, phones, addresses, social pages, team members with titles and the contact links on their cards) as shown on the page; no guessed emails, and anyone on our suppression list is withheld. To have a record removed, open an issue on this Actor's Issues tab; if a site owner formally asks us to stop, this Actor will stop. You are responsible for using the data lawfully, incl. anti-spam and privacy laws; this is not legal advice.

How do I get my data removed?

Open an issue in the Issues tab with the domain, email or name. It is added to the shared suppression list within 7 days.

What happens if a site has no contact data or cannot be reached?

That company is left out of the dataset and not charged. The run's status message counts every company not charged by reason: site unreachable (with the error), blocked by robots.txt, no contact data found, stopped early, or suppressed on request. A run in which nothing is found costs only the $0.002 start fee.

How are duplicate or messy entries handled?

Entries for the same site (with or without www., https:// or a path) are crawled once and returned once. A full URL such as https://www.welchllp.com/contact is read along with the homepage. An email address is accepted and its domain is used. Entries that are not domains or URLs are skipped with a warning in the log.

How many domains can one run take, and how fast is it?

There is no fixed cap on the list. Five companies are crawled at a time, at most two requests per second per site, and each company gets at most 240 s of crawling. In our test runs, 10 companies took 43 s and 28 domains at up to 10 pages each took 314 s. For long lists, raise the run timeout: a run that nears it stops early and keeps the companies already done.

Can I get company details without people?

Yes. Set 'Include people' to false: no people are returned and no person-result is charged, only one company-result per company with data. You can also cap people with 'Max people per company'; people above the cap are neither returned nor charged.

What do seniority and function mean?

Both are read from the job title the company publishes. Seniority is one of founder_owner, c_suite, partner, vp, head, director, manager or staff. Function is one of executive, finance, hr, marketing, sales, engineering, product, legal, operations, customer_service or other. They are rule-based, so check the title itself before relying on them.

How are phone numbers and countries handled?

Numbers are validated with Google's libphonenumber; invalid ones are dropped and the rest are returned in E.164 and typed as phone or fax. A number written without a country code is read in the country of the site's domain ending: .ca as Canada, .uk as the UK, .com, .net, .org, .io and .co as the US, and other two-letter endings as that country. Page types are recognised in English and French, plus words such as Kontakt and Impressum.

Why do I get fewer emails than with a page-by-page scraper?

Every address the company publishes is kept; a person's own address sits inside that person, addresses at other companies' domains are left out, and file names, placeholders and tracking addresses are removed. Sites that show their email only through JavaScript return none.

Can I schedule it to track changes?

You can schedule it like any Actor, but there is no 'only new' mode: each run crawls every domain again and charges each company with data again. Schedule only the domains you want refreshed.

How do I export companies to Google Sheets?

Download the run's results as CSV or Excel and open them in Google Sheets, or add Apify's Google Sheets integration to the run or a schedule so every run's results land in a sheet.

Guides

Tutorials using this tool

Related

Related tools

Try the Contact Page Scraper

Open it on the Apify Store, paste the example input above and click Start. Results download as CSV, Excel or JSON.