π§ Email Scraper & Contact Finder - Bulk Emails, No API Key
Pricing
from $10.00 / 1,000 results
π§ Email Scraper & Contact Finder - Bulk Emails, No API Key
Email scraper and contact finder: pull bulk emails, phones and social links from any website with no API key. Smart crawler hits contact, about and team pages first for fast, high-hit-rate results, and detects the tech stack too. No login. Ideal for B2B lead gen. Pay per website crawled.
Pricing
from $10.00 / 1,000 results
Rating
0.0
(0)
Developer
Renzo Madueno
Maintained by CommunityActor stats
1
Bookmarked
229
Total users
16
Monthly active users
3 days ago
Last modified
Categories
Share
π§ Email Scraper & Contact Finder for Any Website
Point it at a list of domains and it crawls each site β contact, about and team pages first β and returns one consolidated record per domain: emails, phone numbers, physical addresses, social profiles, contact-page URL and tech stack. Built for lead generation, outbound sales and CRM enrichment. Pricing: $0.006 per website crawled (plus a negligible $0.00005 run start). ~$6 per 1,000 domains, no subscription, no API key.
Email scraper without an API key: what you get per domain
| Field | Description |
|---|---|
emails | Every publicly listed address found across crawled pages |
phones | Phone numbers extracted from page text |
addresses | Physical addresses found on the site |
socialLinks | LinkedIn, Twitter/X, Facebook, Instagram, YouTube profile URLs |
contactPageUrl | Direct URL to the site's contact page, if found |
companyName | Auto-detected from meta tags, title or domain |
techStack | 25+ platforms detected: WordPress, Shopify, React, HubSpot, Google Analytics⦠|
pagesCrawled / scrapedAt | Crawl depth and timestamp per record |
The crawler doesn't wander: it prioritizes the pages where contact data actually lives (contact, about, team, imprint, footer), which is why 5β10 pages per domain is usually enough for a full record.
Bulk email extraction, step by step
- Paste domains (or full URLs β they're normalized) into
domains. - Optionally set
maxPagesPerDomain(default 4, max 50),includeGenericEmails(setfalseto drop info@/support@ for sales lists),detectTechStack,maxConcurrency(1β10 domains in parallel). - Run. Export the dataset to CSV, Excel, JSON, or pull it via API into your CRM.
Example input:
{"domains": ["stripe.com", "https://shopify.com"],"maxPagesPerDomain": 10}
Example output (one record per domain):
{"domain": "stripe.com","companyName": "Stripe","emails": ["press@stripe.com", "support@stripe.com"],"phones": ["+1 (888) 926-2289"],"addresses": [],"socialLinks": {"linkedin": "https://www.linkedin.com/company/stripe","twitter": "https://twitter.com/stripe","facebook": "https://www.facebook.com/StripeHQ","instagram": "https://www.instagram.com/stripe","youtube": "https://www.youtube.com/c/stripe"},"contactPageUrl": "https://stripe.com/contact","techStack": ["Cloudflare", "Google Analytics", "Next.js", "React", "Stripe"],"pagesCrawled": 10}
Which platforms and tools it detects on a domain
detectTechStack (on by default) matches the fetched HTML against 25 fingerprints and returns the hits as a techStack array, so a run over a domain list doubles as a platform census β filter the column to find every Shopify store, every WordPress site, or every account already running HubSpot or Intercom:
| What you want to find | Detected as |
|---|---|
| Ecommerce / CMS | Shopify, WordPress, Magento, Drupal, Ghost, Wix, Squarespace, Webflow |
| CRM, chat & support | HubSpot, Intercom, Zendesk |
| Analytics & tagging | Google Analytics, Google Tag Manager |
| Payments | Stripe |
| Front-end frameworks | React, Next.js, Vue.js, Angular, jQuery, Bootstrap, Tailwind CSS |
| Hosting & CDN | Cloudflare, Vercel, Netlify |
Detection is signature-based on the HTML actually served (script URLs, CSS bundles, platform markers such as wp-content, cdn.shopify.com, __NEXT_DATA__, hs-scripts), so it reflects what the site loads today. Anything outside those 25 signatures is not reported β the field is a shortlist for targeting, not a full BuiltWith-style inventory.
Where the phones, addresses and social links come from
Emails are not the only thing pulled out of each page. The same crawl fills four more columns:
phonesβ every number in the page text andtel:links across all crawled pages, kept only when it has 7β15 digits, so a phone in the footer or the contact page is caught even when the homepage shows none.socialLinksβ LinkedIn, Twitter/X, Facebook, Instagram and YouTube. The first profile URL per network is kept, which in practice is the header or footer link (the company account) rather than a share button deep in a blog post.addressesβ street addresses found in the page text, usually from the contact page or the imprint.contactPageUrlβ the crawled URL that actually served the contact details, so you can check any record by hand.
The pages visited, in order, are /, /contact, /contact-us, /contacto, /kontakt, /about, /about-us, /sobre-nosotros, /team, /our-team, /people, /imprint, /impressum, /legal, /privacy, /privacy-policy, /footer, /sitemap β cut off at maxPagesPerDomain. Only if you set that above 18 does the crawler start following discovered links. German impressum and Spanish contacto/sobre-nosotros are in the list on purpose: EU sites are legally required to publish contact details on the imprint page, which makes them the highest-yield page on the whole domain.
Finding the contact page for a list of websites
Most sites bury the address that actually gets read. contactPageUrl is the resolved link to the page a human would use β /contact, /contact-us, /get-in-touch, whatever that site calls it β found by crawling the domain rather than guessing at a path.
That column matters when the domain publishes no address at all. A contactPageUrl with an empty emails array is not a dead row: it is a company that routes everything through a form. For an outreach list, that is a different bucket β worth a form submission or a LinkedIn touch, not a bounced send.
Sort your export by whether emails is empty and you have split the list into two campaigns without opening a single site.
Enriching a CSV of domains
The input is a list of domains, so the normal shape of a run is: export the domain column from your CRM or lead list, paste it in, and join the result back on domain.
Every row comes back keyed by the domain you passed, so the join is exact β no fuzzy matching on company names, no duplicates from Acme Inc versus Acme, Inc.. companyName is filled in from the site itself, which is often cleaner than whatever your CRM has stored.
For a large list, the pagesCrawled column tells you how much of each site was read before the Actor stopped. A domain with a low count and no emails is usually a single-page site or a redirect, not a failure worth retrying.
What it detects on a domain besides the email
Three columns come back that are not contact details, and each one is a filter:
techStackβ the platforms and libraries found on the site, such as["Google Analytics", "Magento", "Next.js", "React"]. Selling a Shopify app, a Magento migration or a React contract? Filter on this and the list is pre-qualified.socialLinksβ an object with the profiles found:linkedin,twitter,facebook,instagram,youtube. A company with a LinkedIn page and no email is reachable; one with neither is usually dormant.phonesβ dialable numbers pulled from the page. Analytics ids and version strings that merely look numeric are rejected, so what lands here is meant to be called.
Verifying which domains can actually receive mail
Scraping an address is half the job; the other half is knowing whether sending to it is worth a slot in your sequence. emails returns every address found on the domain, and the count itself is signal: a domain with five role addresses (info@, sales@, support@) is a company with departments, while a single personal address is usually a small team where that person reads it.
If you need syntax and MX verification on top, chain Email Verifier over this output β this Actor finds addresses, it does not test their deliverability.
Where it fits: prospecting pipelines
- Google Maps β contacts. Run the Google Maps Business Scraper for your niche and location, feed the website URLs here, and push enriched leads to your CRM on a schedule β fully hands-off via Make, n8n, Zapier, Sheets or webhooks.
- List enrichment. Already have target accounts? Paste their domains and fill in the email/phone/social columns in one run.
- Tech-stack targeting. Sell a Shopify app? Filter
techStackfor Shopify stores. Compete with Intercom? Target the sites running it. - Decision-maker emails. This Actor extracts what sites publish. For a specific person's unpublished address, chain into the Email Finder (name + domain β pattern-ranked guess), then clean everything with the Email Verifier.
FAQ
How do I extract email addresses from a website? Paste the domain into this Actor and run it β it crawls the homepage plus the highest-value pages and returns every publicly listed email, along with phones, addresses and social links. No code, no browser extension, no API key.
Can it scrape emails from multiple websites at once?
Yes β that's the primary design. Paste hundreds or thousands of domains; they're crawled in parallel (maxConcurrency up to 10) and land in one dataset, one row per domain.
How many emails will I get per site? Whatever each site publishes. Sites with real contact/team pages yield the most; form-only sites expose fewer. Even then you still get phones, socials, contact-page URL and tech stack, so no row comes back empty-handed.
Can I exclude info@ and support@ addresses?
Yes β set includeGenericEmails: false to keep only personal or department-specific emails, which converts better for sales outreach.
Is scraping contact information legal? The Actor only extracts information companies publish publicly on their own websites. Using that data (GDPR, CAN-SPAM, recipient preferences) is your responsibility in your jurisdiction.
How is this different from Hunter.io's domain search? Hunter searches its pre-crawled index behind a subscription with credit tiers. This Actor crawls the site live at run time β no account, no credit caps, $0.006 per domain β and returns phones, addresses, socials and tech stack that email-only tools skip. Hunter's index can surface addresses a site no longer publishes; live crawling reflects what's there today.
What does a 1,000-domain run cost? About $6 ($0.006 Γ 1,000 + $0.00005 start). You pay per domain processed β no monthly fee, no idle cost.
Can I schedule it to keep lists fresh? Yes β add it to an Apify Schedule (daily/weekly) and connect the output to your stack via native integrations: Google Sheets, Slack, Make, n8n, Zapier, or a webhook straight into your CRM.
Related Actors
- Google Maps Business Scraper β discover businesses by industry + location, then enrich them here.
- Google Maps Leads with Emails β Maps search β lead list with emails in one run.
- Company Enrichment β domain β decision-makers, firmographics, NAICS, tech stack.
- Email Verifier β clean every address before you send.