Spaces:
Running
Running
| title: Notion DB Export Tool | |
| sdk: gradio | |
| emoji: π» | |
| colorFrom: yellow | |
| colorTo: green | |
| sdk_version: 5.49.1 | |
| # Notion Excel Exporter - Hugging Face Spaces | |
| A secure web application for exporting Notion databases to Excel format with three specialized export modes. | |
| ## Features | |
| - **3 Export Modes with Separate Tabs**: | |
| - **Notion Databases**: Export raw Notion database tables with all properties | |
| - **Entry Milestones**: Export entry milestone tracking data with CBP/CPSC status | |
| - **MAWB Milestones**: Export aggregated SHEIN T01 MAWB milestone data | |
| - **Date Filtering**: Filter records by `created_time` (when records were created in Notion) | |
| - **MAWB Number Input**: Specify specific MAWBs to export (comma or newline separated) | |
| - **Rate Limiting Protection**: Slow mode and configurable page sizes to prevent API throttling | |
| - **Secure Authentication**: Username/password login required | |
| - **Multi-Sheet Excel**: Exports multiple databases into a single Excel file with separate sheets | |
| - **Real-time Progress**: Shows export status and processing information | |
| - **Export-Only**: Does not modify any Notion records (no task auto-checking) | |
| ## Supported Databases | |
| - **MAWB** (Master Air Waybill) | |
| - **Entry Records** | |
| - **MAWB Tasks** | |
| - **MAWB Milestones** (Warehouse milestone records) | |
| - **Dwell Report** | |
| ## Deployment to Hugging Face Spaces | |
| ### Step 1: Create a New Space | |
| 1. Go to [Hugging Face Spaces](https://huggingface.co/spaces) | |
| 2. Click "Create new Space" | |
| 3. Configure: | |
| - **Space name**: `notion-excel-exporter` (or your preferred name) | |
| - **SDK**: Select `Gradio` | |
| - **Hardware**: `CPU Basic` (free tier is sufficient) | |
| - **Visibility**: `Private` (recommended for security) | |
| ### Step 2: Upload Files | |
| Upload the following files to your Space: | |
| ``` | |
| app.py | |
| notion_exporter.py | |
| entry_milestone_exporter.py | |
| mawb_milestone_exporter.py | |
| requirements.txt | |
| README.md | |
| src/ | |
| βββ notion_integration.py | |
| ``` | |
| You can either: | |
| - Use the web interface to drag and drop files | |
| - Clone the Space repository and push via git: | |
| ```bash | |
| git clone https://huggingface.co/spaces/YOUR_USERNAME/YOUR_SPACE_NAME | |
| cd YOUR_SPACE_NAME | |
| # Copy all files from huggingface-notion-export/ folder | |
| git add . | |
| git commit -m "Initial deployment" | |
| git push | |
| ``` | |
| ### Step 3: Configure Environment Secrets | |
| Go to your Space Settings > Variables and secrets > Add a secret. | |
| Add the following secrets (click "New secret" for each): | |
| **Required Notion Configuration:** | |
| - `NOTION_API_KEY` - Your Notion integration API key | |
| - `MAWB_DB_ID` - MAWB database ID (format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) | |
| - `ENTRY_RECORD_DB_ID` - Entry Record database ID | |
| - `MAWB_TASK_DB_ID` - MAWB Task database ID | |
| - `MAWB_MILESTONE_DB_ID` - MAWB Milestone database ID | |
| - `DWELL_REPORT_DB_ID` - Dwell Report database ID (optional) | |
| **Authentication Credentials:** | |
| - `HF_USERNAME` - Login username for the app | |
| - `HF_PASSWORD` - Login password for the app | |
| **Important Notes:** | |
| - Database IDs should include dashes (format: `247f8938-365a-80d4-bdd1-d9de191b7c05`) | |
| - All secrets are stored securely and never exposed in logs | |
| - You can skip optional database IDs if not needed | |
| ### Step 4: Verify Deployment | |
| 1. Wait for the Space to build (usually 2-5 minutes) | |
| 2. Once running, click the app URL | |
| 3. Enter your credentials (HF_USERNAME and HF_PASSWORD) | |
| 4. Test export with a single database first | |
| ## Getting Notion API Credentials | |
| ### Notion API Key | |
| 1. Go to [Notion Developers](https://www.notion.so/my-integrations) | |
| 2. Click "New integration" | |
| 3. Name it (e.g., "Excel Exporter") | |
| 4. Select the workspace | |
| 5. Copy the "Internal Integration Token" (starts with `secret_`) | |
| ### Database IDs | |
| 1. Open your Notion database in browser | |
| 2. Copy the URL, which looks like: | |
| ``` | |
| https://www.notion.so/workspace/xxxxxxxxxx?v=yyyyyyyy | |
| ``` | |
| 3. The database ID is the part after the last slash and before the `?` | |
| 4. Format: `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` (with dashes) | |
| ### Grant Access to Databases | |
| For each database: | |
| 1. Open the database in Notion | |
| 2. Click the `...` menu in the top right | |
| 3. Select "Add connections" | |
| 4. Find and select your integration | |
| 5. Click "Confirm" | |
| ## Usage Instructions | |
| ### Tab 1: Notion Databases | |
| Export raw Notion database tables with all properties automatically captured. | |
| 1. **Select Databases**: Check one or more databases (MAWB, Entry Records, Tasks, Milestones, Dwell Report) | |
| 2. **Set Date Filter** (Optional): | |
| - Filters by `created_time` (when the record was created in Notion) | |
| - Enter start date in `YYYY-MM-DD` format (e.g., `2024-01-01`) | |
| - Enter end date in `YYYY-MM-DD` format (e.g., `2024-12-31`) | |
| 3. **Configure Options**: | |
| - Enable "Slow Mode" for large exports or if you encounter rate limits | |
| - Adjust "Page Size" (lower = safer, higher = faster) | |
| 4. **Click Export**: Wait for processing to complete | |
| 5. **Download**: Click the file link to download your Excel file | |
| ### Tab 2: Entry Milestones | |
| Export entry milestone tracking data with CBP and CPSC status information. | |
| 1. **MAWB Numbers** (Optional): | |
| - Leave empty to export all entry records | |
| - Or enter specific MAWBs (one per line or comma-separated) | |
| - Example: `369-95208794, 370-12345678` | |
| 2. **Set Date Filter** (Optional): | |
| - Filters by entry record `created_time` | |
| - Enter start/end dates in `YYYY-MM-DD` format | |
| 3. **Click Export**: Wait for processing to complete | |
| 4. **Download**: Excel file includes Entry, MAWB, POD, CBP Line, CPSC Line, release dates, etc. | |
| ### Tab 3: MAWB Milestones (SHEIN T01) | |
| Export aggregated milestone data for SHEIN T01 MAWBs (one row per MAWB). | |
| 1. **MAWB Numbers** (Optional): | |
| - Leave empty to export all SHEIN T01 MAWBs | |
| - Or enter specific MAWBs (one per line or comma-separated) | |
| 2. **Set Date Filter** (Optional): | |
| - Filters by MAWB record `created_time` | |
| - Enter start/end dates in `YYYY-MM-DD` format | |
| 3. **Click Export**: Wait for processing to complete | |
| 4. **Download**: Excel file includes aggregated data across all related entries and warehouse milestone records per MAWB | |
| ## Export Output | |
| ### Tab 1: Notion Databases Export | |
| - **Single Database**: `notion_{database_name}_{timestamp}.xlsx` | |
| - Single sheet with database name | |
| - **Multiple Databases**: `notion_export_{timestamp}.xlsx` | |
| - Multiple sheets: "MAWB Data", "Entry Records", "MAWB Tasks", "MAWB Milestones", "Dwell Report" | |
| ### Tab 2: Entry Milestones Export | |
| - **All Entries**: `entry_milestone_export_all_{timestamp}.xlsx` | |
| - **Specific MAWBs**: `entry_milestone_export_specific_{timestamp}.xlsx` | |
| - **Sheet**: "Entry Milestone Export" | |
| - **Columns**: MAWB, Entry, POD, handover_doc, CBP Line, CBP_release, CPSC Line, CPSC_check, CPSC_release, released, etc. | |
| ### Tab 3: MAWB Milestones Export | |
| - **All SHEIN T01**: `mawb_milestone_export_all_{timestamp}.xlsx` | |
| - **Specific MAWBs**: `mawb_milestone_export_specific_{timestamp}.xlsx` | |
| - **Sheet**: "SHEIN_T01_MAWB_Milestones" | |
| - **Columns**: MAWB, T01 Entry Submission, PDA scan, T01 CBP Exam, T01 CBP Release, T01 CPSC/PGA Review, T01 CPSC/PGA release, Customs Release, Cargo ready for pickup, Ship out completed, XC shipment list PCS, MAWB POD | |
| ## Troubleshooting | |
| ### Rate Limiting Errors | |
| **Symptom**: Export fails with "429 Too Many Requests" or rate limit errors | |
| **Solutions**: | |
| 1. Enable "Slow Mode" checkbox | |
| 2. Reduce page size to 25-35 | |
| 3. Export fewer databases at once | |
| 4. Wait a few minutes before retrying | |
| ### Authentication Failed | |
| **Symptom**: Cannot login to the app | |
| **Solutions**: | |
| 1. Verify `HF_USERNAME` and `HF_PASSWORD` are set correctly in Space secrets | |
| 2. Check for typos in credentials | |
| 3. Restart the Space (Settings > Factory reboot) | |
| ### Missing Database | |
| **Symptom**: Error message about missing database ID | |
| **Solutions**: | |
| 1. Verify the database ID is set in Space secrets | |
| 2. Check the database ID format (must include dashes) | |
| 3. Ensure the integration has access to the database in Notion | |
| ### Empty Export | |
| **Symptom**: Excel file is generated but has no data | |
| **Solutions**: | |
| 1. Check date filters (may be filtering out all records) | |
| 2. Verify the database actually has records in Notion | |
| 3. Ensure the integration has proper permissions | |
| ## API Rate Limits | |
| Notion API has rate limits: | |
| - **3 requests per second** per integration | |
| - **Burst protection**: Can queue up to 10 requests | |
| The exporter handles rate limits with: | |
| - Automatic delays between requests (0.5-1.5s normal, 2-4s slow mode) | |
| - Exponential backoff on 429 errors (60s, 120s, 240s, 480s) | |
| - Configurable page sizes to reduce total API calls | |
| ## Security Best Practices | |
| 1. **Keep Space Private**: Set visibility to "Private" in Space settings | |
| 2. **Strong Password**: Use a complex password for HF_PASSWORD | |
| 3. **Rotate Credentials**: Periodically update Notion API key and app password | |
| 4. **Monitor Access**: Check Space logs for suspicious activity | |
| 5. **Least Privilege**: Only grant integration access to required databases | |
| ## Project Structure | |
| ``` | |
| huggingface-notion-export/ | |
| βββ app.py # Gradio web interface with 3 tabs | |
| βββ notion_exporter.py # Notion database export logic | |
| βββ entry_milestone_exporter.py # Entry milestone export logic | |
| βββ mawb_milestone_exporter.py # MAWB milestone export logic (SHEIN T01) | |
| βββ src/ | |
| β βββ notion_integration.py # Notion API integration | |
| βββ requirements.txt # Python dependencies | |
| βββ README.md # This file | |
| βββ .gitignore # Git ignore rules | |
| ``` | |
| ## Local Development | |
| To test locally before deploying: | |
| ```bash | |
| # Clone the repository | |
| git clone <repo-url> | |
| cd huggingface-notion-export | |
| # Install dependencies | |
| pip install -r requirements.txt | |
| # Set environment variables (create .env file) | |
| export NOTION_API_KEY=your_key | |
| export MAWB_DB_ID=your_db_id | |
| export ENTRY_RECORD_DB_ID=your_db_id | |
| export MAWB_TASK_DB_ID=your_db_id | |
| export MAWB_MILESTONE_DB_ID=your_db_id | |
| export HF_USERNAME=admin | |
| export HF_PASSWORD=password | |
| # Run the app | |
| python app.py | |
| ``` | |
| Visit `http://127.0.0.1:7860` in your browser. | |
| ## Support | |
| For issues or questions: | |
| - Check the troubleshooting section above | |
| - Review Hugging Face Spaces documentation | |
| - Verify Notion API integration settings | |
| ## License | |
| This project is for internal use only. | |
| ## Version | |
| - **Version**: 2.0.0 | |
| - **Last Updated**: 2025-10-22 | |
| - **Notion API Version**: 2025-09-03 | |
| - **New in v2.0**: Added Entry Milestone and MAWB Milestone export modes with MAWB input filtering |