Article content and detailed guides remain in English. The selected language applies to controls and quick instructions.
Back to articles List management
Using Notion for Email List Management and Outreach Tracking By Email Extractor Published October 8, 2026 7 min read
Notion email management CRM outreach tracking productivity
On this page Why Notion for Email Management
Notion databases offer a flexible middle ground between spreadsheets and full CRM platforms. For small teams, founders and solo operators who need more structure than a spreadsheet but less complexity than Salesforce or HubSpot, Notion provides:
Strength
Limitation
Flexible database structure; easy to customise
No built-in email sending
Multiple views (table, board, calendar, gallery)
No native email verification
Built-in templates for repeatable workflows
API rate limits on large datasets
Free tier generous for small teams
Performance can slow above 10,000 records
Relation properties link contacts to campaigns and companies
No built-in reporting dashboard
Rich text notes within each record
CSV import can be slow for large files
Collaboration with comments and assignments
No native mail merge or personalisation
API and integrations (Zapier, Make, n8n)
Less structured than purpose-built CRM
Database Design
Contact database
Property
Type
Purpose
Example values
Name
Title
Contact's full name
"Jane Smith"
Email
Email
Primary email address
"jane@example.com "
Company
Relation (to Companies DB)
Linked company
"Example Corp"
Title
Text
Job title
"VP Marketing"
Source
Select
How you found them
"LinkedIn", "Conference", "Referral", "Website"
Status
Select
Current status in your pipeline
"New", "Contacted", "Replied", "Meeting booked", "Not interested"
Last contacted
Date
Date of last outreach
2026-10-01
Next follow-up
Date
When to follow up next
2026-10-15
Tags
Multi-select
Categories and segments
"Decision maker", "Technical", "Enterprise"
Email verified
Checkbox
Whether the email has been verified
Checked / unchecked
Notes
Rich text
Freeform notes, conversation history
"Met at SaaStr. Interested in Q1."
LinkedIn URL
URL
LinkedIn profile link
linkedin.com/in/janesmith
Campaigns
Relation (to Campaigns DB)
Which campaigns they are part of
"Q4 Outreach", "Event Follow-up"
Priority
Select
Outreach priority
"High", "Medium", "Low"
Company database
Property
Type
Purpose
Example values
Company name
Title
Organisation name
"Example Corp"
Domain
URL
Company website
example.com
Industry
Select
Industry vertical
"SaaS", "E-commerce", "Healthcare"
Size
Select
Company size
"1-10", "11-50", "51-200", "201-1000", "1000+"
Contacts
Relation (to Contacts DB)
People at this company
Links to contact records
ICP fit
Select
How well they match your ideal customer
"Strong fit", "Moderate fit", "Weak fit"
Notes
Rich text
Company research and context
"Series B; using competitor X"
Location
Text
Headquarters location
"San Francisco, CA"
Campaign database
Property
Type
Purpose
Example values
Campaign name
Title
Name of the outreach campaign
"Q4 SaaS Outreach"
Status
Select
Campaign status
"Planning", "Active", "Paused", "Completed"
Start date
Date
When the campaign started
2026-10-01
End date
Date
When the campaign ends
2026-12-31
Contacts
Relation (to Contacts DB)
Contacts in this campaign
Links to contact records
Total contacts
Rollup (count of Contacts)
Number of contacts
150
Contacted
Rollup (contacts with status "Contacted" or later)
Number contacted
80
Replied
Rollup (contacts with status "Replied" or later)
Number who replied
12
Template
Rich text
Email template used
Template text
Notes
Rich text
Campaign strategy and results
Performance notes
Views for Email Management
Contact views
View name
View type
Filters
Sort
Use case
All contacts
Table
None
Created date (newest first)
Master view; data entry
Follow-up today
Table
Next follow-up = Today
Priority (High first)
Daily outreach tasks
Overdue follow-ups
Table
Next follow-up < Today
Next follow-up (oldest first)
Catch up on missed follow-ups
By status
Board
None (grouped by Status)
Last contacted
Pipeline view; see distribution
By company
Table
None
Company name (A-Z)
Account-based view
New contacts
Table
Status = "New"
Created date (newest first)
Contacts that need first outreach
High priority
Table
Priority = "High"
Next follow-up
Focus on top targets
Recently contacted
Table
Last contacted = This week
Last contacted (newest first)
Track recent activity
Unverified emails
Table
Email verified = unchecked
Name (A-Z)
Contacts needing verification
By source
Board
None (grouped by Source)
Created date
See where contacts come from
Campaign views
View name
View type
Filters
Use case
Active campaigns
Table
Status = "Active"
See current campaigns
Campaign board
Board
None (grouped by Status)
Campaign pipeline view
Campaign calendar
Calendar (by Start date)
None
Timeline view of campaigns
Useful formulas
Formula purpose
Notion formula
What it returns
Days since last contact
dateBetween(now(), prop("Last contacted"), "days")
Number of days since last outreach
Is overdue
if(prop("Next follow-up") < now(), true, false)
True if follow-up is past due
Days until follow-up
dateBetween(prop("Next follow-up"), now(), "days")
Negative if overdue; positive if upcoming
Contact status label
if(prop("Status") == "Replied", "Hot", if(prop("Status") == "Meeting booked", "Active", "Nurture"))
Simplified pipeline stage
Email domain
replaceAll(prop("Email"), "^.*@", "")
Extracts domain from email
Outreach Tracking Workflow
Tracking email sequences in Notion
Step
Notion action
How
Import contacts
CSV import or manual entry
Database > Import > CSV
Assign to campaign
Set Campaigns relation
Link contacts to campaign records
Send first email
Update Status to "Contacted"; set Last contacted
Manual update after sending
Log email content
Add to Notes field
Paste or summarise the email sent
Set follow-up
Set Next follow-up date
Based on your sequence timing
Track reply
Update Status to "Replied"; add reply to Notes
Log the response
Book meeting
Update Status to "Meeting booked"
Record meeting date in Notes
Post-meeting
Update with outcome
"Interested", "Not now", "Closed"
Daily outreach routine
Time
Task
Notion view to use
Morning
Check "Follow-up today" view
Follow-up today (filtered view)
Morning
Check "Overdue follow-ups" view
Overdue follow-ups (filtered view)
Send time
Send emails to today's follow-ups
One record at a time; update after each send
After sending
Update "Last contacted" and "Next follow-up"
Inline editing in table view
End of day
Check for replies; update statuses
All contacts sorted by Last contacted
Weekly
Review pipeline in Board view
By status (board view)
Automations and Integrations
Zapier / Make / n8n automations
Automation
Trigger
Action
Auto-create contact from form
New Google Form submission or Typeform entry
Create new Notion database record
Auto-update status on reply
Email reply detected (Gmail / Outlook)
Update Notion contact status to "Replied"
Reminder for follow-ups
Notion record with Next follow-up = Today
Send Slack message or email reminder
Auto-add to campaign
New contact with specific tag
Set Campaigns relation
CRM sync
Notion record created or updated
Create or update record in CRM
Email send tracking
Email sent from cold email tool
Update Last contacted in Notion
Notion API for bulk operations
import requests
import time
NOTION_TOKEN = 'YOUR_NOTION_API_TOKEN'
DATABASE_ID = 'YOUR_DATABASE_ID'
HEADERS = {
'Authorization': f'Bearer {NOTION_TOKEN}',
'Content-Type': 'application/json',
'Notion-Version': '2022-06-28'
}
def add_contact(name, email, company, source, tags):
"""Add a new contact to the Notion database."""
url = 'https://api.notion.com/v1/pages'
data = {
'parent': {'database_id': DATABASE_ID},
'properties': {
'Name': {
'title': [{'text': {'content': name}}]
},
'Email': {'email': email},
'Source': {'select': {'name': source}},
'Status': {'select': {'name': 'New'}},
'Tags': {
'multi_select': [
{'name': tag} for tag in tags
]
},
}
}
response = requests.post(
url, headers=HEADERS, json=data, timeout=30
)
return response.json()
def bulk_import_contacts(contacts):
"""Import multiple contacts with rate limiting."""
results = []
for contact in contacts:
result = add_contact(
name=contact['name'],
email=contact['email'],
company=contact.get('company', ''),
source=contact.get('source', 'Import'),
tags=contact.get('tags', [])
)
results.append(result)
time.sleep(0.35) # Notion API rate limit: ~3 req/sec
return results
Limitations and When to Upgrade
Signal it is time to upgrade
From Notion to...
More than 5,000 contacts
Purpose-built CRM (HubSpot, Pipedrive)
Need email sending from the same tool
Cold email platform (Instantly, Lemlist, Smartlead)
Need automated sequences
Sales engagement platform (Outreach, Salesloft)
Need real-time email tracking
Cold email or CRM with tracking
Multiple team members managing outreach
CRM with role-based permissions
Need pipeline reporting and forecasting
CRM with reporting (HubSpot, Salesforce)
Complex automation workflows
CRM + marketing automation
Before importing contacts into Notion, consolidate and clean your data. Upload contact files from various sources (CSV exports, HTML pages, XLSX files, PDF documents) to Email Extractor to extract and deduplicate email addresses. Download the cleaned list as CSV, then import into Notion (Database > Import > CSV). This prevents duplicate records in your Notion database and ensures every contact has a valid email address.