❗️ Notion Node “Update Database Page” — Invalid Property Types & Undefined Errors (Need Help)

Hi everyone,

I’m currently facing a big roadblock with the Notion node in n8n, and after trying multiple solutions (including schema correction, type matching, and value formatting), I’m still stuck.

:backhand_index_pointing_right: The context:

I’m building an AI-driven CRM system called Jarvis using n8n + OpenAI/GPT + Notion.

The goal is simple:

  1. My AI agent reads lead data from a Notion form.

  2. The AI enriches and completes the information (name, email, phone, tags, etc.).

  3. The enriched data is automatically sent back to Notion using the Update Database Page node.

:backhand_index_pointing_right: The problem:

No matter what I try, I keep getting this error:

Bad request - please check your parameters

body.properties.[field].should be defined, instead was undefined

Even when I set the correct property names (e.g., Nom & Prénom|title, Email|email, Téléphone|phone_number), assign the correct types, and ensure the values are coming from the AI’s JSON output, Notion returns undefined for almost every field.

:backhand_index_pointing_right: What I’ve tried so far:

:white_check_mark: Using both static values and dynamic expressions like {{ $json.output[“Email”] }}

:white_check_mark: Matching all property types (title, email, number, select, multi-select, rich_text, date, etc.)

:white_check_mark: Using both raw IDs and manual inputs for the Database Page

:white_check_mark: Analyzing the output JSON with Structured Output Analyser

:white_check_mark: Using “Set” and “Information Extractor” nodes to clean the AI output

:backhand_index_pointing_right: Result:

It always fails with 400 Bad Request and “undefined” properties.

:light_bulb: Does anyone know how to properly pass dynamic data from an AI Agent into a Notion node in n8n?

• Is there a specific format or field I’m missing?

• Should I transform the output differently before sending it to Notion?

• Is there a better way to map the AI’s output to Notion properties without manual mapping for each field?

Thank you so much in advance!

This is the last step before the whole system goes live, and I’d really appreciate any insights or tips from the community. :folded_hands:

If needed, I can also share screenshots or JSON examples.

{
“nodes”: [
{
“parameters”: {
“model”: {
“__rl”: true,
“value”: “gpt-4o-mini”,
“mode”: “list”,
“cachedResultName”: “gpt-4o-mini”
},
“options”: {}
},
“type”: “@n8n/n8n-nodes-langchain.lmChatOpenAi”,
“typeVersion”: 1.2,
“position”: [
-60,
220
],
“id”: “aba75af2-93d4-4f09-9a06-c276bbe9a37d”,
“name”: “OpenAI Chat Model”,
“credentials”: {
“openAiApi”: {
“id”: “uU1hzXbD1Pm2xunX”,
“name”: “n8n free OpenAI API credits”
}
}
},
{
“parameters”: {
“pollTimes”: {
“item”: [
{
“mode”: “everyMinute”
}
]
},
“databaseId”: {
“__rl”: true,
“value”: “22c1bfc6-20e6-80cf-8144-d5e350bd3ef6”,
“mode”: “list”,
“cachedResultName”: “CRM Jarvis”,
“cachedResultUrl”: “Notion
}
},
“type”: “n8n-nodes-base.notionTrigger”,
“typeVersion”: 1,
“position”: [
-220,
-20
],
“id”: “b8d17416-3521-417c-8f1d-0c3bb767d3c5”,
“name”: “Notion Trigger”,
“credentials”: {
“notionApi”: {
“id”: “0MKFFCWRvovPffuG”,
“name”: “Notion account”
}
}
},
{
“parameters”: {
“assignments”: {
“assignments”: [
{
“name”: “Nom & Prénom”,
“value”: “={{ $json.output[‘Nom & Prénom’] }}”,
“type”: “string”,
“id”: “e0f15d03-1b4e-4929-a115-c82acebf272e”
},
{
“name”: “Email”,
“value”: “={{ $json.output.Email }}”,
“type”: “string”,
“id”: “9b322995-bad5-4f4b-8ac5-a901d385fd80”
},
{
“name”: “Téléphone”,
“value”: “={{ $json.output[‘Téléphone’] }}”,
“type”: “string”,
“id”: “7bb50d3e-e516-4784-ad2b-fc0a62d39d5b”
},
{
“name”: “Site Web”,
“value”: “={{ $json.output[‘Site Web’] }}”,
“type”: “string”,
“id”: “74cdbb4c-a386-4c41-950e-5fca9678265b”
},
{
“name”: “Besoin Principal”,
“value”: “={{ $json.output[‘Besoin Principal’] }}”,
“type”: “string”,
“id”: “b1b08652-0102-45e9-851c-53fad202a3aa”
},
{
“name”: “Problématique”,
“value”: “={{ $json.output[‘Problématique’] }}”,
“type”: “string”,
“id”: “04fdbc60-c0bd-41b9-9945-e33a17590c8d”
},
{
“name”: “Investissement IA”,
“value”: “={{ $json.output[‘Investissement IA’] }}”,
“type”: “string”,
“id”: “ae60f351-2a82-4177-923f-7011c12e1e83”
},
{
“name”: “Score Lead”,
“value”: “={{ $json.output[‘Score Lead’] }}”,
“type”: “string”,
“id”: “d00bd021-0ddd-4b0e-ac24-de27d27acf91”
},
{
“name”: “Client potentiel (€)”,
“value”: “={{ $json.output[‘Client potentiel (€)’] }}”,
“type”: “string”,
“id”: “4d58637e-ee6b-49d3-b1f6-26370a510245”
},
{
“name”: “Date d’entrée”,
“value”: “={{ $json.output[‘Date d’entrée’] }}”,
“type”: “string”,
“id”: “48837145-349a-4727-b3b9-b459055b9468”
},
{
“name”: “Message de relance dans 24 heures”,
“value”: “={{ $json.output[‘Message de relance dans 24 heures’] }}”,
“type”: “string”,
“id”: “cd8acb7c-f7fc-491a-9a98-f89eb764d6ba”
},
{
“id”: “23810fe3-a712-4d14-aaa1-219e73ddced6”,
“name”: “Prochaine action”,
“value”: “={{ $json.output[‘Prochaine action’] }}”,
“type”: “string”
}
]
},
“includeOtherFields”: true,
“options”: {}
},
“type”: “n8n-nodes-base.set”,
“typeVersion”: 3.4,
“position”: [
460,
-100
],
“id”: “d871aa98-bbda-41a5-90ec-cf4995d099bd”,
“name”: “Set - Préparation des champs”
},
{
“parameters”: {
“promptType”: “define”,
“text”: “=Tu es Jarvis, l’agent IA de Jarvis Agency.\n\nTa mission :\n1. Lire les données du prospect reçues via formulaire.\n2. Corriger, compléter, enrichir chaque champ pour améliorer la qualité.\n3. Générer un message personnalisé adapté au contexte.\n\nChamps à traiter systématiquement :\n- Nom & Prénom\n- Email\n- Téléphone\n- Site Web\n- Besoin Principal : Résumer clairement l’objectif (reformuler si flou).\n- Problématique : Choisir parmi :\n - Trop de tâches manuelles\n - Manque de clarté dans l’organisation\n - Perte de temps sur des actions sans valeur\n - Pas assez de temps pour développer\n - Autre\n- Investissement IA : Évaluer selon expérience IA.\n- Score Lead : Chaud / Tiède / Froid.\n- Potentiel Client (€) : 3500 / 450 / 0.\n- Statut Suivi : Toujours “En attente relance”.\n- Tags : Générer mots-clés pertinents.\n- Date d’entrée : Ajouter si manquante.\n- Message de relance dans 24h : Rédiger un message humain, naturel et engageant.\n- Prochaine action : « Envoyer un message le [DATE+1] à [HEURE] ».\n\nNe laisse jamais un champ vide sans tentative d’enrichissement. Sois autonome.\n\nTa sortie : JSON structuré complet. Aucune phrase extérieure n’est permise.”,
“hasOutputParser”: true,
“options”: {
“systemMessage”: “=Tu es Jarvis, un agent IA expert en qualification de leads et enrichissement CRM pour Jarvis Agency.\n\nVoici les données actuelles :\n- Nom & Prénom : {{$json["Nom & Prénom"]}}\n- Email : {{$json["Email"]}}\n- Téléphone : {{$json["Téléphone"]}}\n- Site Web : {{$json["Site Web"]}}\n- Besoin Principal : {{$json["Besoin Principal"]}}\n- Problématique : {{$json["Problématique"]}}\n- Investissement IA : {{$json["Investissement IA"]}}\n- Score Lead : {{$json["Score Lead"]}}\n- Potentiel Client (€) : {{$json["Potentiel Client (€)"]}}\n- Statut Suivi : {{$json["Statut Suivi"]}}\n- Tags : {{$json["Tags"]}}\n- Date d’entrée : {{$json["Date d’entrée"]}}\n- Prochaine action : {{$json["Prochaine action"]}}\n\nTa tâche :\n1. Analyser ces données.\n2. Enrichir chaque champ de manière logique et autonome.\n3. Préparer un message personnalisé (message_pret) qui reflète exactement le besoin et les douleurs exprimées par le prospect.\n\nLe message doit être humain, naturel, sans forcer la vente, et donner envie d’échanger.\n\nSortie obligatoire : JSON structuré complet. Rien d’autre.\n⚠️ Ne retourne jamais un texte ou une string. Ta réponse doit toujours être un objet JSON brut sans guillemets autour.\n\nExemple correct : \n{\n "Nom & Prénom": "Jean Dupont",\n "Email": "[email protected]",\n …\n}\n\nNe retourne jamais ça :\n"{ \"Nom & Prénom\": \"Jean Dupont\", … }”
}
},
“type”: “@n8n/n8n-nodes-langchain.agent”,
“typeVersion”: 2,
“position”: [
20,
-20
],
“id”: “ac84d776-9d24-46cc-94bf-bbcca2bc4fa1”,
“name”: “AI Agent Jarvis”
},
{
“parameters”: {
“jsonSchemaExample”: “{\n "Nom & Prénom": "Jean Dupont",\n "Email": "[email protected]",\n "Téléphone": "0600000000",\n "Site Web": "https://www.jeandupont.com",\n "Besoin Principal": "Maximiser l’efficacité des tâches",\n "Problématique": "Perte de temps sur des actions sans valeur",\n "Investissement IA": "Expérimenté",\n "Score Lead": "Chaud",\n "Client potentiel (€)": 3500,\n "Statut Suivi": "En attente relance",\n "Tags": "efficacité, automatisation, IA",\n "Date d’entrée": "2023-10-10",\n "Message de relance dans 24 heures": "Bonjour Jean, je vous remercie pour votre intérêt concernant l’automatisation de vos tâches. Nous pourrions explorer ensemble des solutions pour optimiser votre temps. Seriez-vous disponible pour un échange rapide demain ?",\n "Prochaine action": "Envoyer un message le 2023-10-11 à 10:00"\n}”,
“autoFix”: true
},
“type”: “@n8n/n8n-nodes-langchain.outputParserStructured”,
“typeVersion”: 1.3,
“position”: [
140,
240
],
“id”: “040f6621-c541-418e-a3ef-508ba74e18e6”,
“name”: “Structured Output Parser”
},
{
“parameters”: {
“model”: {
“__rl”: true,
“value”: “gpt-4o-mini”,
“mode”: “list”,
“cachedResultName”: “gpt-4o-mini”
},
“options”: {}
},
“type”: “@n8n/n8n-nodes-langchain.lmChatOpenAi”,
“typeVersion”: 1.2,
“position”: [
140,
420
],
“id”: “e6ee2f82-db8e-4053-bbe6-a6fb70a1ea7f”,
“name”: “OpenAI Chat Model1”,
“credentials”: {
“openAiApi”: {
“id”: “uU1hzXbD1Pm2xunX”,
“name”: “n8n free OpenAI API credits”
}
}
},
{
“parameters”: {
“resource”: “databasePage”,
“operation”: “update”,
“pageId”: {
“__rl”: true,
“value”: “={{ $(‘Notion Trigger’).item.json.id }}”,
“mode”: “id”
},
“simple”: false,
“propertiesUi”: {
“propertyValues”: [
{
“key”: “Nom & Prénom|title”,
“title”: “={{ $json.output[‘Nom & Prénom’] }}”
},
{
“key”: “Email|email”,
“emailValue”: “={{ $json.output.Email }}”
},
{
“key”: “Site Web|url”,
“ignoreIfEmpty”: true,
“urlValue”: “={{ $json.output[‘Site Web’] }}”
},
{
“key”: “Besoin Principal|rich_text”,
“richText”: “={{ $json.output[‘Besoin Principal’] }}”
},
{
“key”: “Problématique|multi_select”
},
{
“key”: “Investissement IA|select”,
“selectValue”: “Oui j’ai testé des outils (ChatGPT Notion AI etc.)”
},
{
“key”: “Score Lead|select”,
“selectValue”: “À contacter”
},
{
“key”: “Potentiel Client (€)|number”,
“numberValue”: “={{ $json.output[‘Client potentiel (€)’] }}”
},
{
“key”: “Tags|multi_select”
},
{
“key”: “Date d’entrée|date”
},
{
“key”: “Message de relance dans 24h|select”,
“richText”: “={{ $json.output[‘Message de relance dans 24 heures’] }}”,
“selectValue”: “En attente”
},
{
“key”: “Prochaine action|date”,
“richText”: “={{ $json.output[‘Prochaine action’] }}”
}
]
},
“options”: {}
},
“type”: “n8n-nodes-base.notion”,
“typeVersion”: 2,
“position”: [
720,
-100
],
“id”: “339e4c49-3d49-44d4-a945-f286300ce8bd”,
“name”: “Update CRM Jarvis2”,
“credentials”: {
“notionApi”: {
“id”: “0MKFFCWRvovPffuG”,
“name”: “Notion account”
}
}
}
],
“connections”: {
“OpenAI Chat Model”: {
“ai_languageModel”: [
[
{
“node”: “AI Agent Jarvis”,
“type”: “ai_languageModel”,
“index”: 0
}
]
]
},
“Notion Trigger”: {
“main”: [
[
{
“node”: “AI Agent Jarvis”,
“type”: “main”,
“index”: 0
}
]
]
},
“Set - Préparation des champs”: {
“main”: [
[
{
“node”: “Update CRM Jarvis2”,
“type”: “main”,
“index”: 0
}
]
]
},
“AI Agent Jarvis”: {
“main”: [
[
{
“node”: “Set - Préparation des champs”,
“type”: “main”,
“index”: 0
}
]
]
},
“Structured Output Parser”: {
“ai_outputParser”: [
[
{
“node”: “AI Agent Jarvis”,
“type”: “ai_outputParser”,
“index”: 0
}
]
]
},
“OpenAI Chat Model1”: {
“ai_languageModel”: [
[
{
“node”: “Structured Output Parser”,
“type”: “ai_languageModel”,
“index”: 0
}
]
]
}
},
“pinData”: {},
“meta”: {
“templateCredsSetupCompleted”: true,
“instanceId”: “2234b7b6f7911cbe4b07c6493c58a646fa598120e9569315cc1ed283665cce1e”
}
}