ホーム / お役立ち記事 / Salesforce から Notion への同期で消した値が残る理由|空の値を送り全セルで照合

Knowledge

Salesforce から​ Notion への​同期で​消した​値が​残る​理由|​空の​値を​送り​全セルで​照合

Salesforce から Notion へ同期していると、Salesforce で消した日付や数値が、Notion には前の値のまま残ることがあります。同期が空の値を送らずに項目を省き、Notion は送られない項目の値を変えないためです。原因の切り分け、見分け方、空の値の送り方、落とし穴、全セルの照合での確かめ方を、弊社が Notion Workers で作った同期での実測と、Notion・Salesforce の公開の仕様でまとめます。

著者: 村山 悠太(ゴムマリ) 最終更新: 2026年11月

Salesforce から Notion へデータを同期していると、Salesforce で消した日付や数値が、Notion には前の値のまま残ることがあります。

原因は、同期が「空」を送らず、その項目を省いて書いていることです。Notion は、送られなかった項目の値を変えません。

直し方は、Salesforce で空の項目に、空にする値を明示して送ることです。弊社が試した構成では、空の値を送ると Notion の日付・数値は空になり、本番の全セルの照合で約4万8千セルが一致しました。

この記事は、Salesforce の情報を Notion へ同期して使っている業務の担当者・情報システムの担当者に向けて書きます。

原因の切り分け、見分け方、空の値の送り方、落とし穴、直ったかの確かめ方を、弊社が Notion Workers で作った同期での実測と、Notion・Salesforce の公開の仕様で整理します。

原因: 送らない​項目は、​Notion では​前の​値のまま​残る

Notion の公開の API の仕様には、ページを更新するとき、送らなかった項目は値をそのまま保つと書かれています。

出典は、Notion API リファレンスの「Page property values」の「Writing and clearing values」の節です。

同じ節は、空にする書き方も決めています。数値・日付・URL・選択肢などは null、テキスト・関連・複数選択などは空の配列を、項目を名指しして送ります。

Salesforce の API も、値を空に戻すには、空にする項目を名指しします。SOAP API の更新(update())では、空にする項目の名前を fieldsToNull という一覧に入れる、と公式の文書に書かれています。

Notion では、項目を送らないことと、空にすることは別の操作です。同期が空の項目を省いていると、Salesforce で値を消しても、Notion には消す指示が届きません。

弊社の​同期でも、​消した​日付だけが​前の​値のまま​残っていた

弊社は、お客様の Salesforce の商談などを、毎日 Notion のデータベースへ同期する仕組みを、Notion Workers で作っています。

Notion Workers は、Notion が提供する、コードで Notion を拡張する仕組みで、その1つが外のシステムのデータを Notion のデータベースへ同期する機能です。

公式の説明では、Salesforce などの API からデータを取り込む用途が挙げられています。

この同期は、Salesforce で空のとき、文字・URL の項目には空の文字を、チェックの項目には外した状態を送っていたので、消した値も Notion で消えていました。数値・日付・日時の項目は、空なら項目ごと送らない作りでした。

商談の全行×全列を Salesforce と突き合わせると、Salesforce で消した日付が1つ、Notion には前の日付のまま残っていました。その行のほかの項目は、Salesforce と一致していました。

毎回全行を書き直す形にした後も、この1セルは残ったままでした。

行は書き直されていたとみられ(Salesforce で変わっていない行も書き直されることを、後で確かめました)、送られない項目は変わらない、という公開の API の仕様と同じ動きでした。

元の作りは、数値と同じく、日付も空なら項目ごと省いていました。使っていた Workers の SDK(0.4.0)の日付を作る関数は、空の文字を受け付けません。

Workers の同期の公式の手引きにも、値を空にする書き方は書かれていません(2026年11月1日に確認)。

見分け方​: 消えないのは​「1項目」か​「行ごと」か

Salesforce と Notion で値が違うときは、違い方で原因を分けます。直し方が違うので、先に分けます。

見え方 疑う原因
消した項目だけが前の値で、同じ行のほかの項目は新しい 同期が空の値を送らず、項目を省いている
行ごと前の値で、ほかの項目の変更も入っていない その行が書かれていない(更新日時の条件・差分の読み取りの範囲)
Salesforce で消した行が Notion に残っている 行の削除の扱い(同期の形による)

行ごと前の値のときは、更新日時の条件を疑います。弊社が試した Notion Workers の同期では、行に更新日時(upstreamUpdatedAt)を添えて送ると、前に書いたときより新しくない行は書かれませんでした。

SDK の説明では、この更新日時は「複数の同期が同じデータベースに書くときの競合の解決に使う。推奨だが任意」とされています。書かれない条件そのものは、説明には書かれていません。

行の削除は、同期の形で扱いが変わります。公式の手引きでは、毎回全件を返す置き換えの同期(replace)は、その周で見なかった行を消し、変更だけを返す差分の同期(incremental)は、削除を明示して送る必要があります。

弊社の​実測​: ​空の​値を​送ると、​日付も​数値も​空に​なった

本番で空の値を送る前に、弊社は使い捨ての試験用の同期で、空の値が拒まれないか、同じ回のほかの行が巻き込まれないかを確かめました。

置き換えの同期では、拒まれた行が「その周で見なかった行」として消される恐れがあったためです。

項目 内容
実測の日 2026年10月6日
同期の仕組み Notion Workers の同期(SDK 0.4.0)
同期の形 置き換えの同期(replace)・手動で実行
試した行 試験用の表に7行(日付・数値・目印の文字を入れた行と、対照の行)

7行に日付・数値・目印の文字を入れて書いた後、3回に分けて、行ごとに違う送り方で書き直しました。結果は次のとおりです。

  1. 日付と数値に空の値(空の配列 [])を送ると、Notion で両方とも空になった。拒まれず、同じ回の対照の行も書かれた
  2. 日付に空の文字を入れた形([[""]])を送っても、空になった
  3. 前に更新日時を添えて書いた行へ、更新日時を添えずに送ると、書かれた
  4. 前より古い更新日時を添えて送ると、書かれなかった
  5. 3回とも同期は正常に終わり、消えた行は無かった

1と2の送り方は、公式の手引きには書かれていません。弊社が試した構成(SDK 0.4.0 の試験と、SDK 0.9.2 に上げた後の本番の全行)での動きです。Notion Workers 以外の同期の道具では確かめていません。

直し方​: ​空の​項目に、​空に​する​値を​明示して​送る

弊社が実際に通した手順は次のとおりです。前提として、行が書き直される形にしておきます。

  1. 行が書き直されるようにする。弊社は、商談の表に書く同期が1本だけだったので、空の直しより先に、更新日時を添えずに毎回全行を書く形にしていた
  2. Salesforce で空の数値・日付・日時の項目を、省かずに空の値 [] で送るように、同期のコードを直す
  3. 使い捨ての試験用の同期で、空の値が拒まれないこと、対照の行も書かれること、行が消えないことを確かめる
  4. 本番では、まず値が残っていた1行だけに空の値を送り、照合で確かめる
  5. 効いたら、全行へ広げる

1が無いと、直しを入れても、Salesforce で変わっていない行は書き直されず、残った値も消えません。更新日時を添えない形は、同じ表に複数の同期が書かない場合だけに使います。

弊社の同期のコードの該当の部分を、要点だけにすると次のとおりです。Salesforce の値を Notion の値に変える関数が、空のときに undefined を返す作りでした。

const CLEARABLE = new Set(["number", "date", "datetime"]);

function buildProperties(fields, record) {
  const out = {};
  for (const f of fields) {
    const value = toValue(f.kind, record[f.soql]); // 空なら undefined
    if (value !== undefined) out[f.notion] = value;
    else if (CLEARABLE.has(f.kind)) out[f.notion] = []; // 省かず、空の値を送る
  }
  return out;
}

公開の API でページを直接更新する同期なら、仕様どおり、数値・日付は null、テキストは空の配列を、項目を名指しして送ります。弊社が実測したのは Notion Workers の同期で、公開の API の書き方は試していません。

落とし穴: 実際に​踏んだ​もの

  • 日付を作る関数が、空の文字を受け付けなかった使っていた SDK では、日付を作る関数に空の文字を渡せませんでした。空の日付は、関数を通さずに空の値を直接送る形で消しました。
  • 列を足しても、既存の行には入らなかった更新日時を添えて送っていた間は、列を足しても、Salesforce で変わった行と新しい行にだけ値が入りました。空の値を送る直しも、行が書き直されなければ効きません。
  • 最終編集日時では「書かれたか」を判定できなかった同期が書いた行の最終編集日時は、値が変わってもほとんど動きませんでした。書かれたかは、値で突き合わせて判定します。
  • 試験用の同期を消しても、作った表は残った使い捨ての同期を消した後も、その同期が作った表と行は残っていました。試験の後は、表も別に片づけます。

確かめ方​: 全セルを​突き合わせ、​「空なのに​値が​残る​セル」を​数える

直ったかは、Salesforce と Notion の値を全行×全列で突き合わせて判定します。弊社の同期では、消し残りは約4万8千セルのうち1つで、抜き取りの目視では見つけにくい数でした。

弊社は、同期と同じ問い合わせと変換で Salesforce を読み、Notion の表と次の順で突き合わせています。

  1. 行の数が同じか。キーの重複と、片方にだけある行が無いか
  2. 全行×全列のセルが一致するか
  3. 「Salesforce は空なのに、Notion に値が残るセル」の数を、別に数える
  4. 直した行を直接読み戻し、その項目が空になったか、その項目を使う数式の列も変わったかを見る

3を別に数えるのは、空の消し忘れが、直し方の効き目を示す数だからです。弊社の同期では、直す前は1、直した後は0でした。

直した後の本番の照合では、商談の全行×全列、約4万8千セルがすべて一致しました。SDK を 0.9.2 に上げて全行へ広げた後の照合でも、空なのに値が残るセルは0でした。

試験用の同期で確かめるときは、変える行と一緒に、ふつうに書き直す対照の行を置きます。対照の行が書かれていれば、その回の同期が動いたうえでの結果だと判定できます。

自力で​どこまで​やれるか

同期のコードを自社で持っていて、同期する項目が少なく、照合を手で回せるなら、自力で足ります。弊社の同期では、空の値を送るための直しは、空のときの分岐の追加と、対象にする項目の型の指定でした。

自力の壁は次の3つです。

  • 空の値の送り方が Notion Workers の手引きに書かれておらず、試験の場で確かめる必要がある
  • 置き換えの同期や更新日時の条件など、行が書かれる・消される条件を踏まえて、本番への入れ方を決める必要がある
  • 全行×全列の照合を、同期と同じ問い合わせと変換で組む必要がある

外注する​場合の​判断基準

外注の分かれ目は、直しの後に、Salesforce と Notion が全セルで一致していることを確かめる手立てを、自社で持てるかです。外注するなら、見積もりを比べる前に次の3点を確かめてください。

  • 空の値の送り方を、本番の前に試験用の同期で確かめるか
  • 直しを入れた後、値が残っている行が書き直されるかを確かめるか
  • 受け入れを、件数だけでなく全行×全列の値の照合で行うか

ゴムマリでは、Salesforce と Notion などのシステムをつなぐ同期の設計・構築・受け入れの照合(件数・値の一致)・保守を、システム連携・API 開発として承ります。

料金は、連携1本(接続先2つ・片方向・定期の更新)で初期50万円から、保守は月3万円から、期間は2週間からです。

Salesforce の項目・画面・権限の直しや重複したデータの整理とあわせて頼む場合は、CRM の開発・改修(Salesforce 対応)で、検証環境(Sandbox)での設定と検証からお引き受けします。

料金は初期30万円から、月5万円から、期間は2週間からです。

進め方は相談からご連絡ください。

Notion で頼めることの全体は、Notion の構築と開発にまとめています。

次の​一歩

Salesforce で値が空の日付・数値の項目を1つ選び、同じ行の Notion の値を見てください。同期が回った後も Notion に値が入っていれば、空の値が送られていないか、その行が書かれていません。

どちらかは、見分け方の表で分けます。そのうえで、同じ型の項目すべてで、Salesforce は空なのに Notion に値が残るセルを数えます。直した後に0になったかで、効き目を判定できます。

Notion のデータベースで、AI の自動入力が人の直した値を書き換える動きは、Notion AI の自動入力が直した値を上書きする理由にまとめています。

関連記事: Notion AI の自動入力が直した値を上書きする理由/Notion API が 429 で止まる理由/Salesforce と Notion をつなぐ方式の選び方

この記事を書いた人

代表 村山悠太のポートレート

村山 悠太(ゴムマリ代表)

ワークスアプリケーションズで大手企業向けERPの営業と導入を担当し、外資系SaaS企業と国内大手放送局で販路と新規事業の立ち上げ、AI学習用データを扱うAIスタートアップ2社でマーケティングと営業を担った。2024年10月から生成AIの実装に入り、いまは大手企業の現場で、AIエージェントを要件定義から運用まで手がけている。

代表の経歴を見る

Ask

この​業務を​頼むなら

業種・規模を問わず

システム連携・API 開発

SAP® ソフトウェアや基幹システム、intra-mart、SharePoint などのデータを、Notion や CRM などほかのシステムへつなぎます。

初期 50万円〜(2週間〜)

システム連携・API 開発を見る

Related

関連

FAQ

よく​ある​質問

Notion の API で、項目を送らずにページを更新すると、その値はどうなりますか?

Notion の公開の API の仕様では、更新で送らなかった項目は値がそのまま残ります。空にするには、数値・日付・URL・選択肢などは null を、テキスト・関連・複数選択などは空の配列を、項目を名指しして送ります。送らないことと、空にすることは別の操作です。

同期は毎回成功しているのに、Salesforce で消した値が Notion に残るのはなぜですか?

同期が、空の項目を省いて送っていると、行の書き込みは成功しても、その項目は前の値のまま残ります。弊社の同期では、空の数値・日付を送らない作りで、毎回全行を書き直す形にした後も、消した日付が前の値のまま残っていました。

行ごと前の値のまま、ほかの項目の変更も入っていません。同じ原因ですか?

別の原因を疑います。弊社が試した Notion Workers の同期では、更新日時(upstreamUpdatedAt)を添えて送ると、前に書いたときより新しくない行は書かれませんでした。差分の同期なら、その行が読み取りの範囲に入っているかも確かめます。

選択肢や関連の項目を空にした場合も、同じ直し方で消えますか?

弊社の直しは、数値・日付・日時の項目が対象で、選択肢と関連の項目を空にした場合は確かめていません。公開の API の仕様では、選択肢は null、関連は空の配列で消します。直したら、全セルの照合で残っていないかを確かめてください。

直ったかは、Notion の最終編集日時で確かめられますか?

弊社の同期では確かめられませんでした。同期が書いた行の最終編集日時は、値が変わってもほとんど動きませんでした。直ったかは、Salesforce と Notion の値を全セルで突き合わせて判定します。

ご相談は​こちらから

相談は無料です。

相談する