概要
HubSpotツールはHubSpot CRM APIと連携し、ワークフローからコンタクトの管理と取引(Deal)の参照を行います。コンタクトツールはメールアドレスをキーにするため、Search API(レート制限あり)を経由せずにレコードを照合できます。取引ツールはIDでの取得のほか、名前・ステージ・担当者・クローズ予定日・作成日・任意のプロパティで検索できます。会社・担当者ツールは取引が持つID(関連会社、hubspot_owner_id)を会社名・ドメイン・メールアドレスに解決し、ノート・タスクツールは取引自体を変更せずにエンゲージメントを取引へ紐付けます。
主な機能
HUBSPOT_UPSERT_CONTACT- コンタクトを作成します。同じメールアドレスのコンタクトが既にある場合は更新します。カスタムプロパティにも対応しています。
HUBSPOT_GET_CONTACT- オブジェクトIDまたはメールアドレスでコンタクトを取得します。該当するコンタクトがない場合はエラーにせず
found: falseを返します。
- オブジェクトIDまたはメールアドレスでコンタクトを取得します。該当するコンタクトがない場合はエラーにせず
HUBSPOT_GET_DEAL- オブジェクトIDで取引を取得します。関連するコンタクト・会社のIDも合わせて取得できます。該当する取引がない場合はエラーにせず
found: falseを返します。
- オブジェクトIDで取引を取得します。関連するコンタクト・会社のIDも合わせて取得できます。該当する取引がない場合はエラーにせず
HUBSPOT_SEARCH_DEALS- 名前・ステージ・パイプライン・担当者・クローズ予定日や作成日の範囲で取引を検索します。フリーテキスト検索と任意プロパティのフィルタにも対応し、ページ分割で返します。
HUBSPOT_GET_COMPANY- オブジェクトIDで会社を取得します。関連するコンタクト・取引のIDも合わせて取得できます。該当する会社がない場合はエラーにせず
found: falseを返します。
- オブジェクトIDで会社を取得します。関連するコンタクト・取引のIDも合わせて取得できます。該当する会社がない場合はエラーにせず
HUBSPOT_GET_OWNER- 担当者IDまたはメールアドレスで担当者を取得し、氏名・メールアドレス・ユーザーIDを返します。該当する担当者がない場合はエラーにせず
found: falseを返します。
- 担当者IDまたはメールアドレスで担当者を取得し、氏名・メールアドレス・ユーザーIDを返します。該当する担当者がない場合はエラーにせず
HUBSPOT_LIST_OWNERS- アカウントの担当者を一覧します。メールアドレスでの絞り込みや、アーカイブ済み担当者のみの取得もできます。ページ分割で返します。
HUBSPOT_CREATE_NOTE- ノートを作成して取引・コンタクト・会社に紐付けます。タイムスタンプと作成者を指定できます。
HUBSPOT_CREATE_TASK- 期限・ステータス・優先度・担当者を指定してタスクを作成し、取引・コンタクト・会社に紐付けます。
認証
設定手順についてはHubSpot認証情報ページをご確認ください。例: コンタクトを検索してから作成・更新する
例: 担当者の今月クローズ予定の取引を一覧する
例: 新規取引の担当者と会社を解決する
例: 取引に商談メモとフォローアップタスクを記録する
入力パラメータ
HUBSPOT_UPSERT_CONTACT
名前付きパラメータを空にした場合は送信されません。HubSpot は空文字を「プロパティをクリア」と解釈するため、クリアは
properties から明示的に指定してください({"firstname": null})。キーが重複した場合、名前付きパラメータが properties より優先されます。properties.email に email パラメータと異なる値を指定するとエラーになります(大文字小文字の違いのみは同一として扱います)。
出力は result.id / result.created / result.properties と、生のレスポンス result.contact です。
HUBSPOT_GET_CONTACT
出力は
result.found / result.id / result.properties / result.associations と、生のレスポンス result.contact です。
HUBSPOT_GET_DEAL
出力は
result.found / result.id / result.properties / result.associations と、生のレスポンス result.deal です。
HUBSPOT_SEARCH_DEALS
すべて任意です。名前付きの条件はAND で結合されます。
出力は
result.deals(各要素に id と properties)、result.count、result.total、result.next_after(最終ページでは null)です。
HUBSPOT_GET_COMPANY
出力は
result.found / result.id / result.properties / result.associations と、生のレスポンス result.company です。
HUBSPOT_GET_OWNER
出力は
result.found / result.id / result.email / result.first_name / result.last_name / result.user_id / result.archived と、生のレスポンス result.owner です。
HUBSPOT_LIST_OWNERS
すべて任意です。
出力は
result.owners(各要素に id、email、first_name、last_name、user_id、archived)、result.count、result.next_after(最終ページでは null)です。
HUBSPOT_CREATE_NOTE
出力は
result.id / result.properties と、生のレスポンス result.note です。
HUBSPOT_CREATE_TASK
出力は
result.id / result.properties と、生のレスポンス result.task です。
備考
- 該当なしはエラーではない:
HUBSPOT_GET_CONTACT、HUBSPOT_GET_DEAL、HUBSPOT_GET_COMPANY、HUBSPOT_GET_OWNERはレコードが見つからない場合にresult.found = falseを返します。「検索して、なければ作成する」を通常の条件分岐ステップとして組めます。 - ノートとタスクは取引を編集しない: エンゲージメントは独立したレコードで、指定した取引・コンタクト・会社に関連付けられます。取引自体のフィールドは書き換えませんが、HubSpot がアクティビティ由来のプロパティ(最終アクティビティ日など)を更新するため、それらを条件にしたワークフローには影響します。Engagements API が作成に必要と案内しているスコープは
crm.objects.contacts.writeで、crm.objects.deals.writeではありません。 - エンゲージメントの日時:
timestampとdue_dateはISO 8601またはエポックミリ秒を受け付けます。時刻のない日付はUTCの0時として扱うため、時刻が重要な場合はオフセット付きで時刻を明示してください(2026-10-08T09:00:00+09:00)。 - ツールは作成をリトライしない: ノートやタスクの作成の HTTP 呼び出しは、失敗の理由を問わずツール自身は再送しません(再送するとレコードが二重に作成される可能性があるためです)。ステップに
retryを設定した場合、429 のような明確な拒否の後はステップが再実行されますが、結果が不明な失敗(ツール内でのタイムアウト、接続断、HubSpot の 5xx)ではステップ側のretryも適用されません。ただし 1 点注意: ステップのtimeoutがリクエスト途中で発火した場合はツールでなくランナーがエラーを出すため、他のエラーと同様にリトライされます。そのようなステップにはretryを付けないか、ステップの timeout をツール自身の 30 秒より十分長くしてください。ステップを再実行する前に、HubSpot上でレコードが作成されていないか確認してください。 - 担当者IDとユーザーIDの違い:
hubspot_owner_idは設定 → ユーザーに表示されるユーザーIDとは別の値です。担当者IDから氏名・メールアドレスを引くにはHUBSPOT_GET_OWNER、特定の人の担当者IDを探すにはHUBSPOT_LIST_OWNERSを使ってください。 - 検索の制限: HubSpotの検索は1リクエストあたり最大6フィルタ(名前付き条件と
filtersの合計)、1ページ最大200件、1クエリ最大10,000件で、Search APIにはアカウントあたり毎秒5リクエストの独立したレート制限があります。検索インデックスは書き込みから数秒遅れることがあるため、直前に作成した取引が含まれない場合があります。 - 日付プロパティ: HubSpotの
closedateとcreatedateは日時型です。範囲指定の入力はエポックミリ秒へ自動変換されます。filtersの値はそのまま送られるため、エポックミリ秒で指定するのが確実です。 - 差分取得:
create_date_fromは「以上」(>=)で比較します。前回実行で取得した最新取引のcreatedateをそのまま渡すと、その取引が再度返るため、後続でidによる重複排除をしてください。 - 同時書き込みは後勝ち: HubSpotのCRM APIには楽観的ロックの仕組みがないため、更新が重なるとプロパティ単位で後勝ちになります。実行が重なりうる状況で「スコアを読んで加算して書き戻す」といった処理に
HUBSPOT_UPSERT_CONTACTを使わないでください(HubSpotの計算プロパティを利用してください)。 - アーカイブ済みコンタクト: HubSpotのゴミ箱にあるコンタクトはメールアドレスを予約したままのため、そのアドレスへのupsertは成功しません。ゴミ箱から復元するか、別のアドレスを使用してください。
- タイムアウト: すべてのリクエストに30秒のタイムアウトが設定されており、レート制限や一時的なサーバーエラーには自動でリトライします(ノート・タスクの作成は上記のとおり例外です)。