notion_upload
A lightweight Python utility to upload files—both local and remote—to Notion via the Notion API. Supports internal (local) and external (URL-based) file uploads, with added support for bulk uploading multiple files at once.
Features
- ✅ Upload local files to Notion
- 🌐 Upload files from remote URLs
- 📁 MIME type validation
- ❌ Basic error checking and reporting
- 🔒 Uses Bearer token authentication
- 📦 Optional 5MB file size enforcement (enabled by default)
- 📤 Bulk upload multiple files in a single call
- 📋 Returns Notion file IDs for uploaded files
- 🧩 Completely manages multi part file uploads
Installation
Install the package
pip install notion-upload
The only external dependency is
requests.
Usage
Single File Upload Example
from notion_upload import notion_upload
NOTION_KEY = "your_notion_api_key"
#Internal
uploader = notion_upload(
"internal.jpg",
"internal.jpg",
NOTION_KEY
)
uploaded_file_id = uploader.upload()
print("Uploaded file ID:", uploaded_file_id)
#External
uploader = notion_upload(
"https://example.com/image.png","external.png",
NOTION_KEY
)
uploaded_file_ids = uploader.upload()
print("Uploaded file IDs:", uploaded_file_ids)
Bulk Upload Example
from notion_upload import bulk_upload
NOTION_KEY = "your_notion_api_key"
files_to_upload = {
"files": [
{
"path": "internal.jpg",
"name": "internal.jpg"
},
{
"path": "https://example.com/image.png",
"name": "external.png"
}
]
}
uploader = bulk_upload(files_to_upload, NOTION_KEY)
uploaded_file_ids = uploader.upload()
print("Uploaded file IDs:", uploaded_file_ids)
# If you would prefer a generator over a returned list, use upload_generator()
uploaded_file_ids = uploader.upload_generator()
print("Uploaded file IDs:", uploaded_file_ids)
File Types
Supported file types depend on the Notion API. Common formats like PDFs, images, and documents should work. Python’s built-in mimetypes module is used to infer MIME types.
Validation
- Ensures a Notion API key is provided
- Validates that the file extension matches the inferred MIME type
- Validates that the MIME type is the supported in Notion
- Optionally enforces Notion's 5MB upload limit (can be disabled)
- Prints clear, user-friendly errors on failure
- Throws clear errors on validation issues before attempting to upload
Notes
- Make sure your Notion integration has appropriate permissions for file uploads
- By default, files larger than 5MB will raise an error. To override this, pass
enforce_max_size=False. enforce_max_size=Falsedoes not prevent uploads from being blocked on files bigger than 5GB (Notion's hard ceiling for file size).- Bulk uploads return a list of Notion file IDs corresponding to each uploaded file.
Notion Version
Currenly supports Notion Version 2025-09-03
License
MIT License
Contributing
Contributions are welcome! Feel free to fork the repo, submit pull requests, or open issues.