Skip to content

How to Connect Notion to Odoo: Documentation & Database Sync

DeployMonkey Team · March 23, 2026 9 min read

Why Connect Notion to Odoo?

Notion serves as the documentation hub for thousands of teams — wikis, meeting notes, project databases, and knowledge bases. Odoo runs the business operations — CRM, sales, inventory, HR. The challenge is that business context lives in Odoo while team documentation lives in Notion, creating information silos.

Connecting them means your Notion wikis can reference live Odoo data (customer counts, revenue, inventory levels), and your Notion project databases can sync with Odoo project tasks for billing and reporting.

Integration Approaches

MethodDifficultyReal-timeBest For
Zapier / MakeLowPolling (1-15min)Simple one-way sync
Notion API + Odoo CronMediumScheduled (5-60min)Database sync
n8n WorkflowMediumWebhook + pollingComplex workflows
Custom ModuleHighConfigurableDeep integration

Step 1: Set Up Notion API

  1. Go to notion.so/my-integrations
  2. Create a new integration
  3. Select capabilities: Read content, Update content, Insert content
  4. Copy the Internal Integration Token
  5. Share the Notion databases you want to sync with the integration (click Share on the database page and add your integration)

Step 2: Map Notion Databases to Odoo Models

Notion databases are essentially structured tables, similar to Odoo models. Common mappings:

Notion DatabaseOdoo ModelSync Direction
Tasks databaseproject.taskBidirectional
Contacts databaseres.partnerOdoo to Notion
Product catalogproduct.productOdoo to Notion
Meeting notescalendar.event notesNotion to Odoo
Bug trackerproject.task (bug type)Bidirectional

Step 3: Build the Sync Script

import requests
import xmlrpc.client

NOTION_TOKEN = 'secret_xxx'
NOTION_DB_ID = 'your_database_id'
ODOO_URL = 'https://your-odoo.com'

# Fetch Notion database entries
def get_notion_tasks():
    resp = requests.post(
        f'https://api.notion.com/v1/databases/{NOTION_DB_ID}/query',
        headers={
            'Authorization': f'Bearer {NOTION_TOKEN}',
            'Notion-Version': '2022-06-28',
        },
        json={'sorts': [{'property': 'Last edited time', 'direction': 'descending'}]}
    )
    return resp.json()['results']

# Push to Odoo
models = xmlrpc.client.ServerProxy(f'{ODOO_URL}/xmlrpc/2/object')

for page in get_notion_tasks():
    props = page['properties']
    name = props['Name']['title'][0]['plain_text']
    status = props.get('Status', {}).get('select', {}).get('name', 'New')
    
    # Check if task exists in Odoo
    existing = models.execute_kw(db, uid, api_key, 'project.task', 'search',
        [[('x_notion_id', '=', page['id'])]])
    
    vals = {'name': name, 'x_notion_id': page['id']}
    if existing:
        models.execute_kw(db, uid, api_key, 'project.task', 'write',
            [existing, vals])
    else:
        models.execute_kw(db, uid, api_key, 'project.task', 'create', [vals])

Step 4: Push Odoo Data to Notion

Create Notion pages from Odoo records. This is useful for making business data accessible to teams who live in Notion:

def push_customer_to_notion(partner):
    requests.post(
        'https://api.notion.com/v1/pages',
        headers={
            'Authorization': f'Bearer {NOTION_TOKEN}',
            'Notion-Version': '2022-06-28',
        },
        json={
            'parent': {'database_id': NOTION_CUSTOMERS_DB},
            'properties': {
                'Name': {'title': [{'text': {'content': partner['name']}}]},
                'Email': {'email': partner['email']},
                'Revenue': {'number': partner['total_invoiced']},
                'Plan': {'select': {'name': partner.get('plan', 'Free')}},
            }
        }
    )

Use Cases

  • Sales wiki: Notion page auto-populated with latest CRM pipeline stats from Odoo
  • Product catalog: Notion database synced from Odoo products for marketing team reference
  • Sprint planning: Notion sprint boards synced to Odoo tasks for timesheet billing
  • Customer success: Notion customer profiles enriched with Odoo subscription and billing data
  • Onboarding checklists: Notion templates that create corresponding Odoo HR records

Limitations

  • Notion API does not support webhooks for database changes (polling required)
  • Notion's API rate limit is 3 requests per second
  • Rich text formatting in Notion does not map cleanly to Odoo HTML fields
  • Notion relations and rollups require additional API calls to resolve

DeployMonkey + Notion

DeployMonkey instances provide API access for Notion sync scripts. Our AI agent can help you design the database mapping, build the sync workflow, and set up scheduled actions in Odoo.