botserver/docs/src/chapter-14-migration/notion.md
Rodrigo Rodriguez (Pragmatismo) 0507d3cb11 Remove documentation files that have been merged into the mdbook
structure under docs/src/. These files were either duplicates, outdated,
or have been properly integrated into the structured documentation.
2025-11-30 18:07:22 -03:00

11 KiB

Notion Migration Guide

Migrating content and workflows from Notion to General Bots.

General Bots

Overview

Notion is a collaborative workspace combining notes, databases, and project management. General Bots provides equivalent functionality through its knowledge base, task management, and AI-powered conversation features—with the added benefit of self-hosting and native automation.

Why Migrate

Aspect Notion General Bots
Hosting Cloud only Self-hosted
Pricing $10-15/user/month No per-user fees
AI Features $10/user/month add-on Native (any LLM)
Automation Limited Full BASIC scripting
Chat/Bot Not included Multi-channel
API Creation Not available Instant webhooks
Data Sovereignty Their servers Your infrastructure

Content Mapping

Notion to General Bots

Notion Feature General Bots Equivalent
Pages Knowledge base documents (.gbkb)
Databases Tables (CSV/database)
Kanban boards Task boards
Calendar Calendar API
Comments Conversation history
Templates Bot templates
Integrations BASIC scripts + webhooks
Notion AI LLM keyword

Migration Process

Step 1: Export Notion Content

  1. Go to Settings & Members → Settings
  2. Scroll to Export content
  3. Choose Export format: Markdown & CSV
  4. Download the ZIP file

The export includes:

  • Pages as Markdown files
  • Databases as CSV files
  • Attachments in folders

Step 2: Prepare Knowledge Base

Organize exported content for General Bots:

my-bot.gbkb/
├── company-info/
│   ├── about.md
│   ├── policies.md
│   └── procedures.md
├── products/
│   ├── catalog.md
│   └── pricing.md
└── support/
    ├── faq.md
    └── troubleshooting.md

Step 3: Import Documents

Place Markdown files in your .gbkb folder. General Bots automatically indexes them for RAG:

USE KB "company-info"
USE KB "products"
USE KB "support"

TALK "How can I help you?"
HEAR question
answer = LLM question
TALK answer

Step 4: Convert Databases

Transform Notion CSV exports to General Bots tables:

' Import Notion database export
data = READ "notion-export/Projects.csv"

FOR EACH row IN data
    INSERT "projects", #{
        name: row["Name"],
        status: row["Status"],
        due_date: row["Due Date"],
        assignee: row["Assignee"],
        imported_at: NOW()
    }
NEXT row

TALK "Imported " + LEN(data) + " projects"

Step 5: Recreate Task Boards

Convert Notion Kanban boards to General Bots task boards:

' Create project for Notion board
project_id = CREATE PROJECT "Product Roadmap" WITH DESCRIPTION "Migrated from Notion"

' Import tasks
tasks = READ "notion-export/Roadmap.csv"

FOR EACH task IN tasks
    status = SWITCH task["Status"]
        CASE "Not Started" : "todo"
        CASE "In Progress" : "in_progress"
        CASE "Done" : "done"
        DEFAULT : "todo"
    END SWITCH
    
    CREATE TASK task["Name"] IN PROJECT project_id WITH STATUS status
NEXT task

Notion AI to General Bots

Document Summarization

Notion AI:

  • Highlight text → "Summarize"
  • Limited to Notion content

General Bots:

USE KB "documents"
summary = LLM "Summarize the key points from our Q3 report"
TALK summary

Content Generation

Notion AI:

  • Type /ai → Generate content
  • Basic prompting

General Bots:

SET CONTEXT "You are a technical writer. Write clear, concise documentation."

TALK "What would you like me to write?"
HEAR topic

content = LLM "Write comprehensive documentation about: " + topic
WRITE "/docs/" + SLUGIFY(topic) + ".md", content
TALK "Documentation created!"

Q&A on Documents

Notion AI:

  • Ask questions about page content
  • Single page context

General Bots:

' Load entire knowledge base
USE KB "all-docs"
USE KB "wiki"
USE KB "procedures"

' Answer questions across all content
TALK "Ask me anything about our documentation"
HEAR question
answer = LLM question
TALK answer

Automation Migration

Notion Automations (Limited)

Notion has basic automations for:

  • Status changes
  • Due date reminders
  • Slack notifications

General Bots Equivalent

Status change automation:

ON "table:projects:update"
    IF params.old_status <> params.new_status THEN
        IF params.new_status = "complete" THEN
            SEND MAIL TO params.owner_email SUBJECT "Project Completed" BODY "Your project " + params.name + " is now complete!"
        END IF
    END IF
END ON

Due date reminders:

SET SCHEDULE "every day at 9am"

upcoming = FIND "tasks", "due_date = DATEADD(NOW(), 1, 'day') AND status <> 'done'"

FOR EACH task IN upcoming
    SEND MAIL TO task.assignee_email SUBJECT "Task Due Tomorrow" BODY "Reminder: " + task.name + " is due tomorrow"
NEXT task

Slack notifications:

ON "table:tasks:insert"
    POST "https://hooks.slack.com/services/xxx", #{
        text: "New task created: " + params.name,
        channel: "#tasks"
    }
END ON

Database Migration

Notion Database Properties

Notion Property General Bots Equivalent
Title TEXT column
Text TEXT column
Number NUMERIC column
Select TEXT with validation
Multi-select JSONB array
Date DATE/TIMESTAMP column
Person User reference
Files File path references
Checkbox BOOLEAN column
URL TEXT column
Email TEXT column
Phone TEXT column
Formula Computed in BASIC
Relation Foreign key
Rollup AGGREGATE queries

Formula Migration

Notion formula:

prop("Price") * prop("Quantity")

General Bots:

' Calculate on insert/update
total = price * quantity
INSERT "orders", #{item: item, price: price, quantity: quantity, total: total}

' Or query with calculation
SELECT "*, price * quantity as total FROM orders"

Relation Migration

Notion relations link databases together.

General Bots:

' Create related tables
CREATE TABLE "projects" (id, name, status)
CREATE TABLE "tasks" (id, project_id, name, assignee)

' Query with join
tasks = FIND "tasks", "project_id = '" + project_id + "'"

' Or use JOIN keyword
result = JOIN "projects", "tasks", "projects.id = tasks.project_id"

Template Migration

Notion Templates

Notion templates are pre-filled pages. Convert to General Bots templates:

Meeting notes template → BASIC script:

' meeting-notes.bas
PARAM meeting_title AS string
PARAM attendees AS string
PARAM date AS date

DESCRIPTION "Create meeting notes document"

template = "# " + meeting_title + "

**Date:** " + FORMAT(date, "MMMM d, yyyy") + "
**Attendees:** " + attendees + "

## Agenda
1. 
2. 
3. 

## Discussion Notes


## Action Items
- [ ] 
- [ ] 

## Next Meeting
"

WRITE "/meetings/" + FORMAT(date, "yyyy-MM-dd") + "-" + SLUGIFY(meeting_title) + ".md", template
TALK "Meeting notes created: " + meeting_title

Project Template

' new-project.bas
PARAM project_name AS string
PARAM owner AS string

DESCRIPTION "Create new project with standard structure"

project_id = CREATE PROJECT project_name WITH DESCRIPTION "Created by template"
ADD USER TO PROJECT project_id, owner, "owner"

' Create standard tasks
CREATE TASK "Define requirements" IN PROJECT project_id
CREATE TASK "Create timeline" IN PROJECT project_id
CREATE TASK "Assign resources" IN PROJECT project_id
CREATE TASK "Kickoff meeting" IN PROJECT project_id
CREATE TASK "First milestone review" IN PROJECT project_id

TALK "Project '" + project_name + "' created with 5 starter tasks"

What You Gain

Self-Hosting

Your data stays on your infrastructure. No concerns about Notion's data practices or service availability.

Native AI Without Extra Cost

Notion charges $10/user/month for AI features. General Bots includes AI at no additional cost—use any LLM provider.

Full Automation

Go beyond Notion's limited automations with complete BASIC scripting:

SET SCHEDULE "every monday at 9am"

' Generate weekly report
projects = FIND "projects", "status = 'active'"
tasks_completed = AGGREGATE "tasks", "COUNT", "id", "completed_at > DATEADD(NOW(), -7, 'day')"

SET CONTEXT "You are a project manager. Create a concise weekly summary."
report = LLM "Summarize: " + LEN(projects) + " active projects, " + tasks_completed + " tasks completed this week"

SEND MAIL TO "team@company.com" SUBJECT "Weekly Project Summary" BODY report

Multi-Channel Access

Access your knowledge base through any channel:

' Same bot works on web, WhatsApp, Teams, Slack
TALK "How can I help you today?"
HEAR question

USE KB "company-wiki"
answer = LLM question
TALK answer

Custom APIs

Create APIs instantly—something not possible in Notion:

WEBHOOK "project-status"

project = FIND "projects", "id = '" + params.id + "'"
tasks = FIND "tasks", "project_id = '" + params.id + "'"

WITH response
    .project = project
    .task_count = LEN(tasks)
    .completed = LEN(FILTER(tasks, "status = 'done'"))
END WITH

Migration Checklist

Pre-Migration

  • Export all Notion content (Markdown & CSV)
  • Inventory databases and their properties
  • Document active integrations
  • Identify critical templates
  • Set up General Bots environment

Migration

  • Organize Markdown files into .gbkb structure
  • Import database CSVs to tables
  • Convert formulas to BASIC calculations
  • Recreate task boards as projects
  • Migrate templates to BASIC scripts
  • Set up automations

Post-Migration

  • Verify all content is searchable
  • Test database queries
  • Confirm automations work
  • Train team on new interface
  • Redirect any Notion integrations

Best Practices

Organize knowledge base thoughtfully. Group related documents in collections for better RAG results.

Simplify database structures. Notion encourages complex relations; General Bots works best with cleaner schemas.

Leverage AI for migration. Use General Bots' LLM to help transform and summarize Notion content:

content = READ "notion-export/long-document.md"
summary = LLM "Create a concise summary of this document: " + content
WRITE "/summaries/document-summary.md", summary

Keep templates as scripts. BASIC templates are more powerful than Notion's static templates.

See Also