Automatically translate your YouTube video titles and descriptions into multiple languages to reach a global audience.
Transform your channel into a multilingual powerhouse in minutes, not hours. This tool automates the tedious process of manually translating video metadata, helping you expand your reach and improve your YouTube SEO without creating new content.
The Problem: You have great content, but it's only discoverable by people who speak your language. Manually translating dozens of video titles and descriptions would take weeks.
The Solution: This app translates your entire video library in minutes, making your content discoverable worldwide. Videos with multilingual metadata appear in international search results, leading to:
- β Increased Views: Reach viewers who search in other languages
- β Better SEO: Localized titles improve search rankings globally
- β Broader Audience: Connect with international viewers
- β Time Savings: Hours of manual work become minutes of automation
- β Professional Appeal: Localized content feels more welcoming to global audiences
- Dual API Support: Uses Google Translate for broad language coverage + optional DeepL for premium quality
- Automatic Fallback: If DeepL quota is exceeded, seamlessly switches to Google Translate
- 50+ Languages: Support for all major world languages
- Bulk Operations: Select multiple videos and languages for mass translation
- Smart Pagination: Handle channels with hundreds of videos efficiently
- Flexible Selection: Choose per-page (10/25/50) or process entire channel at once
- Native API: Direct integration with YouTube Data API v3
- Safe Updates: Only modifies localization fields, never touches original content
- Verification System: Automatically verifies translations were applied successfully
- Length Management: Auto-trim or skip content that exceeds YouTube's limits
- Existing Translation Handling: Skip or overwrite existing translations
- Real-time Progress: Visual feedback during translation process
- Error Recovery: Comprehensive error handling and user feedback
- Python 3.7+
- A YouTube channel
- Google Cloud account (for APIs)
- (Optional) DeepL account for premium translations
# Clone the repository
git clone https://github.com/yourusername/youtube-metadata-translator.git
cd youtube-metadata-translator
# Install dependencies
pip install -r requirements.txt
# Create config directory for credentials
mkdir config- Go to Google Cloud Console
- Create a new project or select existing one
- Enable YouTube Data API v3
- Create OAuth 2.0 Client ID credentials (Desktop Application)
- Download the JSON file and rename it to
account_client_secrets_main.json - Place the file in the
config/folder you created
- In the same Google Cloud project, enable Cloud Translation API
- Create a Service Account with Translation API permissions
- Generate and download a JSON key file
- Rename to
translate_key.jsonand place in theconfig/folder
- Sign up at DeepL API
- Get your authentication key from the account dashboard
- Set environment variable:
export DEEPL_API_KEY="your-key-here"
python app.pyVisit http://127.0.0.1:5000 in your browser.
On first run, you'll be redirected to Google OAuth to authorize YouTube access. Grant permissions and you're ready to go!
- Select Videos: Choose which videos to translate using checkboxes
- Choose Languages: Click "Add Language" and select target languages
- Configure Options: Set preferences for DeepL usage, overwrites, and length handling
- Translate: Hit the translate button and wait for completion
- Verify: Check your videos on YouTube Studio to see the new translations
- Start small with 5-10 videos to test the setup
- Focus on your most popular videos first for maximum impact
- Use "ALL" page size only for smaller channels (< 100 videos)
- Enable DeepL for European languages for better quality
- Check YouTube Studio's "Translations" section to verify results
youtube-metadata-translator/
βββ app.py # Main Flask application
βββ youtube_account.py # YouTube API integration
βββ google_translate.py # Translation API wrapper
βββ requirements.txt # Python dependencies
βββ templates/
β βββ home.html # Main interface
β βββ quota-error.html # Error pages
βββ static/
β βββ css/
β βββ home.css # Styling
βββ config/ # Create this folder for your credentials
β βββ account_client_secrets_main.json # YouTube OAuth credentials
β βββ translate_key.json # Google Translate service account
βββ README.md
- YouTube API: Free tier allows ~200 video updates/day
- Google Translate: Pay-per-character after free tier
- DeepL: 500K characters/month on free tier
- Never commit credential files to version control
- Create a
config/folder and place all credential files there - The included
.gitignoreprotects your API keys in theconfig/directory - OAuth tokens are stored locally and never shared
After setup, your config/ folder should contain:
- β
account_client_secrets_main.json(YouTube OAuth) - β
translate_key.json(Google Translate credentials) - β
token.pickle(auto-generated after first OAuth)
- Translations are machine-generated (may need manual review)
- YouTube has character limits (100 for titles, 5000 for descriptions)
- Large channels may take time to process completely
Videos not appearing?
- Check YouTube API credentials in
config/account_client_secrets_main.json - Verify OAuth authorization was completed
- Ensure YouTube Data API v3 is enabled in Google Cloud Console
Translations not saving?
- Confirm videos have a default language set in YouTube Studio
- Check for character limit violations in console output
- Verify
config/translate_key.jsonhas correct permissions
Quota exceeded errors?
- Wait 24 hours for quota reset or request quota increase
- Reduce batch size to stay under limits
- Check Google Cloud Console for quota usage
Translation quality issues?
- Try enabling DeepL for supported languages
- Consider manual review for important videos
- Check console output for any API errors
Missing config files?
- Ensure
config/folder exists in project directory - Double-check file names match exactly:
account_client_secrets_main.jsontranslate_key.json
- Verify JSON files are valid (not corrupted downloads)
Found a bug or have a feature idea? We welcome contributions!
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.
"Translated 150 videos into 5 languages in 30 minutes. My international views increased 40% in the first month!" - Content Creator
"This tool saved me weeks of manual work. The batch processing is a game-changer for large channels." - Educational YouTuber
Ready to go global? β Star this repo if it helped you reach new audiences!