Notionシステム研究所 > NotionにCSVを取り込む方法|既存行を更新したいときの差分管理
2026年10月22日
•約8分で読めます
NotionのCSVインポートと既存行の更新は別の処理です。文字化け・日付・先頭ゼロへの対処、外部IDによる照合、空欄の扱い、更新前の差分表と取り消し方法を具体例で解説します。
毎月届くCSVをNotionへ取り込みたい。前月と同じ顧客は情報だけ更新し、新しい顧客だけ追加したい。こうした用途では、CSVのインポート機能だけで済ませようとすると、同じ顧客の行が増えてしまいます。
Notion標準のCSVインポートと「CSVとマージ」は、既存行を照合して更新する機能ではありません。 公式ヘルプでも、CSVは行を追加する方式だと説明されています。初回の移行と、2回目以降の差分更新を分けて考えましょう。Notion公式:データのインポート
この記事では、顧客一覧の取り込みを例に、重複を増やさず更新する手順を説明します。複数のNotion DBそのものをまとめたい場合は、データベース結合の使い分けを参照してください。
| 目的 | 選ぶ方法 | 作業の中心 |
|---|---|---|
| CSVから初めてDBを作る | Notionのインポート | 列の型と取り込み結果の確認 |
| 既存DBへ新しい行だけ追加する | CSVとマージ | 追加対象だけのCSVを用意する |
| 同じ顧客の住所や分類を変更する | 少数なら手動、多数ならAPI等 | 顧客IDによる照合と変更箇所の更新 |
| CSVにない顧客を整理する | 別途、停止候補を確認する | ファイルに載らない理由の確認 |
月に数件の変更なら、差分表を見ながら手動で直す方が、連携の開発・保守を含めると短時間で済むこともあります。自動化を考えるのは、変更件数、頻度、取り違えた場合の影響が大きくなってからで構いません。
CSVの1行目には列名を置き、文字コードはUTF-8にします。空の検証用ページでNotionのインポートからCSVを選び、列を対応付けます。既存DBへ追加する場合は、フルページでDBを開き、メニューの「CSVとマージ」を使います。
最初の5行には、あえて次のような値を含めます。
| 確認する列 | 値の例 | 確認すること |
|---|---|---|
| 顧客ID | 00027 |
テキストとして先頭のゼロを保持しているか |
| 会社名 | 株式会社サンプル,東日本 |
カンマを含む値が別列へ割れていないか |
| 契約開始日 | 10/22/2026 |
意図した年月日になっているか |
| 郵便番号 | 001-0001 |
数値に変換されていないか |
| 備考 | 改行を含む文章 | 1件の値として取り込めているか |
日付の解釈を推測で進めないようにします。公式のCSV案内では MM/DD/YYYY が示されていますが、元データの表記を変える場合も、必ず検証用の数行で確認してください。数式やロールアップをCSVからそのまま再現することもできません。計算結果を持ち込むのか、Notion側で計算し直すのかを決めます。Notion公式:CSVの制約とトラブル対処
元のCSVは保管し、Notion用に加工したファイルを別名で作ると、文字化けや列ずれが起きたときに原因を戻って調べられます。
会社名は表記揺れや社名変更があり、同名の会社も存在します。照合には、元システムで変わらない顧客IDを使います。Notionには「外部顧客ID」というテキスト列を用意し、1顧客につき1つの値を持たせます。
以下は架空の入力例です。
external_id,company_name,segment
C-001,青空商事,継続
C-002,白波工業,新規
C-003,山の手企画,
NotionにC-001とC-003があり、C-002がなければ、C-002だけが新規候補です。C-001は値を比較して変更がある列だけ更新し、C-003の空欄はあらかじめ決めたルールで扱います。
CSV内で同じIDが2回現れる場合や、Notionで同じIDが2件見つかる場合は、そのIDを保留にします。「最初に見つかった行」を更新すると、誤った重複行が正しい情報であるかのように残ってしまいます。
更新処理を作るときは、最初に書き込みなしで差分を出す機能を用意します。次は、確認用の一覧例です。
| 外部顧客ID | 判定 | 変更内容 | 理由 |
|---|---|---|---|
| C-001 | 更新 | 分類:新規 → 継続 | 既存1件、値に差分あり |
| C-002 | 追加 | 会社名・分類を新規登録 | 既存0件 |
| C-003 | 変更なし | 分類は維持 | 今回は空欄を未指定として扱う |
| C-004 | 保留 | 書き込まない | Notionに同じIDが2件ある |
空欄を「消す」と解釈するか、「今回のCSVでは指定しない」と解釈するかは、列ごとに決めます。たとえば元システムの住所が空欄ならNotionの住所も消す必要がある一方、担当者の補足メモを空欄で消してはいけません。
更新対象の列を「会社名・分類・元システム更新日」に限定し、Notionで書く「面談メモ・次回対応」は処理の対象外にします。列単位の役割を決めると、人が追記した情報を上書きしにくくなります。
継続更新を実装するなら、次の順で処理します。
現行APIでDB内の行を検索する際は、データソースのクエリを使います。DBの入れ物のIDと、行を持つデータソースのIDは区別してください。取得結果に続きがある場合は、カーソルを使って最後まで取得します。Notion API:データソースの検索
既存行の更新には、その行のページIDを使います。列の値を変えるだけなら、ページ本文を作り直す必要はありません。Notion API:ページの更新
複数の処理を同時に走らせると、両方が「既存0件」と判断して重複作成する可能性があります。まず1つの実行に絞り、再実行前にも同じ外部IDを照合します。処理が途中で止まった場合は、全件を新規追加し直さず、結果不明の行から確認してください。
今月のCSVにC-005がないとしても、解約とは限りません。抽出条件の変更、対象期間の違い、出力漏れなども考えられます。
継続運用では、Notionに「今回のファイルで確認できた日」を持たせ、長く現れない行を確認用ビューに出す方法が使えます。停止が確認できた段階で「取引終了」などへ変更し、面談履歴や関連案件は保持します。
取り込みを取り消せるよう、実行ごとにファイル名・実行日時・ページID・変更前後の値を記録します。ただし、更新後に人が編集した列を無条件で元に戻すと、その編集まで消えてしまいます。戻す前にも現在値を確認し、今回の取り込みが書いた値から変わっていない列だけを対象にします。
まず次の取り込みを止め、追加された日時と件数を確認します。そのうえで、重複行に新しいコメント・本文・リレーションが付いていないか調べます。既存の正しい行へ必要な情報を移し、確認できた重複行を整理してください。
タイトルが同じという理由だけで一括削除するのは避けます。正しい照合IDがまだない場合は、元CSVと照らし合わせて対応を付ける作業が先です。
初回の5行取り込みで型を確認し、2回目に同じファイルを処理しても件数が増えないことを確かめる。この2回の確認が、毎月のCSV更新を安定させる出発点になります。
千葉県出身。10歳の頃からプログラミングを始め、ゲーム、Webサイト、ロボット、スマホアプリなどを制作。大阪大学基礎工学部情報科学科で情報工学と統計学を学び、大学時代はAIを研究。大学在学中にWeb広告代理店でのインターンや人材系Webサービスの立ち上げを経験し、卒業後はフリーランスエンジニアとしてGISシステム、データ基盤構築、Webシステムの開発に従事。10年以上のWebアプリ開発・データ分析経験を基に、2023年9月に株式会社ビットライトを設立し、現場業務の仕組み化からデータ基盤構築、データ活用支援までを一気通貫で支援。