Integration Guide

How to Connect InstantDM with Notion (Step-by-Step Guide)

Learn how to connect InstantDM with Notion to automatically log Instagram DM leads into a Notion database. Step-by-step guide for syncing Instagram lead data to Notion using webhooks and automation.

Meta Business Partner
30,000+ creators
$9.99/mo flat

Notion is a workspace tool that combines docs, databases, and project management. Connecting InstantDM to Notion lets you automatically log Instagram DM leads into a Notion database - giving your team a clean, organized view of every lead without switching between tools.

This guide covers setup via Make.com, Zapier, and Notion's direct API.


Why Use Notion with InstantDM?

  • Team-friendly - everyone on your team probably already uses Notion
  • Rich database views - table, board, timeline, calendar, and gallery views
  • Linked pages - each lead can have its own page with notes, tasks, and context
  • Flexible properties - add any fields you need without rigid schemas
  • Free for personal use - Notion's free plan supports unlimited pages and databases
  • Built-in collaboration - comment on leads, assign team members, and track status

Common Use Cases

  • Log every Instagram lead into a Notion database
  • Build a kanban board to track lead status
  • Create a shared lead database for your sales team
  • Link leads to campaign pages or product databases
  • Use Notion as a lightweight CRM for small teams

What You'll Need

Requirement Details
InstantDM account Trendsetter, Trendsetter Pro, or any Multi plan
Notion account Free or paid plan
InstantDM API key Found at Settings → API in your InstantDM dashboard
Automation platform (optional) Make.com or Zapier for no-code setup

Step 1: Create a Notion Database

  1. Open Notion and create a new page.
  2. Add a Database - Full page block.
  3. Name it Instagram Leads.
  4. Add these properties:
Property Name Property Type Purpose
Name Title Lead's full name (this is the default title column)
Email Email Lead's email address
Phone Phone Lead's phone number
Instagram Text Their IG username
Flow Text Which DM flow they completed
Interest Text What they're interested in
Status Select New, Contacted, Qualified, Closed
Source Select Instagram DM
Captured Date When the lead was captured

Tip: Add "New", "Contacted", "Qualified", and "Closed" as options for the Status property. Add "Instagram DM" as an option for Source.


Step 2: Connect Notion to Your Integration

For any method (Make.com, Zapier, or API), Notion requires you to share the database with an integration.

For Make.com / Zapier

The platforms handle this during the OAuth connection flow. When prompted, select the Instagram Leads database to grant access.

For Direct API

  1. Go to notion.so/my-integrations.
  2. Click New integration.
  3. Name it InstantDM and select your workspace.
  4. Set capabilities: Read content, Insert content, Update content.
  5. Copy the Internal Integration Token.
  6. Go to your Notion database page.
  7. Click ... (three dots) → ConnectionsConnect to → select your InstantDM integration.

Important: You must share the database with the integration, or API calls will return 404.


Method 1: Via Make.com (Recommended)

Step 1: Set Up the Webhook

Follow Steps 1-4 in the Make.com integration guide to create a webhook scenario.

Step 2: Add a Notion Module

  1. After the webhook trigger, add a Filter: event equals flow_completed.
  2. Click "+" and search for Notion.
  3. Select Create a Database Item.
  4. Connect your Notion account.
  5. Select the Instagram Leads database.

Step 3: Map Fields

Notion Property Make.com Mapping
Name (Title) {{data.response_variables.full_name}}
Email {{data.response_variables.email}}
Phone {{data.response_variables.phone}}
Instagram @{{data.username}}
Flow {{data.flow_name}}
Interest {{data.response_variables.interest}}
Status New
Source Instagram DM
Captured {{timestamp}}

Step 4: Test and Activate

  1. Run once in Make.com.
  2. Trigger a test event from InstantDM.
  3. Check your Notion database - a new entry should appear.
  4. Activate the scenario.

Method 2: Via Zapier

Step 1: Create the Zap

Follow the Zapier integration guide to set up a webhook trigger.

Step 2: Add Notion Action

  1. Add a Filter: event exactly matches flow_completed.
  2. Add Notion → Create Database Item.
  3. Connect your Notion account and select the database.
  4. Map properties as shown in Method 1.

Step 3: Test and Activate

  1. Test with sample data.
  2. Verify the entry in Notion.
  3. Turn the Zap on.

Method 3: Direct API Integration

Build a Webhook Receiver

const express = require('express');
const app = express();
app.use(express.json());

const NOTION_TOKEN = process.env.NOTION_TOKEN;
const DATABASE_ID = 'your-database-id-here';

app.post('/instantdm-webhook', async (req, res) => {
  const { event, timestamp, data } = req.body;
  
  if (event !== 'flow_completed') {
    return res.status(200).json({ status: 'skipped' });
  }
  
  const page = {
    parent: { database_id: DATABASE_ID },
    properties: {
      'Name': {
        title: [{ text: { content: data.response_variables.full_name || data.username } }],
      },
      'Email': {
        email: data.response_variables.email || null,
      },
      'Phone': {
        phone_number: data.response_variables.phone || null,
      },
      'Instagram': {
        rich_text: [{ text: { content: `@${data.username}` } }],
      },
      'Flow': {
        rich_text: [{ text: { content: data.flow_name || '' } }],
      },
      'Interest': {
        rich_text: [{ text: { content: data.response_variables.interest || '' } }],
      },
      'Status': {
        select: { name: 'New' },
      },
      'Source': {
        select: { name: 'Instagram DM' },
      },
      'Captured': {
        date: { start: timestamp },
      },
    },
  };
  
  try {
    const response = await fetch('https://api.notion.com/v1/pages', {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${NOTION_TOKEN}`,
        'Content-Type': 'application/json',
        'Notion-Version': '2022-06-28',
      },
      body: JSON.stringify(page),
    });
    
    const result = await response.json();
    
    if (result.id) {
      res.status(200).json({ status: 'created', id: result.id });
    } else {
      res.status(500).json({ status: 'error', details: result });
    }
  } catch (error) {
    res.status(500).json({ status: 'error', message: error.message });
  }
});

app.listen(3000);

Finding Your Database ID

The database ID is in the URL when you open the database as a full page:

https://www.notion.so/yourworkspace/abc123def456...?v=...
                                    ^^^^^^^^^^^^^^^^
                                    This is the database ID

It's the 32-character hex string before the ?v= parameter. Format it with dashes: abc123de-f456-....


Adding Page Content to Leads

With the Notion API, you can add rich content to each lead's page - not just properties.

Add a Summary Block

const page = {
  parent: { database_id: DATABASE_ID },
  properties: { /* ... same as above ... */ },
  children: [
    {
      object: 'block',
      type: 'heading_2',
      heading_2: {
        rich_text: [{ text: { content: 'Lead Details' } }],
      },
    },
    {
      object: 'block',
      type: 'bulleted_list_item',
      bulleted_list_item: {
        rich_text: [{ text: { content: `Flow: ${data.flow_name}` } }],
      },
    },
    {
      object: 'block',
      type: 'bulleted_list_item',
      bulleted_list_item: {
        rich_text: [{ text: { content: `Interest: ${data.response_variables.interest || 'N/A'}` } }],
      },
    },
    {
      object: 'block',
      type: 'bulleted_list_item',
      bulleted_list_item: {
        rich_text: [{ text: { content: `Instagram: @${data.username}` } }],
      },
    },
    {
      object: 'block',
      type: 'divider',
      divider: {},
    },
    {
      object: 'block',
      type: 'paragraph',
      paragraph: {
        rich_text: [{ text: { content: 'Notes: ' } }],
      },
    },
  ],
};

This creates a lead page with a structured summary and a space for notes.


Building Useful Views

Board View (Kanban)

  1. In your database, click Add a view → Board.
  2. Group by Status.
  3. Columns: New → Contacted → Qualified → Closed.
  4. Drag leads between columns.

Calendar View

  1. Add a Calendar view.
  2. Use the Captured date property.
  3. See when leads are coming in over time.

Filtered Views

  • Today's Leads: Filter where Captured is today.
  • By Campaign: Filter where Flow contains a specific name.
  • Uncontacted: Filter where Status is "New".
  • High Interest: Filter where Interest contains "Premium" or "Enterprise".

Troubleshooting

Issue Solution
Entry not appearing in Notion Check the automation platform execution log. Verify the Notion connection and database selection.
API returning 404 The database isn't shared with your integration. Go to the database → Connections → add your integration.
"Property not found" error Property names are case-sensitive. Ensure exact match with your database properties.
Select value rejected The value must exist as an option in the Select property. Add "New" and "Instagram DM" as options first.
Date format error Notion requires ISO 8601 dates (e.g., 2025-01-15T10:30:00Z). InstantDM timestamps are already in this format.
API returning 400 Check the JSON structure. Notion's API has specific formats for each property type (title, rich_text, select, etc.).
Rate limiting (429) Notion's API allows 3 requests per second. If you're processing many events, add a delay or queue.

Frequently Asked Questions

Is Notion a good CRM replacement?

For small teams (1-10 people) with simple sales processes, Notion works well as a lightweight CRM. It's especially good if your team already uses Notion for other work. For larger teams or complex sales processes, a dedicated CRM like HubSpot or Pipedrive is better.

Can I use Notion's built-in automations?

Notion has basic automations (available on paid plans) that can trigger when database items are created or updated. You can use them to send notifications or update properties. For more complex automations, use Make.com or Zapier.

How do I handle duplicates?

Notion doesn't have built-in deduplication. In Make.com/Zapier, add a "Search" step before creating to check if an entry with the same email already exists. If found, update it instead of creating a new one.

Can I link Instagram leads to other Notion databases?

Yes. Create a Relation property in your Leads database that links to another database (e.g., Campaigns, Products, Team Members). In the API, set the relation property with the linked page IDs.


What's Next

Ready to Automate Your Instagram DMs?

Join 30,000+ creators and brands using InstantDM today.

Start Your Free Trial

No credit card required. Setup in under 15 minutes.