Skip to main content

License Last Commit Issues Python GitHub forks GitHub Repo stars PyPI version PyPI Downloads

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=False does 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.

Metadata

Release files for notion-upload 2.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for notion-upload 2.0.2
File Size Uploaded
notion_upload-2.0.2.tar.gz 7.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for notion-upload 2.0.2
File Interpreter ABI Platform
notion_upload-2.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 16.0 kB

Release files / notion_upload-2.0.2.tar.gz

Download URL notion_upload-2.0.2.tar.gz
Size 7.9 kB
Tags Source
SHA-256 checksum
How to use checksums
c7f2e453e58176905962d0878a240f5f06f66ae8566f0342d10698e2cb755cf0
BLAKE2b-256 checksum
How to use checksums
c75048b0b2247030e78084986cb81f50ad78d637b135eed8ab580cbf1afc520c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 14, 2026.

Transparency log

Release files / notion_upload-2.0.2-py3-none-any.whl

Download URL notion_upload-2.0.2-py3-none-any.whl
Size 8.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
65c36bccea01b59cb01cb1f11baea82b8bd6b973a143b9978cfac232f6f79676
BLAKE2b-256 checksum
How to use checksums
f7ba5efa40ac45617620492dc74b716519faae6b31c92a1bb8f23c2c1ea385fa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 14, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2.0.2 This release

2 release files

2.0.0

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page