Website Contact & Email Finder – Emails, Phones & Tech Stack avatar

Website Contact & Email Finder – Emails, Phones & Tech Stack

Pricing

from $4.00 / 1,000 website with contacts founds

Go to Apify Store
Website Contact & Email Finder – Emails, Phones & Tech Stack

Website Contact & Email Finder – Emails, Phones & Tech Stack

Website contact & email finder: paste domains, get MX-verified emails, phones, LinkedIn, Instagram, X & other socials plus the site's tech stack (Shopify, WordPress, HubSpot, Klaviyo, Stripe…) in one row per site. Filter by technology, e.g. Shopify stores only. Pay only for sites with contacts.

Pricing

from $4.00 / 1,000 website with contacts founds

Rating

0.0

(0)

Developer

Ani Björkström

Ani Björkström

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 days ago

Last modified

Share

Website Contact & Email Finder – Emails, Phones, Socials & Tech Stack

Website Contact & Email Finder turns any list of websites or bare domains into a clean lead list: it crawls each site's homepage plus its contact, about, team, impressum and support pages and returns emails, phone numbers, social media profiles, address, company name and the site's tech stack — one row per website.

Four things set this email scraper apart from cheap "extract emails from websites" actors:

  1. MX-verified emails. Every email domain gets a DNS MX lookup, so each address carries mxValid: true / false / null. Dead domains are flagged before they bounce in your outreach tool.
  2. Everything in one row. Emails (labelled generic vs personal), phones (raw + E.164), LinkedIn, X/Twitter, Facebook, Instagram, YouTube, TikTok, GitHub, Threads and Pinterest, plus the best contact page, address and company name. No second enrichment step.
  3. Tech stack detection built in. Every row says which CMS, ecommerce platform, analytics, marketing tools, payment providers and hosting/CDN the site runs — Shopify, WooCommerce, WordPress, HubSpot, Klaviyo, Mailchimp, Intercom, Stripe, Klarna and ~400 more — so you can find Shopify stores' emails or HubSpot customers in one run, without a separate Wappalyzer/BuiltWith lookup.
  4. You pay only for websites where contacts were found. Unreachable sites, parked domains and pages without any contact data are delivered as explanatory rows — free.

No proxy setup, no API key, no login, no headless browser. Paste 5 domains or 50,000.


What you get

One row per website. Arrays stay inside the row, so the dataset is flat, agent-friendly and MCP-ready.

FieldDescription
urlThe website exactly as you entered it
finalUrlWhere the homepage actually resolved (www / https / redirects followed)
statusok (contacts found, charged), no_contacts_found (free), unreachable (free), filtered_out (does not use your filter technologies — free, no contact data)
errorPlain-English reason when the status is not ok
companyNameog:site_name → schema.org Organization name → page title
primaryEmailThe best address for outreach: on-site domain, MX-valid, info@/contact@/hello@ first
emails[]{ email, type: "generic" | "personal", mxValid, onSiteDomain, foundOn } — sorted best-first
emailCountNumber of distinct emails after filtering
primaryPhoneFirst phone number in E.164 when it can be resolved, otherwise as written
phones[]{ raw, normalized, e164, foundOn }
phoneCountNumber of distinct phone numbers
linkedin, twitter, facebook, instagram, youtube, tiktok, github, threads, pinterestOne canonical profile URL per network
socials[]Every social profile URL found, canonicalised and de-duplicated
contactPageUrlThe contact / kontakt / impressum page that was found
addressTextPostal address from schema.org PostalAddress JSON-LD or an <address> block — null when the site does not state one, never guessed
technologies[]{ name, categories[], version, confidence } for every detected technology (see Tech stack detection)
technologyCountNumber of technologies detected
cmsMain CMS / site builder, e.g. WordPress, Webflow, Wix, HubSpot CMS Hub — null if none detected
ecommercePlatformShopify, WooCommerce, Magento, BigCommerce, PrestaShop… or null
analytics[]Analytics tools, e.g. Google Analytics, Hotjar, Microsoft Clarity, Matomo Analytics
marketingTools[]Marketing automation, email, live chat, CRM, scheduling: HubSpot, Klaviyo, Mailchimp, Intercom, Calendly…
paymentProviders[]Stripe, PayPal, Klarna Checkout, Shop Pay, Adyen, Afterpay…
hostingCdnMost specific host or CDN: Vercel, WP Engine, Netlify, Cloudflare, Fastly… or null
matchedTechnologies[]Which of your technologies filter terms the site matched (empty when no filter is set)
siteTitle, metaDescription, languageHomepage title, meta description and <html lang>
fetchedViaProxytrue when the site was fetched through Apify Proxy (automatic fallback for blocked sites, or your own proxy setting)
pagesCrawledHow many pages were fetched for this site
scrapedAtISO 8601 UTC timestamp

Example row (abridged)

{
"url": "https://www.netlight.com", "status": "ok", "companyName": "Netlight",
"primaryEmail": "info@netlight.com", "emailCount": 18,
"emails": [{ "email": "info@netlight.com", "type": "generic", "mxValid": true, "onSiteDomain": true, "foundOn": "https://www.netlight.com/contact" }],
"primaryPhone": "+4686169940",
"phones": [{ "raw": "+46 8 616 99 40", "normalized": "+4686169940", "e164": "+4686169940", "foundOn": "https://www.netlight.com/contact" }],
"linkedin": "https://www.linkedin.com/company/netlight-consulting/",
"instagram": "https://www.instagram.com/netlightconsulting/",
"contactPageUrl": "https://www.netlight.com/contact",
"cms": "Sanity", "ecommercePlatform": null, "hostingCdn": "Vercel",
"technologies": [{ "name": "Sanity", "categories": ["CMS"], "version": null, "confidence": 100 },
{ "name": "Next.js", "categories": ["JavaScript frameworks", "Web frameworks", "Static site generator"], "version": null, "confidence": 100 }],
"addressText": "Herengracht 282, 1016 BX Amsterdam, Netherlands",
"language": "en", "pagesCrawled": 4, "scrapedAt": "2026-09-22T18:41:07Z"
}

How the website contact finder works

  1. Homepage first. Bare domains get https://; www/non-www and https/http variants are tried, redirects followed, tracking parameters stripped.
  2. Smart page selection. Same-domain links are scored by URL and anchor text — contact, kontakt, about, team, impressum, imprint, support, help, press, careers, legal, privacy, om oss, über uns — and the best maxPagesPerSite − 1 pages are fetched; /contact, /about, /kontakt, /impressum are guessed as a fallback.
  3. Deep email extraction. mailto: links, text regex, JSON-LD Organization data, obfuscations (name [at] domain [dot] com, name (at) domain, name at domain dot com, HTML entities) and Cloudflare data-cfemail protection are all decoded. Image filenames (logo@2x.png), example.com, Sentry/Wix/GoDaddy noise and noreply@ are filtered out.
  4. Phone number scraper. tel: links plus international patterns such as +46 8 123 45 67, (415) 555-0132, 0800 123 456 — returned as written, as digits, and as E.164 when the country can be inferred from a + prefix, the country TLD or the page language.
  5. Social media links extractor. Profile links from headers, footers, social widgets and schema.org sameAs, canonicalised (twitter.com/x → https://x.com/x; share/intent/login links ignored); the profile matching the site's brand wins.
  6. MX verification. Each unique email domain is resolved once (3 s timeout, cached across the run). No MX but a valid A record still counts as deliverable (RFC 5321); NXDOMAIN → false; timeout → null.
  7. Parked-domain protection. Registrar parking pages and hosting placeholders ("website is currently not available", "domain for sale", nginx/Apache default pages) come back as unreachable, so you are never charged for a hosting provider's support address.

Pages are fetched with a desktop Chrome user agent, HTML only (bodies capped at 3 MB), one page at a time per site with a short pause. Websites run in parallel; one dead site never affects another.


Tech stack detection

With Detect technologies on (the default), the email finder also works as a tech stack lookup / Wappalyzer alternative for every site in your list — at no extra cost and with no extra requests. It reuses the homepage and contact pages it already downloads and matches them against ~420 technology fingerprints:

  • Response headers and cookies — x-shopify-stage, powered-by: Shopify, x-pingback, cf-ray, x-vercel-id, _shopify_y, __stripe_mid…
  • <meta name="generator"> — WordPress 6.6, Drupal 10, Wix.com Website Builder, WooCommerce 9.1 (with version numbers where the site exposes them)
  • Script URLs — cdn.shopify.com, js.hs-scripts.com, static.klaviyo.com, js.stripe.com, widget.intercom.io…
  • HTML patterns and CSS selectors — /wp-content/, data-wf-site, woocommerce classes, HubSpot form embeds
  • JavaScript globals, only when they appear as code in inline scripts (Shopify.theme, _hsq.push, klaviyo.push) — nothing is executed

Each technology gets a confidence (50–100) and, when available, a version. Implied technologies are added (WooCommerce → WordPress), and app-specific entries are only kept when their parent platform is present, which keeps false positives low.

Covered categories: CMS & site builders (WordPress, Webflow, Wix, Squarespace, Drupal, Joomla, HubSpot CMS, Contentful, Sitevision…), ecommerce (Shopify, WooCommerce, Magento, BigCommerce, PrestaShop, Shopware, Wikinggruppen…), analytics (Google Analytics, Hotjar, Clarity, Matomo, Plausible…), marketing automation & email (HubSpot, Marketo, Pardot, Mailchimp, Klaviyo, ActiveCampaign, Brevo…), live chat (Intercom, Drift, Zendesk, Tawk.to, Crisp…), payments (Stripe, PayPal, Klarna, Adyen, Svea, Nets Easy, Qliro, Walley…), cookie consent (Cookiebot, OneTrust…), hosting/CDN (Cloudflare, Fastly, Vercel, Netlify, WP Engine…), JS frameworks, recruiting tools (Teamtailor, Greenhouse, Lever) and more.

Filter: only keep sites that use a technology

Set Only keep sites using these technologies (technologies) to e.g. ["Shopify"], ["WooCommerce", "Magento"], ["HubSpot"] or a whole category such as ["Ecommerce"] or ["Live chat"]. Sites that use at least one of them are crawled for contacts as usual and charged as normal ok rows. Every other site gets a free filtered_out row (with its detected technologies, but no contact data) after a single homepage request — so filtering a big list down to Shopify stores is fast and you only pay for the matches.

Shopify stores work out of the box. Shopify (and some Cloudflare-protected sites) block cloud datacenter IPs with HTTP 429/403 or a bot-challenge page. When that happens the actor automatically retries just that site through Apify Proxy with a fresh session — no setting needed, and sites that answer normally never use the proxy. Such rows have fetchedViaProxy: true.

{
"startUrls": ["rains.com", "deathwishcoffee.com", "woocommerce.com", "kvadrat.se"],
"technologies": ["Shopify"]
}

Tech stack use cases

  • Find Shopify stores with emails — feed a list of brand domains, keep only Shopify, and get the store's contact email, phone, Instagram and payment providers (Shop Pay, Klarna, Afterpay) for app or agency outreach.
  • Find WooCommerce / Magento shops for migration offers, plugin sales or ecommerce agencies.
  • Find HubSpot, Marketo or Pardot customers — partners and agencies selling HubSpot services can target companies already on the platform.
  • Klaviyo vs Mailchimp prospecting — email-marketing agencies spot stores still on Mailchimp, or Klaviyo users for an app pitch.
  • WordPress maintenance & security leads — WordPress sites with emails, plugin versions (Yoast, Elementor, WPML) and hosting.
  • Competitive / market research — what share of an industry list runs Shopify vs WooCommerce, which analytics and consent tools they use.

Input

{
"startUrls": [
"https://www.netlight.com",
"kvadrat.se",
"www.zingermans.com",
"https://russanddaughters.com/"
],
"maxPagesPerSite": 8,
"verifyEmailDomains": true,
"includeGenericEmails": true,
"concurrency": 10,
"requestTimeoutSecs": 20,
"detectTechnologies": true,
"technologies": []
}
OptionDefaultWhat it does
startUrls3 demo sitesWebsites to scan — full URLs or bare domains, one per line; [{ "url": "..." }] objects from other actors also work.
maxPagesPerSite8Homepage + up to this many contact-like pages (1–30). 2–3 is fast; 8 finds nearly everything on a business site.
verifyEmailDomainstrueDNS MX lookup per email domain → mxValid.
includeGenericEmailstrueKeep info@, contact@, sales@… Turn off for named / personal addresses only.
detectTechnologiestrueDetect CMS, ecommerce platform, analytics, marketing tools, payments, hosting and ~400 more technologies from the pages already fetched. Free.
technologiesemptyOptional filter: keep only sites using at least one of these technologies or categories (e.g. Shopify, HubSpot, Ecommerce). Others → free filtered_out rows.
concurrency10Websites processed in parallel (1–50).
requestTimeoutSecs20Per-page timeout (5–120).
proxyConfigurationoffRequests go out directly; sites that block datacenter IPs (403/429/challenge) are retried automatically through Apify Proxy. Set a proxy here only to route every request through it.

Running with no input scans the three demo websites, so you can see the output shape in one click.


Use cases

  • Sales & SDR teams — bulk domain to email. Export target-account domains from your CRM, run the finder, push primaryEmail, primaryPhone and linkedin back as enrichment. Only MX-valid addresses reach your sequences.
  • Local business prospecting for agencies. Chain the email finder after the Google Maps Lead Scraper: Maps gives you the business website, this website contact scraper gives you the email, Instagram and Facebook page behind it.
  • Recruiters and staffing firms. Find careers@, HR and hiring-manager addresses plus LinkedIn company pages for a list of employers.
  • PR, link-building and outreach. Turn a list of blogs, publishers or partner sites into press@ / editorial contacts with the correct social handles for a personalised pitch.
  • Shopify & ecommerce app vendors. Filter a domain list to Shopify (or WooCommerce) stores and get the store's email and socials in the same row — see Tech stack detection.
  • HubSpot / Klaviyo partners and martech agencies. Find companies already using (or not using) a marketing tool, with their contact details.
  • Market researchers. Company name, language, address and social footprint for a whole industry list, exported to CSV or Excel.
  • AI agents and RAG pipelines. Flat JSON rows with stable field names make this a drop-in contact-lookup tool for LLM agents via the Apify MCP server.

Pricing

The website contact & email finder is pay-per-result: the website event is charged once per row with status: "ok" (at least one email, phone number or social profile delivered). Tech stack detection is included at no extra cost. Rows with status: "no_contacts_found", "filtered_out" or "unreachable" (DNS failure, 403/5xx, parked domain, timeout) are free, so you still learn what happened to every input. No start fee, no charge per page crawled — raising maxPagesPerSite never costs more.


Integrations

Python (pip install apify-client):

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("nourishing_courier/website-contact-email-finder").call(run_input={
"startUrls": ["netlight.com", "kvadrat.se", "zingermans.com"],
"maxPagesPerSite": 8,
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row["url"], row["primaryEmail"], row["primaryPhone"], row["linkedin"])

JavaScript (npm i apify-client):

import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "YOUR_APIFY_TOKEN" });
const run = await client.actor("nourishing_courier/website-contact-email-finder").call({
startUrls: ["netlight.com", "kvadrat.se", "zingermans.com"],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((r) => [r.url, r.primaryEmail, r.emails.length]));

curl (run synchronously and get the dataset back):

curl -X POST "https://api.apify.com/v2/acts/nourishing_courier~website-contact-email-finder/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"startUrls": ["netlight.com", "kvadrat.se"], "maxPagesPerSite": 5}'

n8n, Make, Zapier. Use the Apify node/module: trigger on a new row in Google Sheets, HubSpot or Airtable, run this actor with the domain, and write primaryEmail, primaryPhone and the social URLs back. Every input produces exactly one row, so lead-enrichment mapping is one-to-one.

MCP / AI agents. Add the actor to the Apify MCP server and your agent gets a find website contacts tool returning flat JSON it can reason over.


This actor only reads publicly published business contact information — the same addresses, phone numbers and social links a company puts on its own website for people to use. It sends plain HTTP requests at a gentle pace (pages within one site are fetched sequentially with a pause), does not log in anywhere, does not bypass paywalls or CAPTCHAs, and does not guess or generate email addresses.

Use the results responsibly. Under GDPR, contacting a business at a role or corporate address is generally covered by legitimate interest for B2B outreach, but you remain the data controller: honour opt-outs and unsubscribe requests, keep a lawful basis for personal (named) addresses, respect anti-spam rules such as CAN-SPAM and PECR, and never use this data for unsolicited consumer marketing or spam.

Technical limits worth knowing:

  • JavaScript-only sites. Contact details rendered purely by client-side JavaScript (some React/Vue single-page apps) are invisible to a plain HTTP email scraper. WordPress, Wix, Squarespace, Shopify and Webflow sites expose contacts in the HTML and work fine.
  • Automatic proxy fallback. Sites that block the direct request (HTTP 403/429 or an anti-bot challenge page, e.g. Shopify stores) are retried once through Apify Proxy. If that also fails, the row is unreachable and free.
  • Anti-bot walls. A small share of sites behind aggressive Cloudflare or Akamai rules return 403 to datacenter traffic. Those are retried through Apify Proxy automatically; if they still refuse, they come back as unreachable — free.
  • Tech detection sees the HTML, not the browser. Tags that are injected only at runtime by Google Tag Manager (or loaded after consent) may not show up — GTM itself is reported. Detection is fingerprint-based and can occasionally miss a heavily customised setup; it never guesses from the site's text content.
  • Caps. 250 emails and 100 phones per site, 3 MB per page.
  • Phone detection is pattern-based; on pages full of numeric codes a stray ID can occasionally slip through. tel: links and +-prefixed numbers are always reliable.

FAQ

How do I extract emails from a list of websites in bulk?

Paste the domains into Websites (one per line — bare domains are fine), leave the defaults, and click Start. You get one row per domain with all emails found, MX-verified, plus phones and socials. Thousands of domains in one run are fine; raise Parallel websites to speed it up.

Does this email finder work without an API key or login?

Yes. It reads public web pages directly — no Hunter/Apollo/Clearbit key, no Google account, no proxy.

What does mxValid mean and how is it different from email verification services?

mxValid checks the DNS of the email's domain: true means the domain has mail servers (or an A record fallback) and can receive mail, false means it cannot, null means DNS timed out. It is not an SMTP mailbox check, so it cannot tell you whether john@ specifically exists — but it removes every address on a dead or misspelled domain for free.

Can it tell generic emails from personal ones?

Yes. info@, contact@, hello@, sales@, support@, press@, kontakt@ and about a hundred similar role addresses are labelled generic; named addresses like anna.svensson@ are personal. Set Include generic emails to off to keep only personal ones.

Why is a website marked unreachable, and does the email finder charge for it?

The homepage could not be fetched as HTML — DNS failure, connection refused, HTTP 403/404/5xx, timeout, a parked domain or a hosting placeholder page. The error field says which. Unreachable and empty websites are never charged.

Does this website contact scraper work with n8n, Make or Zapier?

Yes. Use the Apify integration in any of them, pass the domain as startUrls, and map primaryEmail, primaryPhone, linkedin, facebook, instagram from the single output row back into your sheet or CRM.

How do I find Shopify stores and their email addresses?

Put the store domains in Websites and Shopify in Only keep sites using these technologies. Shopify stores come back as normal rows with emails, phones, Instagram/Facebook and the detected apps and payment providers; non-Shopify sites come back as free filtered_out rows. The same works for WooCommerce, Magento, BigCommerce, Wix or Squarespace.

Is this a Wappalyzer / BuiltWith alternative?

For lead generation, yes: every row includes a Wappalyzer-style tech stack lookup (technologies, cms, ecommercePlatform, analytics, marketingTools, paymentProviders, hostingCdn) next to the contacts, with no API key and no extra charge. It does not provide historical "used since" data or traffic estimates.

How do I find companies that use HubSpot (or Klaviyo, Intercom, Stripe)?

Set the technology filter to HubSpot (this also matches HubSpot CMS Hub and HubSpot Analytics), or to any other tool or category such as Klaviyo, Intercom, Stripe, Live chat or Marketing automation. Only sites that use it are charged.

Does tech stack detection cost extra or slow the run down?

No. It reuses the pages already downloaded for contact extraction, adds no requests and is not a separate charge event. Turn Detect technologies off if you do not need the columns.

Can I combine the email finder with Google Maps results?

Yes — run the Google Maps Lead Scraper for "dentists in Austin" or "restauranger Stockholm", take the website column, and feed it here to get emails, Instagram and Facebook pages for every business.


Technology fingerprints are derived from the MIT-licensed Wappalyzer project (2023 snapshot) plus this actor's own signatures.