# EmailIQ — Email Intelligence (MCP) (`marcelocarlos/emailiq-mcp`) Actor

Email intelligence for AI agents via MCP: syntax, MX, SPF, DMARC, disposable, role, provider, and 0-100 score. $0.01 per analyze\_email call.

- **URL**: https://apify.com/marcelocarlos/emailiq-mcp.md
- **Developed by:** [Marcelo](https://apify.com/marcelocarlos) (community)
- **Categories:** AI, Lead generation, Developer tools
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 email analyzeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## EmailIQ — Email Intelligence (MCP)

> Instant email + domain intelligence for AI agents: syntax, MX, SPF, DKIM, DMARC, disposable detection, role accounts, provider, and a 0–100 score — one MCP tool call.

**[View on Apify Store](https://apify.com/marcelocarlos/emailiq-mcp)** | **[MCP endpoint](https://marcelocarlos--emailiq-mcp.apify.actor/mcp)**

This Actor runs `EmailIntelligence.analyze()` **in-process**. It does **not** call `https://emailiq.dev`, and it has **no** x402 / wallet code. Billing is Apify **pay-per-event** only.

***

### When to call

| Persona | Scenario |
|---------|----------|
| **Outbound / SDR agent** | Before cold email, check that the address is syntactically valid, the domain accepts mail (MX), isn’t disposable, and the domain publishes SPF/DKIM/DMARC — then use the score as a gate. |
| **Growth / list hygiene** | Clean signup or CRM lists: drop role accounts (`info@`, `support@`), temp mailboxes, and low-score domains before a campaign. |
| **Security / trust agent** | Decide whether a contact or signup domain looks legitimate (auth records + provider) without running a full mailbox SMTP probe. |

***

### Example AI prompts

Copy-paste into Claude, Cursor, or any MCP client connected to this Actor:

1. **Qualify before outreach**\
   `Analyze the email jane.doe@acme.com with EmailIQ. Tell me if I should send a cold email: syntax, MX, SPF/DKIM/DMARC, disposable/role flags, provider, and score.`

2. **Filter a batch**\
   `Run analyze_email on these addresses and return only those with score ≥ 80 and is_disposable=false: a@gmail.com, b@mailinator.com, support@stripe.com`

3. **Domain trust check**\
   `Check founder@startup.io — does the domain have SPF, DKIM, and DMARC? What’s the mail provider and delivery score?`

***

### MCP tool: `analyze_email`

| Input | Type | Required | Price |
|-------|------|----------|-------|
| `email` | string | yes | **$0.01** per successful call (`email-analyzed`) |

**Output fields:**

| Field | Type |
|-------|------|
| `email` | string |
| `valid_syntax` | boolean |
| `domain_exists` | boolean | null |
| `mx_records` | string\[] | null |
| `spf_enabled` | boolean | null |
| `dkim_enabled` | boolean | null |
| `dmarc_enabled` | boolean | null |
| `is_disposable` | boolean | null |
| `is_role_account` | boolean | null |
| `mail_provider` | string | null |
| `score` | integer (0–100) |
| `processing_time_ms` | number |

#### Example output

```json
{
  "email": "someone@microsoft.com",
  "valid_syntax": true,
  "domain_exists": true,
  "mx_records": ["microsoft-com.mail.protection.outlook.com"],
  "spf_enabled": true,
  "dkim_enabled": true,
  "dmarc_enabled": true,
  "is_disposable": false,
  "is_role_account": false,
  "mail_provider": "microsoft",
  "score": 100,
  "processing_time_ms": 65.825
}
```

`dkim_enabled` is a **presence** check on common selectors (`default`, `google`, `selector1`, `selector2`, `k1`) at `{selector}._domainkey.<domain>` — not cryptographic signature validation (same spirit as `spf_enabled` / `dmarc_enabled`). Note: some providers (e.g. consumer Gmail) only publish date-rotated selectors outside this common set, so `dkim_enabled` may be `false` even when the domain signs mail.

***

### How EmailIQ compares

| Capability | Pure email validators | Pure domain / DNS checkers | **EmailIQ** |
|------------|----------------------|----------------------------|-------------|
| Syntax + disposable + role | Yes | Rarely | **Yes** |
| MX / domain exists | Sometimes | Yes | **Yes** |
| SPF + DKIM + DMARC | Rarely | Often SPF/DMARC only | **Yes (all three)** |
| Per-address delivery score (0–100) | Sometimes | No | **Yes** |
| MCP / AI-agent native | Rare | Rare | **Yes** |
| Pay per call (no SaaS seat) | Varies | Varies | **$0.01 / call** |

EmailIQ combines **mailbox-oriented signals** (syntax, disposable, role, score) with **domain auth intelligence** (MX + SPF/DKIM/DMARC + provider) in one tool — so agents don’t stitch a validator and a DNS checker together.

***

### Pricing

| Event | When | Price |
|-------|------|-------|
| `email-analyzed` | Once per successful `analyze_email` call | **$0.01 USD** |

Configured in `.actor/pay_per_event.json`. Charged with `Actor.charge(event_name="email-analyzed")`.

***

### Connect (Standby MCP)

```json
{
  "mcpServers": {
    "emailiq": {
      "url": "https://marcelocarlos--emailiq-mcp.apify.actor/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_APIFY_API_TOKEN>"
      }
    }
  }
}
```

Transport: **Streamable HTTP** (`webServerMcpPath: /mcp`).

***

### Local development

```bash
cd apify-actor
python3 -m venv .venv && .venv/bin/pip install -r requirements.txt

## Smoke-test intelligence only (no MCP server):
ACTOR_TEST_PAY_PER_EVENT=true .venv/bin/python scripts/local_analyze.py user@gmail.com

## Run MCP Actor locally (Standby-style HTTP on port 3000):
ACTOR_TEST_PAY_PER_EVENT=true APIFY_CONTAINER_PORT=3000 .venv/bin/python -m my_actor
```

***

### Architecture notes

- **Standby**: one long-lived process serves many MCP requests until idle timeout; in-memory `TTLCache` (300s) is intentional and effective within that lifetime.
- **aiodns**: resolver is created lazily on the running asyncio loop; startup runs an early MX smoke test against `gmail.com`.
- **Isolation**: packaged under `apify-actor/` so production EmailIQ (FastAPI + x402) is untouched.
- **Score**: syntax 25 + domain 15 + MX 20 + SPF/DKIM/DMARC 10 each + not-disposable 5 + not-role 5 (capped at 100).

***

### Status

Status: Live on Apify Store. Published, pay-per-event billing active ($0.01 USD per successful `analyze_email` call).

***

### SEO Keywords

email validation API, email intelligence MCP, SPF DMARC DKIM checker, disposable email detector, role account email detection, MX lookup API, email deliverability score, AI agent email validation, MCP email server, email reputation API, domain email authentication check, Apify email intelligence, pay per event email API, cold email list cleaning, B2B email quality score

# Actor input Schema

## `email` (type: `string`):

Email address to analyze (used when running the Actor in standard/non-MCP mode). Primary interface is the MCP tool analyze\_email.

## Actor input object example

```json
{}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("marcelocarlos/emailiq-mcp").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("marcelocarlos/emailiq-mcp").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call marcelocarlos/emailiq-mcp --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,marcelocarlos/emailiq-mcp"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/8Q43Raj6B24aD44DG/builds/GSdHoTCrjx2KnyLbq/openapi.json
