DEV Community

Donny Nguyen
Donny Nguyen

Posted on • Originally published at rapidapi.com

Extract Emails from Any Website in Seconds (No Scraper Setup Required)

Email discovery is one of those tasks that sounds simple until you actually build it.

You think: "I'll just fetch the page and regex for emails." Then reality hits — JavaScript-rendered pages, mailto links, obfuscated addresses, contact forms, multi-page crawls. What should be a 10-minute task becomes a weekend project.

I've built and maintain a hosted Email Extractor API that handles all of this for you. One endpoint, clean JSON, deployed and reliable.

What It Does

Send any URL. Get back every email address found on that page.

GET /search?url=https://example.com
Enter fullscreen mode Exit fullscreen mode
{
  "success": true,
  "url": "https://example.com",
  "count": 3,
  "data": [
    "contact@example.com",
    "sales@example.com",
    "support@example.com"
  ]
}
Enter fullscreen mode Exit fullscreen mode

That's it.

API Link: Email Extractor API on RapidAPI

Why Use a Hosted API vs Rolling Your Own

Here's what a reliable email extractor actually needs to handle:

  • Static HTML emails — the easy case (regex works here)
  • Mailto links<a href="mailto:..."> — need HTML parsing
  • JavaScript-rendered content — emails loaded via JS, invisible to a simple fetch
  • Obfuscated addressesname [at] domain [dot] com — need pattern matching
  • Pagination — contact info on a different page
  • Rate limiting + retries — getting blocked when crawling multiple sites

The hosted API handles all of this. You don't manage infrastructure, proxies, or maintenance when sites change.

Quick Start

Subscribe on RapidAPI

Get your API key at Email Extractor API — BASIC plan is free.

JavaScript / Node.js

const axios = require('axios');

async function extractEmails(url) {
  const response = await axios.get(
    'https://email-extractor1.p.rapidapi.com/search',
    {
      params: { url },
      headers: {
        'X-RapidAPI-Key': 'YOUR_RAPIDAPI_KEY',
        'X-RapidAPI-Host': 'email-extractor1.p.rapidapi.com'
      }
    }
  );
  return response.data;
}

// Usage
const result = await extractEmails('https://company.com/contact');
console.log(result.data); // ['hello@company.com', 'sales@company.com']
Enter fullscreen mode Exit fullscreen mode

Python

import requests

def extract_emails(url):
    response = requests.get(
        'https://email-extractor1.p.rapidapi.com/search',
        params={'url': url},
        headers={
            'X-RapidAPI-Key': 'YOUR_RAPIDAPI_KEY',
            'X-RapidAPI-Host': 'email-extractor1.p.rapidapi.com'
        }
    )
    return response.json()

result = extract_emails('https://company.com/about')
print(result['data'])
Enter fullscreen mode Exit fullscreen mode

Real-World Use Cases

1. Lead Generation Pipeline

Build a lead scraper that takes a list of business URLs and returns contact emails:

async function buildLeadList(businessUrls) {
  const leads = [];

  for (const url of businessUrls) {
    const result = await extractEmails(url);
    if (result.success && result.count > 0) {
      leads.push({
        website: url,
        emails: result.data,
        foundAt: new Date().toISOString()
      });
    }
  }

  return leads;
}
Enter fullscreen mode Exit fullscreen mode

2. Outreach Automation

async function enrichLeadWithEmail(lead) {
  // Try homepage first, then contact page
  const pages = [
    lead.website,
    `${lead.website}/contact`,
    `${lead.website}/about`,
    `${lead.website}/team`
  ];

  for (const page of pages) {
    const result = await extractEmails(page);
    if (result.count > 0) {
      return { ...lead, email: result.data[0], emailSource: page };
    }
  }

  return { ...lead, email: null };
}
Enter fullscreen mode Exit fullscreen mode

3. Competitor Research

async function getCompetitorContacts(competitors) {
  const contacts = await Promise.all(
    competitors.map(url => extractEmails(url))
  );
  return contacts.filter(c => c.count > 0);
}
Enter fullscreen mode Exit fullscreen mode

4. Directory Scraping

If you're building a business directory tool, batch-extract emails from scraped business websites:

// After scraping business URLs from Google Maps, Yelp, etc.
const enrichedBusinesses = await Promise.allSettled(
  businessUrls.map(async (url) => {
    const emails = await extractEmails(url);
    return { url, emails: emails.data };
  })
);
Enter fullscreen mode Exit fullscreen mode

Parameters

Parameter Type Required Description
url string Yes Full URL to scan for emails

Response Fields

Field Type Description
success boolean Request status
url string URL that was scanned
count number Number of emails found
data array List of email addresses found

Pricing

Plan Requests/mo Price
BASIC 500 Free
PRO 10,000 $9.99/mo
ULTRA 50,000 $29.99/mo
MEGA 200,000 $79.99/mo

Common Questions

Does it work on JavaScript-rendered pages?
Yes — the API handles dynamic content loading.

What about email obfuscation?
The extractor handles common obfuscation patterns like name [at] domain [dot] com.

Will it crawl multiple pages?
The current endpoint scans the specified URL. For multi-page crawls, call it on each page (contact, about, team pages typically have the most emails).

What's the rate limit?
Depends on your plan — see pricing above. BASIC gives 500 requests/month free.

Get Started

Subscribe to Email Extractor API on RapidAPI →

Free plan available. No credit card required.


Built by Donny Dev — also check out DuckDuckGo Search API, Website Tech Detector API, and Apollo Lead Scraper API for more data tools.

Top comments (0)