← Ship This Weekend

Python Project Ideas

30 projects from beginner CLI tools to advanced APIs — each with the right libraries and what you'll learn.

Most Python project idea lists give you "build a calculator" or "build a todo app." You've seen those. These 30 ideas are organized by actual difficulty, each one matched to the skills you need before you start and the libraries that make it possible.

Beginners get standard-library-only projects you can finish in an afternoon. Intermediate projects introduce real packages and external APIs. Advanced projects cover production patterns — FastAPI, async, automation at scale. Every project teaches something specific, not just "more Python."

Each entry includes the key libraries, a realistic time estimate, and what you'll actually learn — because the goal isn't to copy a project, it's to know why you're building it.

Beginner Projects

Beginner

These use only Python's standard library (no pip required) or a single simple package. They're sized to finish in one afternoon and teach the fundamentals: file I/O, user input, conditionals, data structures, and how to structure a real program.

1. Password Generator
A CLI tool that generates passwords with configurable length, symbols, and numbers. Add a check-strength mode that rates passwords. This teaches the secrets module (not random!), string manipulation, and CLI argument parsing.
secrets argparse Time2–3 hrs Learnsstdlib, CLI args
2. File Organizer Script
A script that sorts your Downloads folder into subfolders by file type (.pdf → /Documents, .jpg → /Images, etc). Add a --dry-run flag so users can preview changes before moving anything. The dry-run flag is a real pattern you'll use in production scripts forever.
os shutil pathlib Time2–3 hrs Learnsfile I/O, pathlib
3. Quiz App from JSON
A CLI quiz game that reads questions from a JSON file, tracks the score, and shows a summary at the end. Write your own question file about something you know. This teaches JSON parsing, flow control, and why separating data from logic matters.
json random Time2–4 hrs LearnsJSON, game state
4. Pomodoro Timer
A terminal Pomodoro timer with work/break cycles, session counting, and an optional desktop notification when time's up (using plyer). More interesting than it sounds — you'll learn how to display a live countdown in the terminal and manage state across multiple cycles.
time plyer Time2–4 hrs Learnstime module, terminal output
5. Markdown to HTML Converter
A script that converts a .md file to styled HTML. Don't use an existing Markdown library — parse the basic syntax yourself (headings, bold, links, code blocks) using regex. This teaches regex patterns, file processing, and string replacement in ways that actually stick.
re sys Time3–5 hrs Learnsregex, text parsing
6. Weather CLI Tool
A command-line tool that shows the current weather and 3-day forecast for any city using the Open-Meteo API (free, no API key needed). This is your first real API project — you'll learn how to make HTTP requests, parse JSON responses, and format output for humans.
requests argparse Time3–4 hrs LearnsHTTP requests, JSON parsing
7. Currency Converter
A CLI tool using a free exchange rate API (frankfurter.app has one — no key required). Convert between currencies, show historical rates for the past 7 days, and cache the response to a local JSON file so you don't hit the API on every call. Caching is a real skill.
requests json Time3–5 hrs LearnsAPIs, local caching
8. Duplicate File Finder
A script that finds duplicate files in a directory by computing MD5/SHA256 hashes. Group duplicates and show total wasted space. Add a --delete flag that removes all but one copy. This teaches hashing, dictionary grouping, and recursive directory traversal.
hashlib os.walk Time2–4 hrs Learnshashing, dict patterns
9. Personal Journal CLI
A command-line journal that saves entries to dated text files in a folder. Commands: write to add an entry, read to see today's, search to find entries containing a word. Teaches file organization patterns, date handling, and basic text search.
datetime pathlib Time3–4 hrs Learnsdatetime, file organization
10. Web Page Monitor
A script that checks a webpage for changes (runs on a schedule via cron or Windows Task Scheduler) and prints a diff when something changes. Practical immediately — monitor a job board, a product's pricing page, or a sports schedule. Teaches scraping, diffing, and automation basics.
requests BeautifulSoup4 difflib Time3–5 hrs Learnsscraping, diffing

Intermediate Projects

Intermediate

These require comfort with pip, virtual environments, and at least one framework. Plan for a weekend each. They teach database patterns, web frameworks, scheduled jobs, bots, and working with external services.

11. URL Shortener with Flask + SQLite
A self-hosted URL shortener: paste a long URL, get a short code, use the short URL to redirect. Store mappings in SQLite. Add a stats page showing click counts per link. Your first full web app with a database behind it — a complete request/response/persist cycle.
Flask sqlite3 Time1 weekend LearnsFlask routes, SQLite, redirects
12. Discord Bot
Build a Discord bot for a server you're in — trivia game, daily quotes, !remind commands, or a server stats tracker. Discord bots are immediately usable and easy to iterate on. The event-driven model (on_message, on_member_join) teaches async programming naturally.
discord.py asyncio Time1 weekend Learnsasync, event-driven architecture
13. Habit Tracker with SQLite + ASCII Charts
A CLI habit tracker that stores data in SQLite and renders ASCII bar charts of your streaks in the terminal. No web UI, no JavaScript — just a clean command-line tool you'll actually use. Teaches SQLite CRUD, date arithmetic, and terminal visualization.
sqlite3 rich Time1 weekend LearnsSQL CRUD, date logic, CLI UX
14. Budget Tracker with Pandas
Import CSV exports from your bank, categorize transactions automatically by keyword matching, and generate monthly spending summaries and charts. Uses pandas for the data manipulation and matplotlib for charts. Real-world data is always messier than you expect — that's the lesson.
pandas matplotlib Time1 weekend Learnspandas, CSV cleaning, groupby
15. Scheduled Web Scraper with Email Digest
Scrape a source you care about (HN front page, a job board, a subreddit via JSON API) on a schedule and email yourself a digest when there's something new. Uses schedule for the cron-like loop and smtplib for email. Your first "always-on" Python script.
requests schedule smtplib Time1 weekend Learnsscheduling, email, scraping patterns
16. Static Site Generator
A script that converts a folder of Markdown files (with YAML frontmatter) into a complete HTML website using Jinja2 templates. This is how tools like Jekyll and Hugo work internally. Building a simplified version teaches you templating, frontmatter parsing, and recursive directory processing.
Jinja2 markdown PyYAML Time1–2 weekends Learnstemplating, parsing, file pipelines
17. GitHub Repo Analyzer
A CLI tool that takes a GitHub username and shows stats: most starred repos, top languages, commit frequency, and open issues. Generates a Markdown report you can paste into a README. Teaches pagination (the GitHub API returns max 100 items per page), rate limiting, and data aggregation.
PyGithub pandas Time1 weekend LearnsGitHub API, pagination, aggregation
18. Telegram Reminder Bot
A Telegram bot where you text it "remind me to call mom tomorrow at 3pm" and it parses the natural language date and sends you a reminder. Use python-telegram-bot for the bot framework and APScheduler for the jobs. Teaches NLP parsing, persistent scheduled jobs, and state management.
python-telegram-bot APScheduler dateparser Time1–2 weekends Learnsbots, NLP, job scheduling
19. Reddit CLI Reader
A terminal Reddit reader using PRAW: browse your saved subreddits, upvote posts, open links in a browser, and save posts to a local reading list. The rich library handles the terminal UI. Teaches API wrappers, terminal navigation, and OAuth flow.
PRAW rich Time1 weekend LearnsAPI wrappers, OAuth, TUI patterns
20. Flask Portfolio Website
A personal portfolio site using Flask with a contact form (stores submissions in SQLite), project pages driven by a YAML data file, and a simple admin view protected by a password. More valuable than a static site because you control the data layer — and the admin view teaches you why session management matters.
Flask SQLite3 PyYAML Time1–2 weekends LearnsFlask sessions, forms, data-driven pages

Advanced Projects

Advanced

These require comfort with async Python, database patterns, and deploying services. Each one is portfolio-worthy and teaches patterns used in production systems. Plan 2–4 weekends and expect debugging.

21. FastAPI REST Service with JWT Auth
A REST API with user registration, login, JWT authentication, and a protected resource (like a personal notes API). Deploy to Fly.io or Railway. This covers the full production web service pattern: authentication, authorization, database migrations with Alembic, environment variables, and deployment.
FastAPI SQLAlchemy python-jose Time2–3 weekends LearnsREST design, JWT, SQLAlchemy, deployment
22. Podcast Transcriber with Whisper
A CLI tool that takes a podcast RSS feed URL, downloads episodes, transcribes them with OpenAI Whisper (free, runs locally), and outputs searchable text files. Add a search command that full-text searches across all transcripts. Real-world use case + heavy ML library interaction.
openai-whisper feedparser pydub Time2 weekends LearnsML inference, audio processing, search
23. Log Analyzer with Anomaly Detection
A tool that ingests server or application logs, parses them into structured data, computes baselines (requests per minute, error rates), and flags anomalies. Export results as a CSV report and HTML dashboard. Teaches log parsing patterns, statistical baselines, and the difference between a spike and noise.
pandas re matplotlib Time2 weekends Learnslog parsing, statistics, pandas pipelines
24. GitHub Code Review Bot
A GitHub App that runs as a GitHub Action: on every PR, it checks for common issues (TODO comments, hardcoded secrets, long functions), posts inline review comments, and optionally blocks the merge. Uses PyGithub to interact with the API. Teaches GitHub Apps, webhooks, and code analysis patterns.
PyGithub ast Time2–3 weekends LearnsGitHub API, AST parsing, CI/CD hooks
25. News Aggregator with NLP Categorization
An RSS aggregator that fetches from 20+ feeds, uses NLTK or spaCy to extract keywords and categorize articles, removes near-duplicates (TF-IDF similarity), and generates a daily digest. Teaches the full NLP pipeline: fetch → tokenize → vectorize → cluster → deduplicate → output.
feedparser spaCy scikit-learn Time2–3 weekends LearnsNLP pipeline, TF-IDF, deduplication
26. Receipt OCR Expense Tracker
A tool that takes photos of receipts, uses pytesseract (Tesseract OCR) to extract text, parses amounts and merchant names, and adds them to an SQLite expense database. Add a monthly summary report. OCR is unreliable — you'll learn to write defensive parsers that handle messy real-world data.
pytesseract Pillow sqlite3 Time2 weekends LearnsOCR, image processing, defensive parsing
27. Git Branch Cleaner
A CLI tool that analyzes your git repos, finds branches that are: merged, more than N days old, behind main by more than N commits, or deleted on origin. Shows a summary and asks for confirmation before deleting. Uses gitpython for the git operations. Teaches git internals and interactive CLI design.
gitpython rich click Time1–2 weekends Learnsgit internals, click CLI, interactive prompts
28. Documentation Generator from Docstrings
A tool that walks a Python package, parses docstrings using Python's AST module (not exec), extracts function signatures and type hints, and generates a Markdown documentation site. Teaches AST traversal, type introspection, and why good docstrings matter more once you read 200 of them programmatically.
ast inspect Jinja2 Time2 weekends LearnsAST, metaprogramming, code analysis
29. API Rate Limiter Middleware
A reusable ASGI middleware for FastAPI that rate-limits endpoints by IP, API key, or user, using Redis as the backend (sliding window algorithm). Include tests and publish it to PyPI. This is genuinely publishable work — rate limiting middleware is something people search for and use.
FastAPI redis-py pytest Time2–3 weekends Learnsmiddleware, Redis, algorithms, PyPI publishing
30. Async Multi-Source Data Pipeline
A pipeline that concurrently fetches data from 5+ APIs (financial data, weather, news, etc.), normalizes the schemas, stores to PostgreSQL, and exposes a read API via FastAPI. Uses asyncio + aiohttp for concurrent fetching. Teaches async Python, data normalization across schemas, and the difference between concurrent and parallel.
aiohttp asyncpg FastAPI Time3–4 weekends Learnsasync/await, concurrency, data pipelines

Want a random idea generator for any language or stack? The main tool is right here.

How to pick the right Python project for your level

Python projects FAQ

What Python projects should a beginner build first?

Start with standard-library-only CLI tools: a password generator using secrets, a file organizer using os and shutil, or a quiz app from a JSON file. These finish in one afternoon, require no package management, and teach the fundamentals that every later project builds on. Don't start with Flask or Django as your first project — learn to walk before web frameworks.

What Python libraries should beginners learn for projects?

In order: (1) requests — every project that talks to the internet uses this; (2) BeautifulSoup4 — scraping web pages; (3) Flask — building a minimal web app; (4) sqlite3 (built-in) — storing data without a full database setup; (5) pandas — for anything with CSV or tabular data. These five cover the vast majority of interesting beginner-to-intermediate projects.

What are good Python portfolio projects for getting a job?

Two or three finished, deployed projects beat ten unfinished ones. For employment: a REST API with FastAPI or Flask (shows HTTP knowledge), a data project with pandas and charts (shows data handling), and an automation script with tests (shows practical scripting). Clean code, a clear README, and a live URL matter more than complexity.

How do I choose a Python project idea as a beginner?

Find a small annoyance and automate it. Rename files manually? Build the organizer. Check a website repeatedly? Build the monitor. The best first Python projects are ones where you're the user — you know instantly whether it works. Avoid grand ideas like "a social network" or "an ML recommendation engine" as first projects. The scope will kill your motivation before you finish.

What Python projects are good for learning data science?

Build projects that work the full pipeline: collect → clean → analyze → visualize. A budget tracker with CSVs and matplotlib, a web scraper that tracks prices over time, or a GitHub stats analyzer that uses pandas are all good. They teach the real data science workflow, not just syntax. scikit-learn projects come after you're comfortable with pandas.

How long does it take to build a Python project for beginners?

Standard-library CLI projects: 2–4 hours. Projects with a single external API: 3–5 hours. A Flask web app with a database: one full weekend for a beginner. These estimates assume you're not following a tutorial step-by-step — if you're Googling your way through, add 50%. That's fine. That's the process.