Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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

AspectNotionGeneral Bots
HostingCloud onlySelf-hosted
Pricing$10-15/user/monthNo per-user fees
AI Features$10/user/month add-onNative (any LLM)
AutomationLimitedFull BASIC scripting
Chat/BotNot includedMulti-channel
API CreationNot availableInstant webhooks
Data SovereigntyTheir serversYour infrastructure

Content Mapping

Notion to General Bots

Notion FeatureGeneral Bots Equivalent
PagesKnowledge base documents (.gbkb)
DatabasesTables (CSV/database)
Kanban boardsTask boards
CalendarCalendar API
CommentsConversation history
TemplatesBot templates
IntegrationsBASIC scripts + webhooks
Notion AILLM keyword

Migration Process

Step 1: Export Notion Content

Navigate to Settings & Members, then Settings, and scroll to Export content. Choose the Markdown & CSV export format and download the ZIP file.

The export includes pages as Markdown files, databases as CSV files, and 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 allows highlighting text and selecting “Summarize” but is limited to Notion content. General Bots provides broader capability:

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

Content Generation

Where Notion AI uses the /ai command for basic prompting, General Bots offers full control:

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 asks questions about single page content. General Bots searches across your entire knowledge base:

' 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, and 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 PropertyGeneral Bots Equivalent
TitleTEXT column
TextTEXT column
NumberNUMERIC column
SelectTEXT with validation
Multi-selectJSONB array
DateDATE/TIMESTAMP column
PersonUser reference
FilesFile path references
CheckboxBOOLEAN column
URLTEXT column
EmailTEXT column
PhoneTEXT column
FormulaComputed in BASIC
RelationForeign key
RollupAGGREGATE queries

Formula Migration

Notion formulas like prop("Price") * prop("Quantity") translate to BASIC calculations:

' 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 uses foreign keys:

' 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 as BASIC scripts.

Meeting notes template:

' 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

Before starting, export all Notion content in Markdown & CSV format. Inventory your databases and their properties. Document active integrations. Identify critical templates that need recreation. Set up your General Bots environment.

Migration

During the migration, organize Markdown files into the .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 to replace Notion workflows.

Post-Migration

After migration, verify all content is searchable in the knowledge base. Test database queries. Confirm automations work correctly. Train your team on the new interface. Redirect any Notion integrations to General Bots.

Best Practices

Organize your knowledge base thoughtfully by grouping related documents in collections for better RAG results.

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

Leverage AI for migration by using 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 since BASIC templates are more powerful than Notion’s static templates.

See Also