Skip to main content

Add, update, and fetch contacts from a Notion database by email

Workflow preview

Workflow preview
100%
Add, update, and fetch contacts from a Notion database by email preview
Open on n8n.io

1. Workflow Overview

Overview Store, update, and retrieve contacts in a Notion database by sending a JSON payload to an n8n workflow. Email is used as the unique identifier — no Notion page IDs required. What this...

Best for

  • CRM automation workflows
  • advanced n8n builders looking for reusable templates

Tools used

n8n-nodes-base.stickynote, n8n-nodes-base.manualtrigger, n8n-nodes-base.notion, n8n-nodes-base.if, n8n-nodes-base.respondtowebhook, n8n-nodes-base.switch

Source and attribution

This workflow is cataloged by N8N Workflows and links back to its original n8n.io source page by Tejasv Makkar.

Original n8n.io source

1.1 Workflow description

Title
Add, update, and fetch contacts from a Notion database by email
Workflow name
Add, update, and fetch contacts from a Notion database by email

🚀 Overview

Store, update, and retrieve contacts in a Notion database by sending a JSON payload to an n8n workflow. Email is used as the unique identifier — no Notion page IDs required.

✨ What this workflow does

The workflow has three actions, controlled by a single action field in the payload:

  • Create — checks if a contact with that email already exists. Blocks the request if it does. Creates a new row in Notion if it does not.
  • Update — finds the contact by email automatically and updates their details. No Notion page ID needed.
  • Get — searches Notion by email and returns the contact's details.

🔧 Requirements

  • An n8n instance (cloud or self-hosted)
  • A Notion account with an API integration token
  • A Notion database with these columns:
Column Notion type
Name Title
Email Email
Phone Phone number
Status Select — suggested options: Lead, Contacted, Qualified, Customer, Closed
Notes Text

⚙️ Setup

  1. Create a Notion integration — go to notion.so/my-integrations, create a new integration, and copy the token.
  2. Add credentials in n8n — go to Credentials → New → Notion API → paste your token → save.
  3. Connect your database — in Notion, open your database → click ... top right → Connections → select your integration.
  4. Select your database in n8n — open each Notion node in the workflow and pick your database from the dropdown.
  5. Test — use the Manual Trigger with the sample payloads below to confirm each branch works.
  6. Go live — replace the Manual Trigger with a Webhook node. Send POST requests to the generated URL from any app or form.

📚 Sample payloads

Use these in the Manual Trigger to test each action:

Create a contact:

{
 "action": "create",
 "name": "Jane Doe",
 "email": "[email protected]",
 "phone": "+49 123 456 789",
 "status": "Lead",
 "notes": "Met at Berlin conference"
}

Update a contact:

{
 "action": "update",
 "email": "[email protected]",
 "name": "Jane Doe",
 "phone": "+49 123 456 789",
 "status": "Customer",
 "notes": "Signed contract on March 24"
}

Fetch a contact:

{
 "action": "get",
 "email": "[email protected]"
}

🖥 Connect a frontend

This workflow works as a backend API. Any frontend can send POST requests to the Webhook URL and display the response — no direct Notion API connection needed in the frontend.

What n8n handles so your frontend does not have to:

  • Checks for duplicate emails before creating a contact
  • Finds the correct Notion row by email before updating — no page ID management
  • Returns structured JSON responses for success and error states

To wire up a frontend: replace the Manual Trigger with a Webhook node, point your form or dashboard at the Webhook URL, and read the JSON response to show feedback to the user. Works with React, Vue, plain HTML, or no-code tools like Webflow or Bubble.

💡 Notes

  • status values are case-sensitive — send Lead not lead.
  • Every contact must have a unique email address. The create action blocks duplicates.
  • The update action returns an error if the email is not found — run create first.
  • The get action returns one contact per email lookup.

1.2 Logical Blocks

This catalog entry is organized from the workflow JSON. The node-level section below shows the executable blocks available for review before importing the template.

2. Block-by-Block Analysis

Block 1 - Sticky Note — Main

Type / Role
n8n-nodes-base.stickyNote - stickyNote
Config choices
Version 1

Block 2 - Sticky Note — Create

Type / Role
n8n-nodes-base.stickyNote - stickyNote
Config choices
Version 1

Block 3 - Sticky Note — Update

Type / Role
n8n-nodes-base.stickyNote - stickyNote
Config choices
Version 1

Block 4 - Sticky Note — Get

Type / Role
n8n-nodes-base.stickyNote - stickyNote
Config choices
Version 1

Block 5 - Manual Trigger

Type / Role
n8n-nodes-base.manualTrigger - manualTrigger
Config choices
Version 1

Block 6 - Search — Email Exists?

Type / Role
n8n-nodes-base.notion - notion
Config choices
Version 2

Block 7 - Already Exists?

Type / Role
n8n-nodes-base.if - if
Config choices
Version 2

Block 8 - Block Duplicate

Type / Role
n8n-nodes-base.respondToWebhook - respondToWebhook
Config choices
Version 1

Block 9 - Search — Find by Email

Type / Role
n8n-nodes-base.notion - notion
Config choices
Version 2

Block 10 - Person Found?

Type / Role
n8n-nodes-base.if - if
Config choices
Version 2

Block 11 - Not Found Error

Type / Role
n8n-nodes-base.respondToWebhook - respondToWebhook
Config choices
Version 1

Block 12 - Respond

Type / Role
n8n-nodes-base.respondToWebhook - respondToWebhook
Config choices
Version 1

Block 13 - Switch1

Type / Role
n8n-nodes-base.switch - switch
Config choices
Version 3

Block 14 - Notion — Create Person1

Type / Role
n8n-nodes-base.notion - notion
Config choices
Version 2

Block 15 - Notion — Update Person1

Type / Role
n8n-nodes-base.notion - notion
Config choices
Version 2

Block 16 - Notion — Get Person1

Type / Role
n8n-nodes-base.notion - notion
Config choices
Version 2

Block 17 - Sticky Note — Switch

Type / Role
n8n-nodes-base.stickyNote - stickyNote
Config choices
Version 1

3. Summary Table

Workflow Add, update, and fetch contacts from a Notion database by email
Complexity advanced
Nodes 17
Categories CRM
Author Tejasv Makkar
Published 24 Mar 2026

4. Reproducing the Workflow from Scratch

  1. 1. Download the workflow JSON

    Use the JSON export at /data/workflows/14304/14304.json as the source template for this automation.

  2. 2. Import the template into n8n

    Open n8n, import the downloaded JSON, and review each node before activating the workflow.

  3. 3. Configure credentials and variables

    Replace placeholder credentials, API keys, webhook URLs, account IDs, and environment-specific values with your own settings.

  4. 4. Test with sample data

    Run the workflow manually or in a staging workspace, inspect node output, and confirm downstream systems receive the expected data.

  5. 5. Activate and monitor

    Enable the workflow only after testing, then monitor executions, errors, and rate limits during the first production runs.

5. General Notes & Resources

Review imported nodes carefully before activation. This catalog entry is intended to help you inspect the workflow structure, understand required services, and find related templates faster.

Node names, credentials, schedules, webhook paths, and external service limits may need adjustment for your workspace.

Frequently asked questions

What does Add, update, and fetch contacts from a Notion database by email do?

Overview Store, update, and retrieve contacts in a Notion database by sending a JSON payload to an n8n workflow. Email is used as the unique identifier — no Notion page IDs required. What this...

What do I need before importing this workflow?

Review the workflow JSON, configure any required credentials in n8n, and test the automation in a safe workspace before using it in production.

Can I customize this workflow?

Yes. Use the block-by-block analysis and the downloadable JSON to inspect each node, then adjust credentials, prompts, schedules, filters, or destinations for your CRM use case.