Contents
1️⃣ UI インポート vs. API インポート ― いつどちらを選ぶべきか
| 項目 | HubSpot UI(画面) | HubSpot REST API |
|---|---|---|
| 利用シーン | 手作業で少量・中規模データをすぐに取り込みたいとき | 定期バッチ、数十万件以上の大量データ、他システムとの自動連携が必要なとき |
| 操作難易度 | クリックだけで完了。マッピングや重複チェックは UI が支援 | 開発者向け。認証・リクエスト作成・ポーリングが必須 |
| ファイルサイズ上限 | 現行ドキュメントでは 2 GB(CSV/XLSX)※プランに依存しない公式 | 同上。API でも同じ 2 GB の制限が適用 |
| インポート速度 | ファイルサイズと HubSpot の処理負荷に左右される(数千件〜数万件/分) | 非同期ジョブでスケールしやすく、数十万件でも安定 |
| エラーハンドリング | UI 上で即時プレビューが表示され、失敗したレコードは CSV でダウンロード可能 | onError パラメータでロールバック動作を制御し、結果は API で取得 |
選択指針
- UI が最適 → データ量が少なく、担当者が非エンジニアの場合。
- API が最適 → 定期的なインポート、外部システムと統合した自動化が必要な場合。
2️⃣ CSV/Excel ファイル作成の必須要件
| 項目 | 推奨設定 | 補足 |
|---|---|---|
| 文字コード | UTF‑8 (BOM なし) | HubSpot が唯一サポート |
| 区切り文字 | カンマ ,(CSV) |
タブ区切りは UI で非対応 |
| 改行コード | LF (\n) または CRLF (\r\n) |
どちらでも可 |
| 日付形式 | ISO 8601 ‑ YYYY-MM-DD (例: 2023-04-30) |
時刻が必要な場合は YYYY-MM-DDTHH:mm:ssZ |
| 必須プロパティ | オブジェクトごとに公式テンプレートで確認 | 例: コンタクト → email、企業 → domain、取引 → dealname |
| 列名 | HubSpot の内部プロパティ ID と完全一致(スペースや大文字小文字は区別しない) | phone_number は正しくは phone |
2‑1️⃣ 公式テンプレートの入手方法(最新 UI に合わせた手順)
- 設定 (Settings) → データ管理 (Data Management) → インポート (Imports)
- ページ右上の 「サンプル CSV をダウンロード」 ボタンをクリック
- ダウンロードしたファイルは、HubSpot が期待する列順・プロパティ ID がすでに記載されているので、作業シートのベースとして利用可能
※旧 UI の「データ連携」や「ファイルをインポート」は 2024 年度に統合されました。上記手順が現在の公式フローです。
3️⃣ UI インポート – 手順とポイント解説
| ステップ | 操作内容 | 補足 |
|---|---|---|
| 1. ファイル選択 | 設定 → データ管理 → インポート → 「インポートを開始」→ CSV/XLSX をドラッグまたはファイル選択でアップロード |
シートは 1 枚だけ。複数シートはサポート外 |
| 2. オブジェクト種別の指定 | コンタクト、企業、取引、チケット、カスタムオブジェクトから対象を選択 | 複数オブジェクト同時インポート(例: コンタクト+企業)は「複合インポート」から選べる |
| 3. 列マッピング | UI が自動でプロパティに紐付け。未マップは手動で検索・指定 | マッピングエラーはリアルタイムでハイライト表示 |
| 4. 重複チェック設定 | キーとなるプロパティ(例: email、domain)を選び、「上書き」か「スキップ」を選択 |
「上書き」にすると既存レコードの全プロパティが置換されます |
| 5. インポート実行 | 「インポート開始」ボタンでジョブ作成 → 完了メールと UI のステータス画面で結果確認 | エラーレポートは「ダウンロード」リンクから CSV で取得可能 |
複数オブジェクトの同時インポート & アソシエーション自動生成
- CSV 構成例(コンタクト + 企業)
| firstname | lastname | company_domain | |
|---|---|---|---|
| alice@example.com | Alice | Smith | example.com |
company_domain が企業オブジェクトの 一意キー として扱われ、インポート完了時に自動で コンタクト ↔ 企業 のリンクが作成されます。
- 取引も同時にインポートしたい場合
| firstname | lastname | company_domain | dealname | associated_company_domain | |
|---|---|---|---|---|---|
| bob@example.com | Bob | Jones | example.com | Big Deal 2024 | example.com |
associated_company_domain が取引と企業のアソシエーションキーとなります。
※「複合インポート」画面で 「オブジェクト間の関係を自動作成」 オプションを必ず有効にしてください。
4️⃣ カスタムプロパティの一括アップサートとエラーハンドリング
4‑1️⃣ 「新規作成」 vs. 「既存レコード更新」の選び方
| シナリオ | 推奨モード | 補足 |
|---|---|---|
| 完全に新しい顧客リストを追加したい | 新規作成(「インポート時に重複があっても上書きしない」) | 重複が許容される場合はレコード数が増える |
| 既存顧客の電話番号や担当者情報だけ更新したい | 既存レコードを更新(キーでマッチング → 指定プロパティのみ上書き) | キーに email(コンタクト)や domain(企業)を必ず含める |
| カスタムスコアなど部分的にだけ上書きしたい | 既存レコード更新 + 「空白は無視」オプション(API のみ) | UI では「空白の列は変更しない」設定は不可 |
4‑2️⃣ よくあるエラーと対策
| エラー種別 | 原因例 | 解決策 |
|---|---|---|
| ファイルサイズ超過 | ファイルが 2 GB を超える | CSV を 1 GB 未満 の複数ファイルに分割し、順次インポート |
| 必須プロパティ欠損 | email が空白の行が多数 |
エラーレポートから対象行を抽出し、スプレッドシート上で一括入力後再インポート |
| 列名不一致 | カスタムプロパティ ID を誤って記載 (phone_number → phone) |
公式テンプレートと比較し、正しい内部 ID に修正 |
| データ型不整合 | 数値フィールドに文字列が混在 | 該当列を数値のみになるようクレンジング(Excel の「文字列として」変換) |
エラーレポートは UI の インポート結果 → ダウンロード CSV から取得できます。ダウンロードしたファイルに
errorMessage列が付与されているので、原因特定が容易です。
5️⃣ API を使ったインポート – 完全フロー
5‑1️⃣ 認証とトークン取得
| 方法 | 特徴 |
|---|---|
| OAuth 2.0 | ユーザー単位でスコープを細かく設定。リフレッシュトークンが必要。 |
| Private App Token | サーバー間連携に最適。1 年有効のアクセストークンを生成し、ヘッダー Authorization: Bearer <token> で使用。 |
公式ドキュメント → https://developers.hubspot.com/docs/api/authentication
5‑2️⃣ ファイルアップロード(必須ステップ)
- POST
/files/v3/filesにバイナリ CSV を送信
bash
curl -X POST "https://api.hubapi.com/files/v3/files" \
-H "Authorization: Bearer <PRIVATE_APP_TOKEN>" \
-F "file=@contacts.csv;type=text/csv" \
-F "folderPath=/imports" - 成功するとレスポンスに
id(= fileId)が返る - 取得した
fileIdを次のインポートジョブ作成リクエストで使用
※UI のインポートでは自動的にこの手順が内部で走りますが、API では 必ず先にアップロード が必要です。
5‑3️⃣ インポートジョブ作成
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
POST https://api.hubapi.com/crm/v3/imports Headers: Authorization: Bearer <TOKEN> Content-Type: application/json Body: { "importRequest": { "files": [ { "fileId": "<FILE_ID_FROM_STEP_2>" } ], "schemaId": "contact_import_schema", // HubSpot が自動生成したスキーマ ID "objectType": "CONTACTS", "onError": "FAIL_ROLLBACK" // エラー時に全件ロールバック(任意) } } |
| パラメータ | 説明 |
|---|---|
fileId |
前ステップで取得した HubSpot のファイル ID |
schemaId |
インポート対象オブジェクトのスキーマ。最初のインポート時に自動生成され、以降は同じスキーマを再利用可 |
objectType |
CONTACTS, COMPANIES, DEALS など |
onError |
"FAIL_ROLLBACK"(全件ロールバック) or "CONTINUE"(エラー行だけ除外) |
5‑4️⃣ ジョブステータス取得とポーリング
|
1 2 3 |
curl -X GET "https://api.hubapi.com/crm/v3/imports/<IMPORT_ID>" \ -H "Authorization: Bearer <TOKEN>" |
statusがCOMPLETED、FAILED、CANCELLEDのいずれかになるまで 30 秒ごとにポーリング- 完了時は
statisticsにインポート件数・失敗件数が含まれる
5‑5️⃣ ロールバック / 再インポート手順
| 条件 | 手順 |
|---|---|
ジョブ作成時に onError: "FAIL_ROLLBACK" を指定 |
エラー発生時に自動で全レコードが削除され、再試行のためのクリーンな状態になる |
| ロールバック未設定 | 失敗したレコードだけを検索し (GET /crm/v3/objects/{objectType}/search) 、DELETE /crm/v3/objects/{objectType}/{recordId} で手動削除。その後、修正済み CSV を再度アップロード → 新ジョブ作成 |
ベストプラクティス:大規模インポートは必ずテスト用のサンドボックス環境(もしくは「非公開」ステージングレコード)で 1 万件程度を先行実行し、エラー率とパフォーマンスを測定してから本番ジョブに移行。
6️⃣ インポート後のデータ検証フロー
-
件数比較
bash
curl -X POST "https://api.hubapi.com/crm/v3/objects/contacts/search" \
-H "Authorization: Bearer <TOKEN>" \
-H "Content-Type: application/json" \
-d '{"filterGroups":[{"filters":[{"propertyName":"email","operator":"HAS_PROPERTY"}]}],"limit":0}'
→totalがインポート前後で同じか確認。差分がある場合はエラーログを精査。 -
プロパティ整合性サンプリング
- 重要カスタムプロパティ(例:
lead_score,industry) の上位 100 件を取得し、元 CSV と突き合わせる。 -
不一致が多い場合はマッピングミスやデータ型変換エラーの可能性。
-
アソシエーション検証(複合インポート時)
bash
GET /crm/v3/objects/contacts/{contactId}/associations/company?limit=10
→ 期待した企業オブジェクトと正しくリンクしているか確認。 -
エラーログの永続化
GET /crm/v3/imports/{importId}のレスポンスに含まれるerrorDetailsを S3 や社内 DB に保存し、監査用レポートを自動生成。
7️⃣ まとめ ― UI と API の使い分けポイント
| 観点 | 推奨手段 |
|---|---|
| 即時性・少量データ | UI インポート(画面操作だけで完了) |
| 大量データ・定期バッチ | API → /files/v3/files でファイル取得 → /crm/v3/imports ジョブ作成 |
| 複数オブジェクトの同時インポート | UI の「複合インポート」または API の objectType 配列(Enterprise プラン限定) |
| エラーハンドリングとロールバック | API の onError: "FAIL_ROLLBACK" が最も安全。UI は手動で失敗行を削除 |
| 公式テンプレート取得場所 | 設定 → データ管理 → インポート → 「サンプル CSV をダウンロード」 |
| ファイルサイズ上限 | 2 GB(CSV/XLSX)※プランに依存しない、公式ドキュメントで再確認推奨 |
最終チェックリスト
1. ✅ UTF‑8 / カンマ区切りの CSV を使用したか。
2. ✅ 公式テンプレートと列名・必須プロパティが一致しているか。
3. ✅ UI ならエラーレポートを保存、API ならonError設定でロールバックを有効化したか。
4. ✅ インポート完了後に件数・アソシエーションの整合性チェックを実施したか。
これらの手順とベストプラクティスを守れば、HubSpot CRM へのデータインポートは 正確かつ効率的 に行えます。質問や不明点があれば、HubSpot の公式サポートまたは開発者フォーラムをご利用ください。
本稿の数値・手順は執筆時点(2024 年 11 月)の HubSpot 公式情報に基づきます。最新の上限や UI 表示は随時変更される可能性があるため、導入前に必ず公式ナレッジベースをご確認ください。