Gmail Email Archiver
A Python tool to archive all emails from your Gmail inbox using the Gmail API. Emails are moved from the inbox to the archive (All Mail), keeping them accessible while decluttering your inbox.
Features
- Safe archiving: Emails are moved to archive, not deleted
- Batch processing: Process emails in configurable batches for efficiency
- Dry run mode: Preview what would be archived without making changes
- Progress tracking: Real-time feedback during the archiving process
- OAuth authentication: Secure Google OAuth 2.0 authentication
- Status checking: Check inbox count without making changes
Installation
Option 1: Install from PyPI (Recommended)
pip install archive-all-my-mails
Option 2: Install from source
-
Clone this repository:
git clone <repository-url> cd archive-all-my-mails
-
Install dependencies using uv (recommended) or pip:
# Using uv (recommended) uv sync # Or using pip pip install -e .
Gmail API OAuth Setup
Before using the archiver, you need to set up OAuth credentials with Google.
Step 1: Create a Google Cloud Project
- Go to the Google Cloud Console
- Click "Select a project" at the top of the page
- Click "New Project"
- Enter a project name (e.g., "gmail-archiver")
- Click "Create"
Step 2: Enable the Gmail API
- In your project, go to "APIs & Services" > "Library"
- Search for "Gmail API"
- Click on "Gmail API" from the results
- Click "Enable"
Step 3: Create OAuth 2.0 Credentials
- Go to "APIs & Services" > "Credentials"
- Click "Create Credentials" > "OAuth client ID"
- If prompted, configure the OAuth consent screen:
- Choose "External" user type
- Fill in the required application information
- Add your email to test users
- For application type, select "Desktop application"
- Give it a name (e.g., "Gmail Archiver")
- Click "Create"
Step 4: Get Your Credentials
- After creating the OAuth client, you'll see your credentials:
- Client ID (looks like:
xxxxx.apps.googleusercontent.com) - Client Secret (a random string)
- Client ID (looks like:
- Copy these values - you'll need to provide them when running the script
- Keep these credentials secure and do not share them
Usage
Basic Commands
# Check inbox status (dry run to see what would be archived)
archive-gmail --dry-run
# Archive all emails with confirmation prompt
archive-gmail
# Archive all emails without confirmation
archive-gmail --yes
# Provide credentials as command line arguments
archive-gmail --client-id "your-client-id" --client-secret "your-secret"
# Process in smaller batches (default is 100)
archive-gmail --batch-size 50
First Run Authentication
When you first run the script:
- You'll be prompted to enter your Client ID and Client Secret
- A browser window will open automatically
- Sign in to your Google account
- Grant permission to access your Gmail
- The script will save authentication tokens locally (
token.pickle) for future use
Command Line Options
--dry-run: Preview what would be archived without making changes--client-id: Google OAuth Client ID--client-secret: Google OAuth Client Secret--batch-size: Number of emails to process in each batch (default: 100)--yes: Skip confirmation prompt
How It Works
- Authentication: Uses OAuth 2.0 to securely connect to your Gmail account
- Email Discovery: Fetches all emails from your inbox
- Batch Processing: Processes emails in configurable batches for efficiency
- Archiving: Removes the "INBOX" label from emails, moving them to archive
- Reporting: Provides feedback on success/failure counts
Safety Features
- No email deletion: Emails are archived, not deleted
- Dry run mode: Test the process without making changes
- Confirmation prompts: Asks for confirmation before archiving (unless
--yesflag is used) - Batch processing: Handles large inboxes efficiently
- Error handling: Graceful handling of API errors and rate limits
Security Notes
- Your Client ID and Client Secret are sensitive - keep them secure
- The script creates a
token.picklefile to store authentication tokens - Never share your credentials or commit them to version control
- The script only requests the minimum required Gmail permissions
Troubleshooting
Common Issues
"Invalid credentials"
- Double-check your Client ID and Client Secret
- Ensure you're using the correct credentials from Google Cloud Console
"Access denied"
- Make sure you've enabled the Gmail API in Google Cloud Console
- Verify OAuth consent screen is properly configured
- Check that your email is added as a test user
"Browser doesn't open for authentication"
- Try deleting
token.pickleand re-authenticating - Ensure you have a default browser configured
- Check firewall settings that might block the redirect
"Rate limit exceeded"
- The script handles rate limits automatically with exponential backoff
- If issues persist, try reducing the batch size with
--batch-size
Getting Help
If you encounter issues:
- Try running with
--dry-runfirst to test authentication - Check the error messages for specific guidance
- Verify your Google Cloud Console setup matches the instructions above
- Delete
token.pickleand re-authenticate if authentication seems stuck
License
This project is provided as-is for personal use. Please review and comply with Google's API Terms of Service when using this tool.
Metadata
Release files for archive-all-my-mails 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| archive_all_my_mails-0.1.0.tar.gz | 34.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| archive_all_my_mails-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 44.6 kB
Release files / archive_all_my_mails-0.1.0.tar.gz
| Download URL | archive_all_my_mails-0.1.0.tar.gz |
|---|---|
| Size | 34.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
70ead0f8832fb333bb1f5f93659dd0d571eaf8a51057209c4f8ef97e39b83837
|
|
BLAKE2b-256 checksum How to use checksums |
e9c36a0c621919e82688caa52c07d4f8819d8b3b91b1f151dd7b55c2783af45e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
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 Jul 27, 2025.
Transparency logRelease files / archive_all_my_mails-0.1.0-py3-none-any.whl
| Download URL | archive_all_my_mails-0.1.0-py3-none-any.whl |
|---|---|
| Size | 10.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8fae3744f678c368c3d4ca859afa101abffadebbb7d7bcf6424bcfbf7a414291
|
|
BLAKE2b-256 checksum How to use checksums |
a659401c5d44e53ffb4decf3bb8b06f80401f83217f1105e16f9a712a74318fb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
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 Jul 27, 2025.
Transparency log