A lightweight CRM plugin for NotePlan that helps you manage contacts, log interactions, and schedule follow-up remindersβall stored as notes in a configurable folder (default: @CRM).
- β Manage Contacts β Create and organize contacts by category (Client, Colleague, Friend, Family, Business, etc.)
- β Log Interactions β Track every interaction with flexible timestamp formats (date only or date + time)
- β Schedule Reminders β Automatically create follow-up reminders via Apple Reminders (native notifications) or NotePlan Tasks (visible in notecard/dashboard views), with a fully customizable message prefix and tag
- β CRM Dashboard β Visual overview of all contacts, upcoming reminders, and overdue follow-ups
- β Flexible Configuration β Customize tags, timestamps, interaction ordering, and navigation behavior
- β Sidebar View β Quick access to your CRM dashboard from NotePlan's sidebar
- Clone or download this plugin to your NotePlan plugins folder:
~/Library/Containers/co.noteplan.NotePlan3/Data/Library/Application Support/Plugins/ - Enable the plugin in NotePlan's Plugin Manager
- Configure settings as needed (see Settings section)
Open the Command Palette (Cmd+J) and search for any of these commands:
| Command | Shortcut | Description |
|---|---|---|
| Add Contact | ac |
Create a new contact with category and reminder frequency |
| Log Interaction | li |
Record an interaction without scheduling a reminder |
| Log Interaction & Schedule Reminder | lir |
Log an interaction and automatically schedule next follow-up |
| Set Reminder | sr |
Manually set a specific reminder date for a contact |
| Show CRM Dashboard | crm |
Open the CRM Dashboard in the sidebar |
| CRM Settings | crms |
Update plugin configuration |
The CRM Dashboard can be accessed from the NotePlan sidebar by clicking the CRM icon or running the Show CRM Dashboard command.
Create a new contact in your CRM:
- Run Add Contact command
- A single form appears with three fields:
- Name β the contact's name (required)
- Category β Client, Colleague, Friend, Family, or any custom categories from Settings (required)
- Connect frequency β Every day, week, 2 weeks, 3 weeks, month, 2 months, 3 months, 6 months, yearly, or Never (required)
- Press Create (or Cmd+Return) to save
The contact is created as a .md file in your CRM folder (default: @CRM, configurable via Settings) with the following structure:
---
category: Category Name
frequency: Connection frequency
frequency_key: frequencyKey
last_contact: Never
tags: contact/Category
---
# Contact Name
## Photo
## Tasks
## InteractionsProperties are stored in YAML frontmatter so they appear as columns in NotePlan's notecard and column views. The tags field is used internally to identify and filter contacts.
Automatic Reminder: A follow-up reminder is automatically scheduled based on your chosen frequency and reminder backend (Apple Reminders or NotePlan task). If you select Never, no reminder is created.
Record an interaction with a contact without scheduling a new reminder:
- Run Log Interaction command
- Select a contact from the list (supports fuzzy search)
- A form appears with two fields:
- Interaction Type β dropdown with your configured types (defaults: βοΈ Call, π§ Email, π€ Meeting, π¬ Text, π± Social, π Other β customizable via Settings)
- Notes β optional multi-line text area
- Press Log (or Cmd+Return) to save
The interaction is logged in the contact's note under the Interactions section with a timestamp.
Example:
2026-04-07 | 14:30 βοΈ Call - Discussed Q2 project timeline
Record an interaction with a contact AND automatically schedule the next follow-up reminder:
- Run Log Interaction & Schedule Reminder command
- Select a contact (supports fuzzy search)
- A form appears with Interaction Type and Notes fields
- Press Log β the current reminder is completed automatically
- Next reminder is scheduled based on the contact's configured frequency
This is the primary workflow for maintaining regular contact.
Manually schedule a one-time reminder for a contact:
- Run Set Reminder command
- Select a contact with fuzzy search (type to filter through large contact lists)
- A form appears with two fields:
- When β Today, Tomorrow, Next week, In 2 weeks, or Next month (required)
- Reminder β optional reminder text (e.g., "Discuss proposal", "Birthday gift")
- Press Set (or Cmd+Return) to save
The reminder appears in NotePlan's calendar.
Open the CRM Dashboard, which displays:
Statistics:
- Total contacts
- Reminders due this week
- Overdue reminders
Sections:
- Upcoming Reminders β Shows overdue and upcoming reminders for the week
- Contacts β Displays all contacts with filters by category; click any contact to open their note
- Action Buttons β Quick access to all major commands
Features:
- Click on a contact card to open the contact's note directly
- Filter contacts by category
- Click any button to execute commands directly from the dashboard
- Real-time reminders with visual distinction for overdue items (
β οΈ in red)
Configure plugin behavior through a settings interface. See Settings section.
All settings are accessible via the CRM Settings command (crms).
CRM Folder (crm-data-folder)
- Default:
@CRM - Description: The NotePlan folder where all contact notes are stored. You can use any folder name or a nested path.
- Example:
@CRM,Work/CRM,Contacts - Use Case: Move your CRM data to a different folder without losing existing contacts (update the setting then move the files)
Contact Tag Prefix (crm-relationship-tag)
- Default:
contact - Description: The hashtag prefix used to categorize contacts
- Example: With default value, contacts are tagged as
#contact/Client,#contact/Friend, etc.
Custom Categories (crm-custom-categories)
- Default: Empty
- Description: Additional contact categories beyond the built-in defaults (Client, Colleague, Friend, Family). Enter a comma-separated list.
- Example:
Mentor, Investor, Partner - Use Case: Extend the category list to match your specific relationship types
Interaction Types (crm-interaction-types)
- Default: Empty (uses built-in defaults)
- Description: Comma-separated list of interaction types shown in the form when logging an interaction. You can use any emoji + label combination.
- Default types:
βοΈ Call, π§ Email, π€ Meeting, π¬ Text, π± Social, π Other - Example:
βοΈ Call, π§ Email, ποΈ Check-in, π Lunch, π Other - Use Case: Remove types you never use or add domain-specific ones like "Demo" or "Coffee"
Timestamp Format (crm-interaction-datetime)
- Options:
- Date Only:
2026-04-07 βοΈ Call - ... - Date + Time:
2026-04-07 | 14:30 βοΈ Call - ...
- Date Only:
- Default:
Date + Time - Use Case: Choose "Date Only" for a cleaner log; choose "Date + Time" for precise tracking
Interaction Position (crm-interaction-position)
- Options:
- append: New interactions added at the bottom (chronological order)
- prepend: New interactions added at the top, below the
## Interactionsheading (reverse chronological order)
- Default:
append - Use Case: Use "prepend" to see recent interactions first; use "append" for traditional chronological logs
Reminder Backend (crm-reminder-backend)
- Options:
- Reminders: Apple Reminders β generates native system notifications
- NotePlan: Tasks written inside the contact note under
## Tasks, scheduled with>YYYY-MM-DDsyntax β visible in NotePlan's notecard views and compatible with third-party dashboard plugins
- Default:
Reminders - Use Case: Choose "NotePlan" if you use a NotePlan dashboard plugin that aggregates tasks across notes
Reminder List (crm-reminder-list) (Apple Reminders only)
- Default: Empty (uses system default)
- Description: Choose which Reminders list all CRM reminders should be saved to. Leave empty to use NotePlan's default reminder list. Not used when the backend is set to "NotePlan".
- Use Case: Organize reminders by creating a dedicated "CRM" list or store them in "Work", "Personal", etc.
- Configuration: Set via the CRM Settings command to see all available reminder lists
Reminder Message Prefix (crm-reminder-prefix)
- Default:
Follow up with - Description: The text placed before the contact name in all automatic reminders.
- Examples:
Follow up with,Reach out to,Check in with - Result:
Follow up with John Smith
Reminder Tag (crm-reminder-tag)
- Default: Empty (no tag)
- Description: An optional tag appended to automatic reminder titles.
- Example: setting
#follow-upproducesFollow up with John Smith #follow-up - Use Case: Tag reminders for filtering in Apple Reminders or NotePlan views
Open Contact Note After Logging Interaction (crm-navigate-after-interaction)
- Options:
trueorfalse - Default:
true - Description: When enabled, NotePlan navigates to the contact's note after logging an interaction. When disabled, you stay in your current context.
- Use Case: Enable for detailed editing; disable for quick logging without disrupting your workflow
All contacts are stored in your configured CRM folder (default: @CRM) as individual markdown files.
@CRM/
βββ John Smith.md
βββ Jane Doe.md
βββ Acme Corporation.md
βββ ...
Each contact note follows this structure:
---
category: Client
frequency: Every 2 weeks
frequency_key: twoWeeks
last_contact: 2026-04-07
tags: contact/Client
---
# Contact Name
## Photo
## Tasks
* [ ] Follow up with Contact Name >2026-04-21
## Interactions
<timestamp> <interaction_type> - <notes>
<timestamp> <interaction_type> - <notes>Example:
---
category: Client
frequency: Every 2 weeks
frequency_key: twoWeeks
last_contact: 2026-04-07
tags: contact/Client
---
# John Smith
## Photo
## Tasks
* [ ] Follow up with John Smith #follow-up >2026-04-21
## Interactions
2026-04-07 | 14:30 βοΈ Call - Discussed Q2 deliverables
2026-03-24 | 10:15 π§ Email - Sent proposal
2026-03-10 | 15:45 π€ Meeting - Initial kickoff- YAML Frontmatter:
category,frequency,frequency_key,last_contact, andtagsare stored as frontmatter properties, which appear as columns in NotePlan's notecard and column views tagsfield: Used internally by the plugin to identify and filter contacts (e.g.,contact/Client)- Photo heading: Reserved section for attaching a contact photo
- Tasks heading: When using the NotePlan reminder backend, follow-up tasks are written here with a
>YYYY-MM-DDscheduled date - Interactions heading: All logged interactions are stored here with a timestamp
- Run
Log Interaction & Schedule Reminder(lir) - Select a contact
- Log the interaction details
- The next reminder is automatically scheduled for 1 week later
- Use
Log Interaction(li) to quickly log a brief interaction without scheduling a reminder - Continue working without interruption
- Set a dedicated reminder later if needed using
sr
- Create multiple contacts at once using
Add Contact(ac) - Set each contact's reminder frequency based on how often you want to connect
- Access the CRM Dashboard (
crm) to see all upcoming reminders
- Be Consistent: Regularly use
Log Interaction & Schedule Reminderto maintain accurate follow-up schedules - Use Categories Wisely: Organize contacts by role or relationship type for better filtering and insights
- Set Realistic Frequencies: Choose reminder frequencies that match your actual capacity to connect
- Dashboard as Hub: Use the CRM Dashboard as your jumping-off point for all CRM activities
-
Use aliases for faster command execution:
acfor Add Contactlifor Log Interactionlirfor Log Interaction & Schedule Remindersrfor Set Remindercrmfor Show CRM Dashboardcrmsfor CRM Settings
-
Use prepend interaction positioning to see recent activity first without scrolling
-
Disable navigate-after-interaction if you log interactions while reviewing notes to stay in your current workflow
-
Filter the dashboard by category to focus on specific contact groups
- Use consistent naming conventions for contacts (e.g., "FirstName LastName" or "Company Name")
- Add context in interaction notes for future reference
- Regularly review the Overdue section in the dashboard to catch fallen-through-the-cracks contacts
- Ensure contacts are saved in the folder configured in CRM Settings (
crm-data-folder, default:@CRM) - Check that contact files follow the required markdown format
- Try refreshing the dashboard by running
Show CRM Dashboardagain
- Verify that reminders are properly scheduled in NotePlan's calendar
- Check that the Calendar API is available in your NotePlan environment
- Ensure you have the correct reminder frequency set on the contact
- Restart the plugin by disabling and re-enabling it in Plugin Manager
- Clear the settings file if corruption is suspected (located in plugin preferences folder)
v1.4.0 β Forms UI & customizable interaction types
- All commands now use
CommandBar.showFormto collect multiple inputs in a single step instead of chaining prompts:- Add Contact: name, category, and frequency in one form
- Log Interaction / Log Interaction & Schedule Reminder: interaction type + notes in one form
- Set Reminder: contact selected via fuzzy-search, then when + reminder text in a form
- New Interaction Types setting (
crm-interaction-types): customize the list of interaction types shown when logging an interaction via a comma-separated list; leave empty to use the defaults - Requires NotePlan v3.21.0 or later
v1.3.0 β Customizable reminder messages
- New Reminder Message Prefix setting (
crm-reminder-prefix): change the text before the contact name in automatic reminders (e.g.Reach out to,Check in with) - New Reminder Tag setting (
crm-reminder-tag): append an optional tag to all reminder titles (e.g.#follow-upβFollow up with John #follow-up) - Both settings are available in the CRM Settings command and in NotePlan's Plugin Preferences
v1.2.5 β Configurable CRM folder
- New CRM Folder setting (
crm-data-folder): choose any folder (or nested path) where contact notes are stored β defaults to@CRM - Setting is available both in the CRM Settings command and in NotePlan's Plugin Preferences
v1.2.0 β Custom categories & photo section
- New Custom Categories setting (
crm-custom-categories): extend the built-in contact categories with a comma-separated list of your own (e.g. Mentor, Investor, Partner) - Built-in default categories reduced to Client, Colleague, Friend, Family β add others via the new setting
- Contact notes now include a
## Photosection for attaching a contact photo - Contact notes now use a
tagsfrontmatter field (e.g.tags: contact/Client) instead of an inline hashtag; contacts are filtered using this field - Added Never as a valid reminder frequency (no reminder is created)
v1.1.0 β NotePlan task backend & YAML frontmatter properties
- New Reminder Backend setting: choose between Apple Reminders (native notifications) or NotePlan Tasks (tasks stored in the contact note, compatible with NotePlan dashboard plugins)
- Contact notes now use YAML frontmatter for
category,frequency,frequency_key, andlast_contactβ these appear as columns in NotePlan's notecard and column views - Contact notes now include a
## Tasksheading for NotePlan task scheduling - Reminder list picker is now skipped when the NotePlan backend is selected
Created by jokky102
See LICENSE file for details.
Questions or Issues? Please submit feedback or report bugs via the plugin's GitHub repository.
