【無料】Notionの連絡先データベースをGoogleコンタクトに追加する方法(GAS×Gemini)


※本記事では、GeminiとGoogle Apps Script(GAS)を利用して、Notionの連絡先データベースをGoogleコンタクトへ無料で登録する方法を紹介しています。
一般的な設定方法ではありませんので、あらかじめご了承ください。
「Notionの連絡先データベースをGoogleコンタクトに無料で同期させたい」
調べれば、Zapierなどのサービス(無料枠)を使えば一瞬で解決します。
しかし、無料枠には制限もあるし、「課金するほどでもない」と思う人も少なくないはずです。
そこで今回は、GAS(Google Apps Script)を経由して無料で同期する方法を試してみました。多少クセはありますが、実用レベルまでは持っていけるはずです。
免責事項
今回紹介する内容を実行したことにより不具合が起こっても責任は一切負いませんので、自己責任の範囲内でお試しください。

全体像:Notion → Googleコンタクトは「一方通行」
まず結論から。
Notion ⇔ Googleコンタクトの双方向同期は非推奨です。
理由は、双方向同期を行うと
「修正時に競合が発生し、同じ連絡先が増え続ける」
「どちらのデータが正なのか分からなくなる」
「最悪の場合、連絡先が消失する」
といった事故が起こり得るためです。
実際、何度も双方向同期にチャレンジしてみましたが、少なくとも個人運用レベルでは安定して管理するのは難しいと感じました。
そこで今回は「Notion → Googleコンタクトへの一方通行同期」という前提で設計していきます。
大まかな手順(全3ステップ)
流れはシンプルです。
1.NotionのデータベースをGASで取得し、Googleスプレッドシートに書き出す
2.スプレッドシートの内容をGASでGoogleコンタクトに登録する
3.GASの時間主導型トリガーで一定時間おきに自動実行する
といった流れで進めていきます。ポイントは、
👉 「1」と「2」のコードは自分で書かないで、Geminiに生成してもらうことです。
下準備(重要)
Googleコンタクトをバックアップしておく
※今回の処理が失敗したときに元の環境に戻すための保険です。
Googleコンタクトにアクセスし、すでに登録されている連絡先を全件エクスポート(バックアップ)しておきましょう。エクスポートするファイル形式は「Google CSV 形式」でOKです。
エクスポートが完了したら、Googleコンタクトに登録している連絡先を全削除して中身を空にしておきます。
Notion側の準備
以下は、Notionのワークスペース内に作成しているデータベース名が「連絡先データベース」の場合の設定例です。
1. Notion APIキー(インテグレーション)の取得
- Notion公式の My Integrations にアクセス
- [+ 新しいインテグレーション] をクリック
インテグレーション名:「GAS-Sync」(任意の名前でOK)
関連ワークスペース:「使用中のワークスペース」を選択。
種類:「内部」 - 保存を選択し、表示される「内部インテグレーションシークレット」のAPIキーをコピーしてメモ帳アプリなどに控えておきます。
2. Notion データベースIDの取得
- Notionでデータベース(例:連絡先データベース)を開く
- ブラウザのURLを確認する
https://www.notion.so/xxxx【ここがデータベースID】?v=...
https://www.notion.so/ の後、? より前にある
32文字の英数字の羅列 がデータベースIDです。
これもコピーして控えておきます。
3. データベースへのアクセス権付与
ここを忘れると 必ずエラーになります。
- 対象データベース(例:連絡先データベース)を開き、右上の「…」をクリック
- [接続]から先ほど作成したインテグレーション(例:GAS-Sync)を追加する
これでNotion側の準備は完了です。
次にGeminiにコードを書かせる手順に入ります。
Geminiにコードを書かせる
ここからが本題です。Geminiのサイトにアクセスし、実際に「Notion→Googleスプレッドシート」と「Googleスプレッドシート→Googleコンタクト」の2種類のコードを生成してもらいます。
準備するもの

- Notionデータベース(例:連絡先データベース)のプロパティ名が分かるスクリーンショット
- 「名前」「電話番号」「メール」「住所」など、1行目のプロパティ名が横並びになっている部分をスクショする(※ 個人情報が映らない範囲で、1行目の部分のみを横長くスクショしてください。)
重要なのは、
👉 プロパティ名と並び順をGeminiに正確に伝えることです。
実際に使ったプロンプト(そのまま掲載)
※以下をコピペして、プロンプト中段にある「## 入力内容」を入力してGeminiに投げてみましょう。スクショの提供も忘れずに。
# GASコード生成用プロンプト(Notion → Googleスプレッドシート → Googleコンタクト)
## 命令書
あなたは Google Apps Script(GAS)の実務経験が豊富なプロフェッショナル開発者です。
業務でそのまま使用できる、**エラーの出ない・保守性の高いGASコード**を作成してください。
私はGASを実行環境に直接コピペして使用します。
## ゴール(目的)
- Notion APIからデータベースを取得し、Googleスプレッドシートに書き出す
- スプレッドシートからGoogleコンタクトにデータを登録する
- 二重登録やAPI制限に配慮した安全な同期処理を実装する
- Option Explicit相当(変数宣言必須)・変数のスコープ管理・定数化などを意識した堅牢なコードにする
## 制約事項
- Google Apps Script(GAS)用に作成
- コピペで即実行可能
- 未定義の定数・変数・関数を使わない
- ループやAPI呼び出し時に**リトライ・待機処理**を入れ、Google API制限(QPS制限)を考慮
- 不要なグローバル変数は避け、関数化・共通化を徹底
- MsgBox相当のLogger.log()で処理状況を確認できるようにする
- コメントを必ず入れ、処理内容が把握できること
- データの二重登録を防ぐ照合ロジックを必ず組み込む
- 例:名前+電話番号が一致する場合はスキップ
- API仕様上、1回のNotion呼び出しで取得できる件数上限を考慮し、**ループ処理**を実装
- トリガー実行時にも安全に動作する設計
## 入力内容
- Notion APIキー: 【後で編集するのでここでは入力しない】
- NotionデータベースID :【後で編集するのでここでは入力しない】
- Notionデータベースのプロパティ名と順番:スクリーンショットで提供
- Googleコンタクトで利用するフィールド:名前、電話番号、メール、住所など
## 出力形式
- コードは **標準モジュール形式** で出力
- 関数ごとに処理内容をコメントで明示
- Logger.log()で重要な処理やエラーを通知
- 省略や「…」は使用せず、実務でそのまま使えるコードを出力
## 注意点
- Notion APIは1回の取得上限が約100件なので、ループ処理を実装し必ず全件スプレッドシートに書き出すこと
- スプレッドシートからGoogleコンタクトにデータを登録する際は、Google APIの制限に引っかからないよう500〜1000ms程度の待機処理を記述すること
- トリガー実行時に名前+電話番号一致ならスキップなど、二重登録対策をすること
- 初回実行時の承認フローを考慮し、権限付与に関するコメントを入れる
- 定期実行トリガー(時間主導型)での安全な運用を前提にする
- エラー処理は最小限だが、通常運用で失敗しない設計を優先
## 推奨の使用手順
1. Notionからデータをスプレッドシートに取得するコードを生成
2. スプレッドシートからGoogleコンタクトに登録するコードを生成
3. トリガーで定期実行する場合の注意点もコメントで指示
※このプロンプトで上手く行かない場合はGeminiと何度もやりとりをして、きちんと動作するまで粘ってください。「Notion→スプレッドシート」と「スプレッドシート→Googleコンタクト」の2種類のコードが書き出されるのが正解です。
※APIキーやデータベースIDはプロンプト内に入力せずに、後から直接コードを編集してください。
コード生成時の注意点(かなり重要)
1. Notion → スプレッドシート
- Notion APIは1回の取得上限が約100件
- 必ず ループ処理 が必要
2. スプレッドシート → Googleコンタクト
- 短時間に大量登録するとAPI制限に引っかかる
- 500〜1000ms程度の待機処理が必須
- トリガー実行時の二重登録対策が必要
- 名前+電話番号一致ならスキップ、など
この内容は上記プロンプトに記載しているので、Geminiがきちんと理解してくれることを祈りましょう。
GASの設置と初回実行
Geminiにコードを書いてもらったら、実際に上手く動くかテストしてみましょう。
1. コードの貼り付け
- Google スプレッドシートでファイルを新規作成
- [拡張機能] → [Apps Script]を選択
- 既存コードを削除し、Geminiが生成したコードを貼り付ける
2. 実行と承認
- 保存(フロッピーアイコン) →「▷ 実行」を押して挙動を確認する。
Geminiが生成した2種類のコードが正常に動いているかを確認します。「デバック」と「実行ログ」の間にあるファンクション名を切り替えて2つのコードをそれぞれテストしてください。
※おそらくこの工程でエラーが出まくると思うので、上手くいかない場合はGeminiと何度もやりとりをして、きちんと動作するコードを書き直してもらってください。 - 初回のみ権限承認が必要です。「詳細 」→ 「移動」 → 「許可」の順に進み権限を付与。
※「このアプリは Google で確認されていません」という警告は 自作のスクリプトでは正常な挙動です。

進めない時のチェックポイント
・複数Googleアカウントに同時ログインしていないか
・ポップアップがブロックされていないか
3. 定期実行(トリガー)の設定をする
コードが上手く動いたら、最後に定期実行(トリガー)の設定をしていきます。
GAS左メニューのトリガー(時計のアイコン)を選択し、「トリガーを追加」を選択します。
まずは「Notionからスプレッドシート」に書き出すコードのドリガーを設定します。
- 実行する関数を選択:「Notion→スプレッドシート」のファンクション名を選択
- 実行するデプロイを選択:Head
- イベントのソースを選択:時間主導型
- 時間の間隔を選択(時間):6時間おき、12時間おき程度が無難
- 保存を選択
もう一度「トリガーを追加」を選択し、次は「スプレッドシートからGoogleコンタクト」へ登録するためのトリガーを設定します。
- 実行する関数を選択:「スプレッドシート→Googleコンタクト」のファンクション名を選択
- 実行するデプロイを選択:Head
- イベントのソースを選択:時間主導型
- 時間の間隔を選択(時間):6時間おき、12時間おき程度が無難
- 保存を選択
これで一連の設定は完了です。
Notion ⇔ Google連絡先の双方向同期は非推奨(再掲)
最後にもう一度。
重要:Notion と Google の双方向更新は事故の原因になります。
必ず以下のルールを守ってください:
- Notion → Google の一方向登録・更新のみ
- Googleコンタクトの連絡先は編集しない(参照用として利用)
連携完了後に Googleコンタクトの連絡先を編集すると、
次回トリガー実行時に同じ連絡先が2重登録されます。
運用の基本ルール:
- Notion は編集・登録用
- Googleコンタクトは参照用(編集禁止)
このルールを遵守することで、データの重複やトラブルを防ぐことができます。
まとめ
- 有料サービスを使わなくても同期は可能
- 有料サービスを「GAS+Gemini」の組み合わせで代替
- 一方通行設計が安全
- 事前のバックアップは必須
- コード生成で粘り強さも必須
免責事項
本記事の内容は執筆時点の情報です。API仕様や制限は今後変更される可能性があります。上記操作が原因で不具合が起こっても責任は一切負いませんので、自己責任の範囲内でお試しください。
おすすめリンク






