Synchroniser les contacts depuis Notion vers Google Contacts et ajouter des étiquettes de groupe

Avancé

Ceci est unCRMworkflow d'automatisation du domainecontenant 20 nœuds.Utilise principalement des nœuds comme If, Set, Code, Notion, HttpRequest. Synchroniser automatiquement les contacts Notion avec les contacts Google et ajouter des étiquettes de groupe

Prérequis
  • Clé API Notion
  • Peut nécessiter les informations d'identification d'authentification de l'API cible

Catégorie

Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "id": "h7YubkTUmnZrsMQs",
  "meta": {},
  "name": "Sync Contacts from Notion to Google Contacts with Group Labels",
  "tags": [],
  "nodes": [
    {
      "id": "9884a0d6-5969-4e36-9d1e-e9026cfd2fae",
      "name": "Obtenir tous les contacts de 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": "Trouver les étiquettes correspondantes",
      "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": "Ajouter le contact aux contacts 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": "Vue d'ensemble du workflow",
      "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": "Explication du déclencheur",
      "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": "Guide de mappage des champs",
      "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": "Guide de correspondance des étiquettes",
      "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": "Guide de vérification de synchronisation existante",
      "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": "Guide de vérification d'existence du groupe",
      "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": "Guide de création de groupe",
      "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": "Guide d'ajout de contact",
      "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": "Mapper les champs de contact 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": "Boucler sur les contacts",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        760,
        240
      ],
      "parameters": {
        "options": {
          "reset": false
        }
      },
      "typeVersion": 3
    },
    {
      "id": "2d832694-f231-4201-8432-9d032e000d7f",
      "name": "Récupérer les groupes de contacts 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": "Vérifier l'existence du groupe de contacts 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": "Marquer le contact comme synchronisé dans 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": "Créer un nouveau groupe de contacts 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": "Vérifier si le contact est déjà synchronisé",
      "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": "Déclencheur sur nouveau contact 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": "Déclencheur sur contact Notion mis à jour",
      "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
          }
        ]
      ]
    }
  }
}
Foire aux questions

Comment utiliser ce workflow ?

Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.

Dans quelles scénarios ce workflow est-il adapté ?

Avancé - CRM

Est-ce payant ?

Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.

Informations sur le workflow
Niveau de difficulté
Avancé
Nombre de nœuds20
Catégorie1
Types de nœuds9
Description de la difficulté

Adapté aux utilisateurs avancés, avec des workflows complexes contenant 16+ nœuds

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34