NotionからGoogle連絡先を同期し、グループラベルを追加する
上級
これはCRM分野の自動化ワークフローで、20個のノードを含みます。主にIf, Set, Code, Notion, HttpRequestなどのノードを使用。 Notion 连络先を Google 连络先に自動同期し、グループタグも付与する
前提条件
- •Notion API Key
- •ターゲットAPIの認証情報が必要な場合あり
カテゴリー
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
"id": "h7YubkTUmnZrsMQs",
"meta": {},
"name": "Sync Contacts from Notion to Google Contacts with Group Labels",
"tags": [],
"nodes": [
{
"id": "9884a0d6-5969-4e36-9d1e-e9026cfd2fae",
"name": "Notion から全連絡先を取得",
"type": "n8n-nodes-base.notion",
"position": [
260,
240
],
"parameters": {
"options": {},
"resource": "databasePage",
"operation": "getAll",
"returnAll": true,
"databaseId": {
"__rl": true,
"mode": "id",
"value": "Enter your Notion database ID here."
}
},
"credentials": {},
"typeVersion": 2,
"alwaysOutputData": true
},
{
"id": "14397583-f0e6-4bc4-9bf1-ac87f80e701a",
"name": "一致するラベルを検索",
"type": "n8n-nodes-base.code",
"position": [
1400,
240
],
"parameters": {
"jsCode": "// Get raw label from Edit Fields\nconst rawLabel = $('Loop Over Contacts').first().json.label || '';\nconsole.log(\"rawLabel:\", rawLabel);\n\n// Parse if it’s a stringified array, otherwise treat as array or single value\nlet labelNames;\nif (typeof rawLabel === 'string') {\n try {\n labelNames = JSON.parse(rawLabel); // Convert \"['Gelatin 180-200']\" to [\"Gelatin 180-200\"]\n } catch (e) {\n labelNames = [rawLabel]; // If not valid JSON, treat as single string\n }\n} else if (Array.isArray(rawLabel)) {\n labelNames = rawLabel; // Already an array\n} else {\n labelNames = rawLabel ? [rawLabel] : []; // Fallback\n}\n\nconst contactGroups = $input.first().json.contactGroups || [];\n\nconsole.log(\"labelNames (parsed):\", labelNames);\nconsole.log(\"contactGroups:\", contactGroups);\n\n// Match labels and extract resourceName\nconst matchedLabels = labelNames.map(label => {\n const group = contactGroups.find(g => \n g.name.trim().toLowerCase() === label.trim().toLowerCase() && \n g.groupType === \"USER_CONTACT_GROUP\"\n );\n console.log(`Searching for: \"${label}\", Found:`, group);\n return {\n name: label,\n resourceName: group ? [group.resourceName] : null // Wrap resourceName in an array\n };\n});\n\nconsole.log(\"matchedLabels:\", matchedLabels);\n\nreturn matchedLabels.map(label => ({\n json: {\n name: label.name,\n resourceName: label.resourceName // Now an array like [\"contactGroups/40cf29798a92c131\"]\n }\n}));"
},
"executeOnce": true,
"typeVersion": 2
},
{
"id": "bc13d96d-951e-4d7a-90ed-af96617647ef",
"name": "Google 連絡先に連絡先を追加",
"type": "n8n-nodes-base.googleContacts",
"position": [
1880,
240
],
"parameters": {
"givenName": "={{ $('Loop Over Contacts').item.json.firstName }}",
"additionalFields": {
"group": "={{ $json.resourceName }}",
"phoneUi": {
"phoneValues": [
{
"type": "home",
"value": "={{ $('Loop Over Contacts').item.json.phone }}"
}
]
}
}
},
"credentials": {},
"executeOnce": false,
"typeVersion": 1
},
{
"id": "d61f9032-9982-4aaf-ab68-c827c345c14d",
"name": "ワークフロー概要",
"type": "n8n-nodes-base.stickyNote",
"position": [
-40,
-540
],
"parameters": {
"width": 1600,
"height": 520,
"content": "# Sync Notion Contacts to Google Contacts with Group Labels\nThis workflow syncs contacts from a Notion database to Google Contacts, assigning group labels based on Notion properties. It triggers on new or updated contacts, retrieves details (name, phone, labels), checks/creates Google Contact groups, adds the contact, and updates Notion to mark it as synced.\n\n**Setup Instructions:**\n1. Connect Notion and Google Contacts via OAuth2 in n8n’s credential settings.\n2. Set your Notion database ID in the Notion Trigger node (find it in your Notion database URL, e.g., 0427eb01ed3b4947873382c566f23785).\n3. Ensure Notion database has fields: name, phone, labels, and “Added to Contacts” checkbox.\n4. Test the workflow to confirm syncing.\n\n**Requirements:**\n- Notion account with a contact database.\n- Google Contacts account with OAuth2.\n- **Self-hosted n8n instance required (uses community nodes).**\n\nFor advanced setups, see [Notion’s API guide](https://developers.notion.com/)."
},
"typeVersion": 1
},
{
"id": "1c52ad45-98ff-4f32-b58e-81dfe4eda13d",
"name": "トリガー説明",
"type": "n8n-nodes-base.stickyNote",
"position": [
-40,
20
],
"parameters": {
"color": 6,
"width": 260,
"height": 520,
"content": "Triggers the workflow when a new contact is added or an existing contact is updated in the specified Notion database."
},
"typeVersion": 1
},
{
"id": "61818fe5-608c-4410-b8fe-f76a203b0123",
"name": "フィールドマッピングガイド",
"type": "n8n-nodes-base.stickyNote",
"position": [
440,
20
],
"parameters": {
"color": 6,
"width": 220,
"height": 400,
"content": "Maps Notion fields (name, phone, labels, added status) to variables for further processing. Customize here to add more fields like email."
},
"typeVersion": 1
},
{
"id": "12fb9b67-4b5a-40b0-90f1-f7e896cd47d9",
"name": "ラベルマッチングガイド",
"type": "n8n-nodes-base.stickyNote",
"position": [
1340,
20
],
"parameters": {
"color": 6,
"width": 220,
"height": 400,
"content": "Matches Notion labels to existing Google Contact groups, parsing labels from Notion’s property_buy field."
},
"typeVersion": 1
},
{
"id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
"name": "同期済みチェックガイド",
"type": "n8n-nodes-base.stickyNote",
"position": [
920,
20
],
"parameters": {
"color": 6,
"width": 220,
"height": 400,
"content": "Checks if the contact has already been synced to Google Contacts using the 'Already Added' field in Notion."
},
"typeVersion": 1
},
{
"id": "b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e",
"name": "グループ存在確認ガイド",
"type": "n8n-nodes-base.stickyNote",
"position": [
1580,
20
],
"parameters": {
"color": 6,
"width": 220,
"height": 400,
"content": "Verifies if the specified group label exists in Google Contacts. If not, a new group is created."
},
"typeVersion": 1
},
{
"id": "c3d4e5f6-a7b8-4c9d-0e1f-2a3b4c5d6e7f",
"name": "グループ作成ガイド",
"type": "n8n-nodes-base.stickyNote",
"position": [
1580,
-160
],
"parameters": {
"color": 6,
"width": 220,
"height": 400,
"content": "Creates a new group in Google Contacts if the specified label doesn’t exist."
},
"typeVersion": 1
},
{
"id": "d4e5f6a7-b8c9-4d0e-1f2a-3b4c5d6e7f8a",
"name": "連絡先追加ガイド",
"type": "n8n-nodes-base.stickyNote",
"position": [
1820,
20
],
"parameters": {
"color": 6,
"width": 220,
"height": 400,
"content": "Adds the contact to Google Contacts with the specified name, phone, and group labels."
},
"typeVersion": 1
},
{
"id": "566b7be5-6090-48eb-acb2-71c0844c240b",
"name": "Notion 連絡先フィールドのマッピング",
"type": "n8n-nodes-base.set",
"position": [
500,
240
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "cf7632d2-9983-4c09-8021-7043b8606c48",
"name": "firstName",
"type": "string",
"value": "={{ $json.name }}"
},
{
"id": "bc1f218c-bd1b-4b07-b812-1569f483a838",
"name": "label",
"type": "string",
"value": "={{ $json.property_buy }}"
},
{
"id": "d62010cd-2768-40a4-9279-c4742575a7bd",
"name": "phone",
"type": "string",
"value": "={{ $json.property_phone }}"
},
{
"id": "71fe5268-8798-4641-9395-1c2295c83ae0",
"name": "Already Added",
"type": "string",
"value": "={{ $json.property_added_to_contacts }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "8f91fe10-353f-4a03-8ddf-18c8958188aa",
"name": "連絡先のループ処理",
"type": "n8n-nodes-base.splitInBatches",
"position": [
760,
240
],
"parameters": {
"options": {
"reset": false
}
},
"typeVersion": 3
},
{
"id": "2d832694-f231-4201-8432-9d032e000d7f",
"name": "Google 連絡先グループの取得",
"type": "n8n-nodes-base.httpRequest",
"position": [
1180,
240
],
"parameters": {
"url": "https://people.googleapis.com/v1/contactGroups",
"options": {},
"sendQuery": true,
"authentication": "predefinedCredentialType",
"queryParameters": {
"parameters": [
{
"name": "pageSize",
"value": "1000"
}
]
},
"nodeCredentialType": "googleContactsOAuth2Api"
},
"credentials": {},
"typeVersion": 4.2
},
{
"id": "d9660c1f-9672-4cf0-8196-fee0b0acb8d3",
"name": "Google 連絡先グループの存在確認",
"type": "n8n-nodes-base.if",
"position": [
1640,
240
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "f8e38a64-ace8-49e8-b400-c6609db670e9",
"operator": {
"type": "array",
"operation": "empty",
"singleValue": true
},
"leftValue": "={{ $json.resourceName }}",
"rightValue": "null"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "c913cf75-f9eb-4b27-b5f3-5bae32ee0d86",
"name": "Notion で連絡先を同期済みとしてマーク",
"type": "n8n-nodes-base.notion",
"position": [
2080,
240
],
"parameters": {
"pageId": {
"__rl": true,
"mode": "url",
"value": "={{ $('Get All Contacts from Notion').item.json.url }}"
},
"options": {},
"resource": "databasePage",
"operation": "update",
"propertiesUi": {
"propertyValues": [
{
"key": "Added to Contacts|checkbox",
"checkboxValue": true
}
]
}
},
"credentials": {},
"typeVersion": 2.2
},
{
"id": "d8f8f322-26c2-4c22-bc74-22db9c67cfd3",
"name": "新規 Google 連絡先グループの作成",
"type": "n8n-nodes-base.httpRequest",
"position": [
1640,
40
],
"parameters": {
"url": "https://people.googleapis.com/v1/contactGroups",
"method": "POST",
"options": {},
"jsonBody": "={\n \"contactGroup\": {\n \"name\": \"{{ $json.name }}\"\n }\n} ",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "googleContactsOAuth2Api"
},
"credentials": {},
"typeVersion": 4.2
},
{
"id": "8e01eb00-ba8b-495b-bcec-38c50d631357",
"name": "連絡先の同期済み確認",
"type": "n8n-nodes-base.if",
"position": [
980,
240
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "a707ab4a-4300-4626-bc72-d0bd6126f733",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $('Map Notion Contact Fields').item.json['Already Added'].toBoolean() }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "7a218d3f-9a76-4f21-a599-f550f3642159",
"name": "新規 Notion 連絡先時のトリガー",
"type": "n8n-nodes-base.notionTrigger",
"position": [
40,
160
],
"parameters": {
"pollTimes": {
"item": [
{
"mode": "everyWeek"
}
]
},
"databaseId": {
"__rl": true,
"mode": "id",
"value": "Enter your Notion database ID here."
}
},
"credentials": {},
"typeVersion": 1
},
{
"id": "871cfdb2-8353-4347-8b96-23d0deacb3cd",
"name": "更新 Notion 連絡先時のトリガー",
"type": "n8n-nodes-base.notionTrigger",
"position": [
40,
360
],
"parameters": {
"event": "pagedUpdatedInDatabase",
"pollTimes": {
"item": [
{
"mode": "everyWeek"
}
]
},
"databaseId": {
"__rl": true,
"mode": "id",
"value": "Enter your Notion database ID here."
}
},
"credentials": {},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "c0a0f606-780f-4f03-95d9-6d7ad6c12790",
"connections": {
"14397583-f0e6-4bc4-9bf1-ac87f80e701a": {
"main": [
[
{
"node": "d9660c1f-9672-4cf0-8196-fee0b0acb8d3",
"type": "main",
"index": 0
}
]
]
},
"8f91fe10-353f-4a03-8ddf-18c8958188aa": {
"main": [
[],
[
{
"node": "8e01eb00-ba8b-495b-bcec-38c50d631357",
"type": "main",
"index": 0
}
]
]
},
"566b7be5-6090-48eb-acb2-71c0844c240b": {
"main": [
[
{
"node": "8f91fe10-353f-4a03-8ddf-18c8958188aa",
"type": "main",
"index": 0
}
]
]
},
"2d832694-f231-4201-8432-9d032e000d7f": {
"main": [
[
{
"node": "14397583-f0e6-4bc4-9bf1-ac87f80e701a",
"type": "main",
"index": 0
}
]
]
},
"9884a0d6-5969-4e36-9d1e-e9026cfd2fae": {
"main": [
[
{
"node": "566b7be5-6090-48eb-acb2-71c0844c240b",
"type": "main",
"index": 0
}
]
]
},
"7a218d3f-9a76-4f21-a599-f550f3642159": {
"main": [
[
{
"node": "9884a0d6-5969-4e36-9d1e-e9026cfd2fae",
"type": "main",
"index": 0
}
]
]
},
"bc13d96d-951e-4d7a-90ed-af96617647ef": {
"main": [
[
{
"node": "c913cf75-f9eb-4b27-b5f3-5bae32ee0d86",
"type": "main",
"index": 0
}
]
]
},
"8e01eb00-ba8b-495b-bcec-38c50d631357": {
"main": [
[
{
"node": "8f91fe10-353f-4a03-8ddf-18c8958188aa",
"type": "main",
"index": 0
}
],
[
{
"node": "2d832694-f231-4201-8432-9d032e000d7f",
"type": "main",
"index": 0
}
]
]
},
"d8f8f322-26c2-4c22-bc74-22db9c67cfd3": {
"main": [
[
{
"node": "8f91fe10-353f-4a03-8ddf-18c8958188aa",
"type": "main",
"index": 0
}
]
]
},
"c913cf75-f9eb-4b27-b5f3-5bae32ee0d86": {
"main": [
[
{
"node": "8f91fe10-353f-4a03-8ddf-18c8958188aa",
"type": "main",
"index": 0
}
]
]
},
"d9660c1f-9672-4cf0-8196-fee0b0acb8d3": {
"main": [
[
{
"node": "d8f8f322-26c2-4c22-bc74-22db9c67cfd3",
"type": "main",
"index": 0
}
],
[
{
"node": "bc13d96d-951e-4d7a-90ed-af96617647ef",
"type": "main",
"index": 0
}
]
]
},
"871cfdb2-8353-4347-8b96-23d0deacb3cd": {
"main": [
[
{
"node": "9884a0d6-5969-4e36-9d1e-e9026cfd2fae",
"type": "main",
"index": 0
}
]
]
}
}
}よくある質問
このワークフローの使い方は?
上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。
このワークフローはどんな場面に適していますか?
上級 - 顧客管理
有料ですか?
このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。
関連ワークフロー
私のワークフロー12
Salesforceアカウント情報をネットワークスクレイピング、LinkedInデータ、GPT-4oを使って自動のに豊富にする
If
Set
Code
+
If
Set
Code
30 ノードLe Nguyen
顧客管理
Google連絡先をNotionと双方向同期
Google連絡先をNotionと双方向同期
If
Set
Merge
+
If
Set
Merge
82 ノードSolomon
その他
ブログとLinkedInコンテンツ作成自動化
OpenAIとReplicate AI画像を使用して、ブログとLinkedInコンテンツの作成を自動化
If
Set
Code
+
If
Set
Code
28 ノードSagar Budhathoki
コンテンツ作成
Notion からコンテンツを作成して Linear チケットを生成
Notion のコンテンツから Linear チケットを作成
If
Set
Code
+
If
Set
Code
24 ノードDavid Roberts
エンジニアリング
ノートと音声から構造化された Notion ワークスペースを Gemini と GPT で作成する
ノートと音声からGeminiとGPTで構造化されたNotionワークスペースを作成する
If
Set
Code
+
If
Set
Code
36 ノードAlex Huy
マルチモーダルAI
リールトレンドオブザーバー
GeminiとApifyを使ってハイパフォーマンスなInstagram Reelsを見つけ、洞察をNotionに保存
If
Set
Code
+
If
Set
Code
36 ノードEugene Green
市場調査