# RevClamp ContactPulse - B2B Domain Contact & DNS Enricher (`revclamp/b2b-domain-contact-enricher-mcp`) Actor

Deterministic B2B company domain contact, email, social profile, and DNS/MX/SPF/DMARC security posture enricher for AI agents (MCP) and GTM pipelines.

- **URL**: https://apify.com/revclamp/b2b-domain-contact-enricher-mcp.md
- **Developed by:** [RevClamp Enterprise](https://apify.com/revclamp) (community)
- **Categories:** Lead generation, AI, Business
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## RevClamp ContactPulse - B2B Domain Contact, RFC 9116 & Deliverability Enricher (`@revclamp/b2b-domain-contact-enricher-mcp`)

[![RevClamp ContactPulse Banner](https://revclamp.com/assets/revclamp-product-banner.png)](https://revclamp.com)

Deterministic B2B Domain Contact, RFC 9116 `/.well-known/security.txt`, Schema.org `ContactPoint` JSON-LD, de-obfuscated email & social profile extractor, and DNS-over-HTTPS (`MX` / `SPF` / `DMARC`) deliverability posture enricher over **Model Context Protocol (MCP `2025-06-18` `stdio`)** and **Apify Pay-per-Event**.

> **Independent Tool Notice:** RevClamp ContactPulse is an independent B2B intelligence tool developed by RevClamp Engineering. All company domains and trademarks referenced in examples belong to their respective owners.

***

### Key Capabilities

1. **Multi-Surface B2B Role Contact Extraction & De-Obfuscation:**
   - Parses Schema.org `Organization` / `ContactPoint` JSON-LD blocks, `mailto:` anchors, Cloudflare `data-cfemail` hex-encoded strings, and HTML entity / bracketed obfuscations (`[at]`, `(at)`, `&#64;`, `&#x40;`).
   - Automatically prunes false-positive tracker/asset addresses (`*@*.ingest.sentry.io`, `*@sentry.wixpress.com`, `example.com`, image filename collisions like `logo@2x.png`).
   - Classifies every verified contact into canonical B2B functional roles: `SECURITY`, `PRIVACY_DPO`, `BILLING_FINANCE`, `LEGAL`, `SUPPORT`, `SALES`, `PRESS`, and `GENERAL`.
2. **RFC 9116 `/.well-known/security.txt` & `/security.txt` Compliance Parser:**
   - Parses `Contact:`, `Expires:`, `Encryption:`, `Acknowledgments:`, `Policy:`, `Hiring:`, `Canonical:`, and `Preferred-Languages:`.
   - Evaluates expiration timestamps into deterministic statuses (`VALID_ACTIVE`, `EXPIRED`, `MISSING_EXPIRES`, `NOT_FOUND`).
3. **DNS-over-HTTPS (`DoH`) `MX` / `SPF` / `_dmarc` Deliverability Posture:**
   - Resolves `MX`, `TXT` (`v=spf1`), and `_dmarc.<domain>` (`v=DMARC1`) via Cloudflare and Google DNS-over-HTTPS (`https://cloudflare-dns.com/dns-query` & `https://dns.google/resolve`).
   - Fingerprints the enterprise email gateway (`GOOGLE_WORKSPACE`, `MICROSOFT_365`, `PROTONMAIL`, `FASTMAIL`, `PROOFPOINT`, `MIMECAST`, `AMAZONSES`, `CUSTOM_MX`, `NONE`) and computes a deterministic `deliverabilityGrade` (`A+`, `A`, `B`, `C`, `D`, `F`).
4. **Zero-Trust SSRF Port-443 Guard & 30 KB MCP Envelope Ceiling:**
   - Enforces `https:` port `443` only, blocks IPv4/IPv6 literals, `localhost`, `.local`, `.internal`, and cloud metadata hosts, re-validates every `3xx` redirect target (`redirect: "manual"`), and enforces a `30,000`-byte UTF-8 JSON-RPC ceiling with automatic `rcd1_` cursor rewind.

***

### 1. Apify Store Cloud, Clay / n8n & REST API Quick Start

Run **RevClamp ContactPulse** in the cloud on [Apify Store (`revclamp/b2b-domain-contact-enricher-mcp`)](https://apify.com/revclamp/b2b-domain-contact-enricher-mcp) with zero local setup, or trigger it directly from **Clay**, **n8n**, **Make**, or any HTTP pipeline via the Apify REST API:

```bash
curl -s -X POST \
  "https://api.apify.com/v2/acts/revclamp~b2b-domain-contact-enricher-mcp/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "stripe.com, linear.app, cloudflare.com",
    "includeDnsPosture": true,
    "includeSecurityTxt": true,
    "maxResults": 5
  }'
```

#### Transparent Pay-per-Event Pricing & Free-Tier Credit Math

- **Event Price:** `$0.0020` per enriched B2B domain profile (`domain-contact-profile-enriched`).
- **What `$1.00` in Free Apify Credits Gets You:** Approximately **`~500` enriched B2B domain profiles** with role-classified organizational contacts (`SECURITY`, `PRIVACY_DPO`, `BILLING_FINANCE`, `LEGAL`, `SUPPORT`, `SALES`, `PRESS`), RFC 9116 `/.well-known/security.txt` audit, and DNS-over-HTTPS `MX`/`SPF`/`DMARC` deliverability grades.
- **Zero-Waste Billing Guarantee:** You pay **`$0.00`** on `EMPTY_RESULT`, `INVALID_INPUT`, or upstream rate limits. Only verified, non-empty B2B domain profiles delivered to your Dataset are billed.

***

### 2. Local AI Agent & MCP Server Quick Start (`stdio` & CLI)

Run directly via `npx` (supports natural parameter aliases `query`, `domain`, `domains`, or `url`):

```bash
## Start MCP JSON-RPC 2.0 server over stdio
npx -y @revclamp/b2b-domain-contact-enricher-mcp --mcp-stdio

## Run built-in self-test
npx -y @revclamp/b2b-domain-contact-enricher-mcp --self-test

## Inspect exposed MCP tools
npx -y @revclamp/b2b-domain-contact-enricher-mcp --list-tools

## Call a tool directly from CLI
npx -y @revclamp/b2b-domain-contact-enricher-mcp --call resolve_b2b_domain_contacts '{"domain":"stripe.com"}'
```

#### Claude Desktop / Cursor / Windsurf Configuration

```json
{
  "mcpServers": {
    "revclamp-contactpulse": {
      "command": "npx",
      "args": ["-y", "@revclamp/b2b-domain-contact-enricher-mcp", "--mcp-stdio"]
    }
  }
}
```

***

### Exposed MCP Tools (3)

| Tool Name | Description |
|---|---|
| `resolve_b2b_domain_contacts` | Enriches 1 to 25 B2B domains with role-classified emails (`SECURITY`, `PRIVACY_DPO`, `BILLING_FINANCE`, `LEGAL`, `SUPPORT`, `SALES`, `PRESS`, `GENERAL`), RFC 9116 `security.txt` disclosures, verified social links, and DNS `MX`/`SPF`/`DMARC` deliverability grades. |
| `inspect_domain_dns_and_security_txt` | Performs a focused RFC 9116 `/.well-known/security.txt` and DNS-over-HTTPS (`MX`, `SPF`, `_dmarc`) inspection for a single B2B domain. |
| `verify_email_deliverability_posture` | Evaluates an email address or domain against `MX` gateway availability, `SPF` qualifier strictness (`-all` vs `~all`), `DMARC` policy (`p=reject` / `quarantine` / `none`), and role-account classification. |

***

### Companion Web Playground & Ecosystem Links

- **Interactive Browser Playground:** <https://revclamp.com/tools/b2b-domain-contact-enricher>
- **RevClamp MCP Hub:** <https://revclamp.com/mcp#mcp-contactpulse-companion-card>

***

### Data Processing & B2B Role-Mailbox Policy

- **Role-Based organizational mailboxes only (No Personal Data):** ContactPulse strictly extracts and returns organizational role and functional mailboxes (`SECURITY`, `PRIVACY_DPO`, `BILLING_FINANCE`, `LEGAL`, `SUPPORT`, `SALES`, `PRESS`, and generic functional inboxes such as `info@`, `contact@`, `hello@`, `office@`, `team@`). Personal or named individual email addresses (`firstname.lastname@`) are automatically excluded at extraction time (`PERSONAL_MAILBOX_EXCLUDED_BY_B2B_ROLE_POLICY`).
- **Public Standards Only:** All signals are resolved in real time from public RFC 9116 `/.well-known/security.txt`, public DNS `MX`/`SPF`/`_dmarc` records, and public Schema.org `Organization` / `ContactPoint` metadata. Offline fixture samples (`SAMPLE_FIXTURE_DIRECTORY`) are used only in local self-tests or the preview playground and are never billed.

***

### License

MIT © [RevClamp Enterprise](https://revclamp.com)

# Actor input Schema

## `query` (type: `string`):

Single domain or comma/space-separated B2B domains/URLs (e.g. 'stripe.com', 'linear.app, cloudflare.com, shopify.com, github.com').

## `roleFilter` (type: `string`):

Filter extracted contacts by functional B2B department role.

## `includeDnsPosture` (type: `boolean`):

Resolve MX gateway provider, SPF policy, and DMARC enforcement posture via DNS-over-HTTPS.

## `includeSecurityTxt` (type: `boolean`):

Parse RFC 9116 security.txt fields (Contact, Expires, Encryption, Policy, Acknowledgments, Hiring).

## `maxResults` (type: `integer`):

Maximum number of enriched B2B domain profiles to return in a single call (bounded to 1..25).

## `pageToken` (type: `string`):

Opaque deterministic pagination cursor (rcd1\_...) returned by a previous call to resume fetching the next slice.

## Actor input object example

```json
{
  "query": "stripe.com, linear.app, cloudflare.com, shopify.com, github.com",
  "roleFilter": "ANY",
  "includeDnsPosture": true,
  "includeSecurityTxt": true,
  "maxResults": 5,
  "pageToken": ""
}
```

# Actor output Schema

## `domainProfiles` (type: `string`):

Normalized B2B domain contact profiles with classified role emails, RFC 9116 security.txt fields, verified social profiles, and DNS MX/SPF/DMARC deliverability grades.

## `runSummary` (type: `string`):

Structured execution summary, pagination cursor, and Pay-per-Event billing receipt.

# 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 = {
    "query": "stripe.com, linear.app, cloudflare.com, shopify.com, github.com",
    "maxResults": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("revclamp/b2b-domain-contact-enricher-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 = {
    "query": "stripe.com, linear.app, cloudflare.com, shopify.com, github.com",
    "maxResults": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("revclamp/b2b-domain-contact-enricher-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 '{
  "query": "stripe.com, linear.app, cloudflare.com, shopify.com, github.com",
  "maxResults": 5
}' |
apify call revclamp/b2b-domain-contact-enricher-mcp --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,revclamp/b2b-domain-contact-enricher-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/CskfFeyILEx4TMlHN/builds/ng5e5Jxh62uyT6x1t/openapi.json
