Internal Service β This is not an HTTP endpoint. Itβs called by the store-email-in-notion route.
Purpose
Transforms the email submission into the format required by Notionβs API.
Function Signature
def build_notion_properties(submission: EmailSubmission) -> dict
Parameters
| Parameter | Type | Description |
|---|
submission | EmailSubmission | Pydantic model with email, websiteUrl, referral, utm_campaign |
Returns
{
"Email": {"title": [{"text": {"content": "[email protected]"}}]},
"Website URL": {"url": "https://example.com"},
"Referral": {"rich_text": [{"text": {"content": "google"}}]},
"UTM Campaign": {"rich_text": [{"text": {"content": "launch2024"}}]},
"Submitted At": {"date": {"start": "2024-01-15T10:30:00+00:00"}},
"Status": {"status": {"name": "Waitlist"}}
}
Notion Property Types
| Property | Notion Type | Notes |
|---|
| Email | title | Required, primary identifier |
| Website URL | url | Can be null |
| Referral | rich_text | Empty string if not provided |
| UTM Campaign | rich_text | Empty string if not provided |
| Submitted At | date | ISO format with timezone |
| Status | status | Always βWaitlistβ |
def build_notion_properties(submission: EmailSubmission) -> dict:
return {
"Email": {"title": [{"text": {"content": submission.email}}]},
"Website URL": {"url": submission.websiteUrl or None},
"Referral": {"rich_text": [{"text": {"content": submission.referral or ""}}]},
"UTM Campaign": {"rich_text": [{"text": {"content": submission.utm_campaign or ""}}]},
"Submitted At": {"date": {"start": datetime.now(timezone.utc).isoformat()}},
"Status": {"status": {"name": "Waitlist"}},
}
Code Location
src/website/waitlist/routes.py
# Lines 26-35: build_notion_properties()