SaaS のアカウント解約時に HubSpot のコンタクト情報を完全削除する方法

SaaS を運営していると避けて通れないのがユーザーの解約処理でしょう。昨今のデータプライバシー規制の厳格化を受けて、単純にアカウントを無効化するだけでは済まない時代になりました。

今回の記事では、ユーザーがアカウントを削除した際に HubSpot のコンタクト情報を完全削除する方法について、実際に Shifter にて実装した内容をベースに解説します。

「復元可能な削除」と「完全な削除」の違い

HubSpot ではコンタクトの削除を2種類から選べます。1つは 90 日間の猶予期間を持つ「復元可能な削除」で、もう1つが「完全な削除」です。

復元可能な形での削除を選ぶと、ユーザーが再申し込みしてきた時など、コンタクトを復元させる必要が生じた時に関連情報まで復元できます。過去のコミュニケーション履歴やコンタクトデータなども復元されるため、 CRM などの要件では復元可能な形を選ぶことが一般的です。。

しかしユーザー情報削除の条件が「GDPR(一般データ保護規則)に準拠した完全な削除」である場合は、復元可能な形での削除を選ぶことができません。これは 90 日間は復元可能な形として HubSpot 内部にデータが残ることなどが理由です。GDPR の要件を満たすには、HubSpot が提供する GDPR 削除 API を使用しなければなりません。

完全な削除には、直接 API を呼び出す必要がある

HubSpot の GDPR 削除は REST API でのみ提供されています。2025年10月 時点では、公式の TypeScript SDK には含まれていませんでした。そのため、利用するには直接 HTTP リクエストを送る必要があります。

const executeGdprDeletion = async (contactId: string, token: string): Promise<void> => {
  const gdprDeleteResponse = await fetch(
    `https://api.hubapi.com/crm/v3/objects/contacts/${contactId}/gdpr-delete`,
    {
      method: "POST",
      headers: {
        Authorization: `Bearer ${token}`,
        "Content-Type": "application/json",
      },
    }
  );

  if (!gdprDeleteResponse.ok) {
    const errorText = await gdprDeleteResponse.text();
    throw new Error(`GDPR削除に失敗: ${gdprDeleteResponse.status} - ${errorText}`);
  }
};

次に、 HubSpot SDK を利用してコンタクトの取得などの前処理を追加しましょう。

export const removeHubSpotUser = async (email: string): Promise<void> => {
  const hubspotClient = new hubspot.Client({ accessToken: token });
  
  try {
    // メールアドレスでコンタクトを検索
    const searchResponse = await hubspotClient.crm.contacts.searchApi.doSearch({
      filterGroups: [{
        filters: [{
          propertyName: "email",
          operator: "EQ",
          value: email
        }]
      }],
      properties: ["id", "email"],
      limit: 1
    });

    if (searchResponse.results.length === 0) {
      console.log(`コンタクトが見つかりません: ${email}`);
      return;
    }

    const contactId = searchResponse.results[0].id;

    await executeGdprDeletion(contactId, token);
    console.log(`GDPR削除が完了しました: ${contactId}`);

  } catch (error) {
    console.error('HubSpotユーザー削除でエラー:', error);
    throw error;
  }
};

削除によるデータへの影響範囲を確認する

実装時に見落としがちなのが、削除されたデータの影響範囲です。HubSpot のコンタクトを完全に削除すると、関連する取引、チケット、タスクなどのデータも一緒に削除されます。

そのため、本当に完全な削除を選ぶのか、ユーザーからの要望時のみ手動で対応するのかなど、個人情報の取り扱いについて事前に管理部や営業チームと合意形成を行いましょう。

まとめ

GDPR 準拠のデータ削除は現代の SaaS にとって避けて通れない要件といえるでしょう。HubSpot の API を組み込む場合、通常のアーカイブ機能だけでは不十分で、専用の GDPR 削除 API を使用する必要があります。

データプライバシー規制は今後も厳格化していくと予想されます。早めに適切な削除プロセスを整備することで、将来的なコンプライアンスリスクを軽減できます。

Recommend Articles

おすすめの記事