B2B フォームでフリーメールドメインをブロックする:4,768 ドメインのリストと無料 API

B2B フォームでフリーメールドメインをブロックする:4,768 ドメインのリストと無料 API
Unif Cookbooks team
Unif Cookbooks team

HubSpot フォームがブロックする 4,768 件のフリーメールドメインの中身、Gmail 登録を弾くと失敗する場面、ルールを適用する無料 API。

要点:HubSpot のフォームは、「Block free email providers」(フリーメールプロバイダーをブロック)というチェックボックス 1 つでフリーメールアドレスを拒否でき、その裏には公開された 4,768 ドメインのリストがあります。私たちはその同じリストを、無料 API(GET /email/check、POST /email/check/batch、1 回あたり 0 クレジット)、ブラウザ内で動くチェッカー、オープンソースの npm パッケージにしました。これで、フォームが適用しているルールをサインアップのコード、CRM のクリーンアップジョブ、AI エージェントでも実行できます。このリストは明らかなケースには強い一方で、予測できるパターンで間違えます。誰かをブロックする前に、その両方を把握しておきましょう。

B2B チームがフリーメールドメインをブロックする理由は 1 つです。jane@northwind.io からのデモ申し込みならどの会社からの問い合わせかがわかりますが、jane1987@gmail.com からではわかりません。HubSpot はこれをフォームの設定として提供しており、その裏にあるリストをドキュメントで公開し、CSV でダウンロードできるようにしています。

ただし、この設定が及ぶのは HubSpot のフォームだけです。自社のサインアップフロー、パートナーから送られてきたリードリスト、エージェントがエンリッチしている CRM のエクスポートは、どれもこの設定を通りません。この記事は、そのギャップを埋めるためのものです。

リストに含まれているもの

CSV(2026 年 10 月 10 日時点のスナップショット)を読み込み、中身をグループに分けました。UnifAPI は HubSpot と提携関係にありません。リストは HubSpot のもので、グループ分けは私たちによるものです。

グループ例知っておくべきこと
グローバルなウェブメールgmail.com、googlemail.com、yahoo.com、outlook.com、hotmail.com、icloud.com、aol.com誰もが想定するケース。
国別のバリエーションyahoo.* が 51 件、outlook.* が 33 件、live.* が 24 件、hotmail.* が 22 件yahoo.com だけで照合すると、yahoo.co.uk や yahoo.co.jp を見逃す。
地域プロバイダーweb.de、gmx.de、t-online.de、orange.fr、libero.it、mail.ru、yandex.ru、qq.com、163.com、naver.com米国外の実際の流量の大半。
ISP のメールボックスcomcast.net、att.net、verizon.net、btinternet.com、shaw.ca、bigpond.com個人向けだが、今も業務で使う小規模事業者がいる。
プライバシー重視protonmail.com、duck.com、fastmail.com、hushmail.com、posteo.de技術系の購買担当者があえて使うことが多い。
旧来のバニティドメインmail2*.com ドメインが 1,264 件、ほかに from*.com や city-of-* のポータルリストの 4 分の 1 を占めるが、実際のトラフィックはほぼない。
一部の使い捨てアドレスmailinator.com、yopmail.com、maildrop.cc部分的にしかカバーしていない。

リストの規模は、ほとんどが歴史の産物です。mail2*.com のバニティドメインだけで、4,768 件中 1,264 件を占めます。残しておいても損はありませんが、「4,768 ドメイン」という数字は、今日の個人用メールをどれだけカバーしているかを実態より大きく見せています。その大部分を担っているのは最初の 2 行です。

フリーメールドメインのブロックが裏目に出る場面

ブロックは大ざっぱな手段です。有効にする前に、次の 5 つの失敗パターンを自社のファネルに照らして確認してください。

  1. 個人アドレスを使う本物の購買者。 創業者、コンサルタント、週末に製品を評価している人は Gmail を使います。一律にブロックすると、最も意欲が高まっている瞬間に彼らを追い返すことになります。
  2. ISP やプライバシー重視のメールボックス。 comcast.net を使う 3 人の代理店も、protonmail.com を使うセキュリティエンジニアもブロックされます。どちらも一般消費者ではありません。
  3. 新しいプロバイダーはすり抜ける。 proton.me、pm.me、tuta.com、hey.com はリストにありません。guerrillamail.com もないので、使い捨てメールのリストとしても使えません。
  4. 「ビジネス」は「配信可能」という意味ではない。 リストにないドメインでも、タイプミス、パーキングドメイン、バウンスするメールボックスの可能性があります。ここでは MX レコードの確認も、メールサーバーとの通信も行いません。
  5. サブドメインは照合されない。 ルールは完全一致です。berlin.de はリストにありますが、senate.berlin.de はフリーメールとして扱われません。企業や政府機関のサブドメインにとっては正しいデフォルトですが、mail.yahoo.com のようなエイリアスには個別のエントリーが必要になります。

ほとんどの B2B チームでうまくいくパターンは、ブロックせずに振り分けることです。フリーメールドメインでの登録はセルフサーブやナーチャリングの経路に通して会社名を尋ね、営業のフォローアップはビジネスドメインに限定します。ロールアドレス(info@、sales@、support@)にも専用の経路を用意しましょう。ビジネス用のアドレスではありますが、特定の誰かが読んでいるわけではないからです。

同じルールを適用する 4 つの方法

場所使うもの備考
フォームやサインアップのハンドラーGET /email/check1 件のアドレスを受け取り、判定結果を返す
リードリストや CRM のエクスポートPOST /email/check/batch1 回の呼び出しで最大 1,000 件、入力順
企業ドメインの列GET /email/domains/{domain}ドメイン、アドレス、URL のいずれも受け付ける
自社のコードやデータウェアハウスGET /email/free-domains、または npm パッケージリストを同期してオフラインで実行

4 つのエンドポイントはすべて無料です。標準の billing ブロックを credits_charged: 0 で返し、残高ゼロのワークスペースからでも呼び出せます。ネットワーク越しの照会を行わないため、ゲートウェイ自体と同じ速さで応答します。

1 件のアドレス

curl -s "https://api.unifapi.com/email/check?email=Jane.Doe@Gmail.com" \
  -H "Authorization: Bearer $UNIFAPI_API_KEY"
{
  "request_id": "…",
  "data": {
    "input": "Jane.Doe@Gmail.com",
    "email": "jane.doe@gmail.com",
    "local_part": "jane.doe",
    "domain": "gmail.com",
    "is_valid_syntax": true,
    "is_free_provider": true,
    "is_role_account": false,
    "verdict": "free",
    "invalid_reason": null
  },
  "billing": {
    "credits_charged": 0,
    "records_charged": 0,
    "balance_remaining": 0,
    "truncated_due_to_balance": false
  }
}

分岐に使うフィールドは verdict で、値は business、free、invalid のいずれかです。invalid の場合は invalid_reason に理由(missing_at_sign、invalid_local_part、invalid_domain、too_long)が入るので、「無効なメールアドレス」で済ませずに、役に立つフォームエラーを表示できます。

リードリスト

const res = await fetch("https://api.unifapi.com/email/check/batch", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.UNIFAPI_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ emails: leads.map((lead) => lead.email) }),
});
const { data } = await res.json();

const business = leads.filter((_, i) => data.results[i].verdict === "business");
console.log(data.summary); // { total, business, free, invalid, role_accounts }

結果は重複も含めて入力順に返るので、ルックアップテーブルなしで手元の行とそのまま突き合わせられます。

オフラインで、自社のコードの中で

リストと分類器は、依存関係ゼロのオープンソースパッケージ @unifapi/email-filter としても公開しています。

import { checkEmail } from "@unifapi/email-filter";

if (checkEmail(form.email).verdict === "free") {
  return "仕事用のメールアドレスをご利用ください。";
}

Node、エッジランタイム、ブラウザで動作し、ほかの言語向けに生のリストを JSON とプレーンテキストでも同梱しています。バージョンを固定し、リストが変わったら更新してください。スナップショットの日付は FREE_EMAIL_DOMAINS_SNAPSHOT_DATE としてエクスポートされています。

コードを書かずに使う

フリーメールドメインチェッカーは、同じパッケージをブラウザ内で実行します。CSV の列、Jane Doe <jane@acme.io> のようなメールヘッダー、単純なリストのいずれでも、最大 10,000 件のアドレスやドメインを貼り付けると、ビジネス、フリーメール、無効に振り分け、ロールアドレスにフラグを立て、重複を取り除いて CSV で書き出します。貼り付けた内容がアップロードされることはありません。

エージェント用プロンプトにする

UnifAPI を MCP で接続していれば、エージェントがバッチエンドポイントを自分で実行できます。

これはウェビナー申込者のエクスポートです。UnifAPI のメールチェックですべてのメールアドレスを分類し、3 つのリストを返して。ドメインごとにまとめたビジネス用のアドレス、会社名を尋ねられるよう本人の名前を添えたフリーメールのアドレス、理由付きの無効な行。ロールアドレスは別にフラグを立てて、何も送信しないで。

チェックには費用がかからないので、エージェントはエンリッチメントにクレジットを使う前に、どのリストにもこのチェックをかけられます。LinkedIn 企業アナライザーと組み合わせれば、ビジネスドメインの背後にある企業の規模を把握できます。

次に読むもの

フリーメールドメインチェッカー - リストを貼り付けて、ビジネス用と個人用のメールアドレスを無料で振り分け。

メールフィルター API - 4 つの無料エンドポイントと、そのパラメータとレスポンススキーマ。

GitHub の @unifapi/email-filter - オープンソースのパッケージと生のリスト。