API Overview

EveryMailFinder's Email Scraper API allows you to programmatically extract email addresses from websites. This API is designed for developers who want to integrate email scraping capabilities into their own applications, workflows, or services.

The API follows RESTful principles and returns JSON responses. All requests must be authenticated using an API key.

Base URL

https://api.everymailfinder.com/v1

Quick Start

  1. Generate your API key from the management section
  2. Make a POST request to /scrape with a list of URLs
  3. Receive a job ID to check the status of your scraping request
  4. Poll the job status endpoint until completion
  5. Retrieve your results containing extracted emails

Authentication

All API requests must include your API key in the Authorization header.

// Example of including API key in a request curl -X POST \ https://api.everymailfinder.com/v1/scrape \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"urls": ["https://example.com"]}'

Replace YOUR_API_KEY with your actual API key, which you can generate in the API Key Management section.

Important: Keep your API key secure and never expose it in client-side code. Each API key is associated with your account and usage limits.

API Endpoints

Create Scraping Job

POST /scrape

Submit a list of URLs to scrape for email addresses. Returns a job ID that can be used to check the status and retrieve results.

Request Body

{ "urls": [ "https://example.com", "https://another-website.org" ], "options": { "concurrency": 2, "timeout": 10000 } }

Response

{ "job_id": "job_abc123def456", "status": "queued", "message": "Job successfully queued.", "urls_count": 2 }

Check Job Status

GET /scrape/:job_id

Check the status of a scraping job and retrieve results when completed.

Response

{ "job_id": "job_abc123def456", "status": "completed", "created_at": "2025-09-08T10:00:00Z", "completed_at": "2025-09-08T10:02:30Z", "results": [ { "url": "https://example.com", "email": "[email protected]", "status": "success" }, { "url": "https://another-website.org", "email": null, "status": "error", "error": "No email found" } ] }

API Testing

Use the form below to test the Email Scraper API. You'll need a valid API key to make requests.

API Response
// Response will appear here

API Key Management

Manage your API keys below. Each key has the same permissions as your user account.

Generate New API Key

Your new API key:

Important: Copy this key now! It won't be shown again.

Your API Keys

Loading your API keys...

Usage & Statistics

Track your API usage and limits here.

0
API Calls Today
0
API Calls This Month
0
Emails Scraped
0
Remaining Limit

Usage History

Chart loading...

Code Examples

cURL
JavaScript
Python
PHP
# Create a scraping job curl -X POST \ https://api.everymailfinder.com/v1/scrape \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "urls": [ "https://example.com", "https://another-website.org" ] }' # Check job status curl -H "Authorization: Bearer YOUR_API_KEY" \ https://api.everymailfinder.com/v1/scrape/job_abc123def456
// Using fetch in JavaScript const apiKey = 'YOUR_API_KEY'; const urls = ['https://example.com', 'https://another-website.org']; // Create scraping job const createJob = async () => { const response = await fetch('https://api.everymailfinder.com/v1/scrape', { method: 'POST', headers: { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ urls }) }); return await response.json(); }; // Check job status const checkJob = async (jobId) => { const response = await fetch( `https://api.everymailfinder.com/v1/scrape/${jobId}`, { headers: { 'Authorization': `Bearer ${apiKey}` } }); return await response.json(); };
import requests api_key = "YOUR_API_KEY" urls = ["https://example.com", "https://another-website.org"] # Create scraping job response = requests.post( "https://api.everymailfinder.com/v1/scrape", headers={ "Authorization": f"Bearer {api_key}", "Content-Type": "application/json" }, json={"urls": urls} ) job_data = response.json() job_id = job_data["job_id"] # Check job status status_response = requests.get( f"https://api.everymailfinder.com/v1/scrape/{job_id}", headers={"Authorization": f"Bearer {api_key}"} ) status_data = status_response.json() print(status_data)
<?php $apiKey = 'YOUR_API_KEY'; $urls = ['https://example.com', 'https://another-website.org']; // Create scraping job $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://api.everymailfinder.com/v1/scrape'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFields, json_encode(['urls' => $urls])); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Authorization: Bearer ' . $apiKey, 'Content-Type: application/json' ]); $response = curl_exec($ch); $jobData = json_decode($response, true); $jobId = $jobData['job_id']; // Check job status curl_setopt($ch, CURLOPT_URL, 'https://api.everymailfinder.com/v1/scrape/' . $jobId); curl_setopt($ch, CURLOPT_POST, 0); curl_setopt($ch, CURLOPT_HTTPGET, 1); $statusResponse = curl_exec($ch); $statusData = json_decode($statusResponse, true); curl_close($ch); print_r($statusData); ?>

Error Handling

The API uses standard HTTP status codes to indicate success or failure of requests.

Common Status Codes

  • 200 OK - Request succeeded
  • 202 Accepted - Job successfully queued
  • 400 Bad Request - Invalid request parameters
  • 401 Unauthorized - Invalid or missing API key
  • 403 Forbidden - API key valid but insufficient permissions
  • 429 Too Many Requests - Rate limit exceeded
  • 500 Internal Server Error - Server error

Error Response Format

{ "error": { "code": "rate_limit_exceeded", "message": "Rate limit exceeded. Please try again in 45 seconds.", "details": { "limit": 100, "remaining": 0, "reset": 1642178340 } } }