✉️
HubSpotのフォームデータをAPI + Pythonで取得する
2024-12-12
2024-12-13
約2300字
HubSpotは、グローバルで支持されているCRM(顧客関係管理)プラットフォームです。
マーケティング、営業、カスタマーサービス、オペレーション、コンテンツ管理など多岐に渡る機能が提供されており、小規模から大規模なビジネスまで幅広いユースケースをカバーできます。
今回は、営業/マーケ用途でのリードの獲得のために設置したフォーム経由の問い合わせデータを取得する処理をPythonで書いてみます。
実装はシンプルに、
と言う手順で進めます。
まずは、APIで使うアクセストークンを取得します。
ヘッダーの「設定アイコン⚙️」→サイドバーの「連携」の「非公開アプリ」でアプリを作成→「認証」タブの「アクセストークン」を取得します。(参考)
HubSpot APIのアクセストークン取得
HUBSPOT_ACCESS_TOKEN
と言う環境変数にセットしておきましょう。
以下のように requests
モジュールを使い、APIを順次コールしていく流れです。
import datetime
import os
import json
import requests
access_token = os.environ.get("HUBSPOT_ACCESS_TOKEN")
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer " + access_token,
}
url = "https://api.hubapi.com/forms/v2/forms"
params = {"formTypes": "ALL"}
response = requests.get(url=url, params=params, headers=headers)
forms = json.loads(response.text)
contact_list = []
for f in forms:
guid = f.get("guid")
name = f.get("name")
url = "https://api.hubapi.com/form-integrations/v1/submissions/forms/" + guid
paging_next_after = None
while True:
params = {}
if paging_next_after:
params["after"] = paging_next_after
response = requests.get(url=url, params=params, headers=headers)
response_dict = json.loads(response.text)
contacts = response_dict.get("results")
if not contacts:
# コンタクトがない場合、次のフォームへ
break
for c in contacts:
created_at = datetime.datetime.fromtimestamp(
c.get("submittedAt") / 1000
).strftime("%Y-%m-%d %H:%M:%S")
contact_list.append(
{
"page_url": c.get("pageUrl"),
"created_at": created_at,
"hubspot_form_id": guid,
"hubspot_form_name": name,
}
)
if not response_dict.get("paging"):
break
else:
paging_next_after = response_dict.get("paging").get("next").get("after")
print(contact_list)
なお、HubSpotのAPIには、10秒あたり/1日あたりのレート制限があります。データ量が多い場合は、適宜、時間をおいて実行するなどしましょう。詳しくはこちら。
今回は、HubSpotのREST APIをPython経由で呼び出し、フォームデータを取得する実装を紹介しました。
hubspotでは、hubspot-api-client も用意されていますが、細かい処理がカバーされていない部分もありREST APIを直接呼び出す方が利便性が高かったので、pythonクライアントを使いませんでした。
©︎ 2025 - Yard