Creates a complete client relationship management system in Notion with pipeline stages, contact records, deal values, and follow-up tracking. Use when a user wants to replace spreadsheet-based client tracking, set up a CRM without paid software, or build a sales pipeline from scratch.
Use this skill when you need to:
DO NOT use this skill for:
| Feature | Details |
|---|---|
| Properties |
| 11 fields per contact record |
| Pipeline stages | 6 default (Lead through Closed Won/Lost) |
| Database views | 4 pre-built filtered views |
| Seeding | Bulk import from user-provided contact list |
| Usage guide | Daily/weekly operations documented for the user |
| Property | Type | Purpose | Default |
|---|---|---|---|
| Name | Title | Contact's full name | Required |
| Company | Rich text | Organization or business name | Empty |
| Primary email address | Empty | ||
| Phone | Phone number | Primary phone number | Empty |
| Pipeline Stage | Select | Current position in sales pipeline | Lead |
| Deal Value | Number (USD) | Estimated or actual deal amount | 0 |
| Next Follow-Up | Date | When to reach out next | Empty |
| Last Contact | Date | When you last spoke or emailed | Empty |
| Source | Select | How you found this contact | Other |
| Notes | Rich text | Conversation history, context, preferences | Empty |
| Tags | Multi-select | Categories for filtering and grouping | Empty |
Lead --> Qualified --> Proposal Sent --> Negotiation --> Closed Won --> Closed Lost
| Stage | Meaning | Action Required |
|---|---|---|
| Lead | New contact, not yet vetted | Research and qualify within 48 hours |
| Qualified | Confirmed fit, budget, and interest | Schedule discovery call or send intro |
| Proposal Sent | Proposal or quote delivered | Follow up within 5 business days |
| Negotiation | Active back-and-forth on terms | Respond within 24 hours |
| Closed Won | Deal signed, payment received or agreed | Onboard and deliver |
| Closed Lost | Deal did not close | Log reason in Notes, revisit in 90 days |
Referral, Website, Social Media, Cold Outreach, Event, Inbound, Other
hot-lead, vip, past-client, needs-follow-up, referral-partner, do-not-contact, high-value, retainer, one-time-project
EVERY CRM BUILD STARTS BY CREATING THE DATABASE WITH THE FULL SCHEMA BEFORE ADDING ANY CONTACTS -- NEVER ADD PAGES TO A DATABASE THAT IS MISSING PROPERTIES.
Collect these details from the user before building anything:
If the user provides only item 1, proceed with all defaults.
Brief template for vague requests:
I'll build your CRM in Notion. Quick answers needed:
1. Which Notion page should I create the CRM database under?
2. Do you have existing contacts to import?
3. Any changes to the default pipeline: Lead > Qualified > Proposal Sent > Negotiation > Closed Won > Closed Lost?
4. Any custom tags to add?
5. Currency for deal values? (default: USD)
notion-search with the page name or keywords the user providedFound Notion page: "Business Hub"
Page ID: abc12345-def6-7890-ghij-klmnopqrstuv
I'll create the CRM database under this page. Correct?
IF THE PAGE IS NOT FOUND:
notion-search again with the corrected termnotion-create-database with the parent page ID and full schema:Database title: Client CRM
Properties to create:
Name -> title
Company -> rich_text
Email -> email
Phone -> phone_number
Pipeline Stage -> select
options: Lead (gray), Qualified (blue), Proposal Sent (purple),
Negotiation (orange), Closed Won (green), Closed Lost (red)
Deal Value -> number (format: dollar)
Next Follow-Up -> date
Last Contact -> date
Source -> select
options: Referral (green), Website (blue), Social Media (pink),
Cold Outreach (yellow), Event (orange), Inbound (purple), Other (gray)
Notes -> rich_text
Tags -> multi_select
options: hot-lead (red), vip (yellow), past-client (brown),
needs-follow-up (orange), referral-partner (green),
do-not-contact (gray), high-value (blue), retainer (purple),
one-time-project (pink)
notion-fetch with the returned database IDIF DATABASE CREATION FAILS:
notion-fetch on itSKIP THIS PHASE if the user has no existing contacts to import.
Parse the user's contact list. Accept these formats:
For each contact, map data to the schema:
Call notion-create-pages to add contacts in batches
Report seeding results with names, stages, and deal values
IF CONTACT PARSING IS AMBIGUOUS:
IF BATCH CREATION PARTIALLY FAILS:
Notion MCP does not support creating views programmatically. Provide exact instructions for these 4 views:
RECOMMENDED VIEWS (create these in Notion):
1. ALL CONTACTS (Table view)
- Sort: Last Contact (descending)
- No filter
- Purpose: Full contact list, most recently contacted first
2. ACTIVE PIPELINE (Board view)
- Group by: Pipeline Stage
- Filter: Pipeline Stage is not "Closed Won" AND is not "Closed Lost"
- Sort: Deal Value (descending)
- Purpose: Kanban board of active deals
3. FOLLOW-UPS DUE (Table view)
- Filter: Next Follow-Up is on or before today
- Sort: Next Follow-Up (ascending)
- Purpose: Daily action list of who needs outreach
4. WON DEALS (Table view)
- Filter: Pipeline Stage is "Closed Won"
- Sort: Deal Value (descending)
- Purpose: Revenue tracking and past client reference
Present this operations guide after the CRM is built:
CLIENT CRM — USAGE GUIDE
DAILY ROUTINE (5 minutes):
1. Open "Follow-Ups Due" view
2. Work through each overdue contact
3. After each touchpoint, update:
- Last Contact -> today's date
- Next Follow-Up -> next planned outreach date
- Notes -> what you discussed
- Pipeline Stage -> advance if appropriate
ADDING A NEW CONTACT:
1. Click "+ New" in the "All Contacts" view
2. Fill in Name (required) and known details
3. Set Pipeline Stage to "Lead"
4. Set Next Follow-Up to 3 business days from now
5. Tag with relevant labels
MOVING A DEAL FORWARD:
1. Open "Active Pipeline" board view
2. Drag the contact card to the next stage
3. Update Notes with what happened
4. Adjust Deal Value if scope changed
5. Set Next Follow-Up:
- Qualified: 3-5 days
- Proposal Sent: 5 business days
- Negotiation: 1-2 days
CLOSING A DEAL:
- Won: Move to "Closed Won", update Deal Value, add Notes
- Lost: Move to "Closed Lost", log reason in Notes,
set Next Follow-Up to 90 days for re-engagement
WEEKLY REVIEW (15 minutes):
1. Check for stalled deals (no activity in 7+ days)
2. Review contacts not contacted in 30+ days
3. Count deals per stage — healthy pipeline has contacts in every stage
User request: "I'm a freelance UX consultant. I have 8 clients and prospects I track in a Google Sheet. I want to move everything to Notion. My page is called 'Freelance Business'."
Execution:
Requirements: Parent page "Freelance Business", 8 contacts, default stages, custom tags: ux-audit, design-sprint
Locate parent page: notion-search query "Freelance Business" returns page ID pg_freelance123. Confirmed.
Create database: notion-create-database with full schema + custom tags. Database ID: db_ux456.
Seed contacts: User provides 8 contacts. Parsed and imported:
Contacts imported: 8 of 8 successful
Rachel Kim (Fintech Startup) — Qualified, $12,000
Dev Patel (Bloom Health App) — Proposal Sent, $8,500
Amy Torres (Torres Consulting) — Closed Won, $6,000
Jake Nguyen — Lead, $3,000
Olivia Grant (GrantCo Design Agency) — Negotiation, $20,000
Sam Whitfield — Lead, $0
Diana Brooks (BrooksMedia) — Qualified, $5,000
Chris Yamamoto (Yamamoto Ventures) — Lead, $15,000
Pipeline total (active deals): $63,500
Tags applied: past-client (Amy Torres)
Next follow-ups set for all Leads (3 business days from today)
Final delivery:
Your CRM is live under "Freelance Business":
Database: Client CRM (db_ux456)
Contacts: 8 imported
Active pipeline value: $63,500
Stages: Lead (3), Qualified (2), Proposal Sent (1), Negotiation (1), Closed Won (1)
User request: "I run a small marketing agency. We have about 20 contacts at various stages. I want to track retainer vs. project clients. Our Notion page is called 'Sales & Revenue'."
Execution:
Requirements: Parent "Sales & Revenue", 20 contacts (2 batches), add "Discovery Call" stage, custom tags: retainer-client, project-client, agency-referral, custom source: "Partner Agency"
Locate parent page: notion-search returns pg_sales789. Confirmed.
Create database: 7 pipeline stages (default + Discovery Call), expanded tags and sources. Database ID: db_agency012.
Seed contacts in 2 batches:
Batch 1: 10 of 10 successful
Greenfield Organics — Discovery Call, $4,500/mo retainer
TechPulse Inc. — Proposal Sent, $25,000 project
Harmon Legal Group — Negotiation, $8,000/mo retainer
BlueSky Fitness — Lead, $3,000
Cascade Real Estate — Qualified, $12,000 project
Rivera & Associates — Closed Won, $6,500/mo retainer
Northwind Bakery — Lead, $1,500
Summit Financial — Proposal Sent, $18,000 project
Apex Coworking — Discovery Call, $7,000
Cedar Creek Wellness — Closed Lost, $10,000
Batch 2: 10 of 10 successful
Prism Creative Studio — Qualified, $9,000
Driftwood Coffee Roasters — Lead, $2,000
Ironside Manufacturing — Negotiation, $35,000 project
Velvet Events Co. — Discovery Call, $5,500
Cornerstone Accounting — Proposal Sent, $4,000/mo retainer
Bright Horizons Childcare — Lead, $3,500
Stonebridge Property Mgmt — Closed Won, $7,200/mo retainer
Redwood Marketing — Qualified, $0 (referral partner)
Atlas Sports Academy — Lead, $6,000
Lunar Labs — Negotiation, $22,000 project
Final delivery:
Your agency CRM is live under "Sales & Revenue":
Database: Client CRM (db_agency012)
Contacts: 20 imported (2 batches)
Active pipeline: $171,700
Retainer pipeline: $30,200/mo (4 deals)
Project pipeline: $121,500 (8 deals)
Custom: "Discovery Call" stage, Partner Agency source, retainer/project tags
Run this checklist before delivering the CRM. DO NOT SKIP ANY ITEM.
| Check | What to Verify | How |
|---|---|---|
| Database exists | Created and accessible | notion-fetch with database ID |
| All 11 properties | Every schema property configured | Verify in notion-fetch response |
| Pipeline stages | All stages exist as select options | Check select options |
| Source options | All sources exist as select options | Check select options |
| Tags configured | All tags exist as multi-select options | Check multi-select options |
| Deal Value format | Number formatted as dollar/currency | Verify number format |
| Dates configured | Follow-Up and Last Contact are date type | Verify property types |
| Contacts seeded | All provided contacts created | Count pages vs. expected |
| No duplicates | Same contact not added twice | Check for duplicate names |
| Follow-ups set | Leads/Qualified have Next Follow-Up dates | Verify dates on pages |
| View instructions | User received all 4 view configs | Confirm in delivery |
| Usage guide | User received operations guide | Confirm in delivery |
| Parent page correct | Database under requested page | Verify parent in fetch |
Pre-Delivery Checklist:
[x] Database created and accessible
[x] All 11 properties configured
[x] Pipeline stages correct
[x] Source options present
[x] Tags configured
[x] Deal Value formatted correctly
[x] Date properties configured
[x] All contacts seeded successfully
[x] No duplicate contacts
[x] Follow-up dates set for Leads/Qualified
[x] View setup instructions delivered
[x] Usage guide delivered
[x] Database under correct parent page
notion-fetchnotion-create-pagesNotion MCP does not support modifying existing database schemas. Instruct the user:
Flag potential duplicates before creating pages:
Possible duplicates detected:
"John Smith" and "John Smith Jr." — same person?
"Acme Corp" appears twice with different emails
Please confirm which entries to keep before I import.
NEVER create duplicate contact records -- always confirm with the user first.