Shorten Your Url not Your Possibilities 🚀
🔥 Features 📌 Endpoints 🛠️ API Docs 🚀 Getting Started 🤝 Contributing
spoo.me is a free, open-source service for shortening URLs. It offers comprehensive URL statistics, a free API, and extensive customization options. You can create and manage your URLs, generate API keys, create custom slugs, add password protection, and manage link lifespans.
Custom Slugs- Create custom slugs for your URLs 🎯Emoji Slugs- Use emojis as slugs for your URLs 😃Password Protection- Protect your URLs with a password 🔒Link Max Clicks- Set a maximum number of clicks for your URLs 📈URL Statistics- View detailed statistics for your URLs with advanced analytics 📊BOT Tracking- Track bot clicks on your URLs 🤖API- A free and open-sourced API for URL shortening and statistics 🛠️Export Click Data- Export click data as a CSV, JSON, XLSX, or XML file 📤Dashboard- Manage all your URLs and view analytics in one place 📱API Keys- Generate API keys for programmatic access with rate limiting 🔑Open Source- spoo.me is open-sourced and free to use 📖Absolutely Free- No hidden costs, no premium plans, no limitations 💸No Registration Required- Create short URLs without an account 📝Self Hosting- You can host spoo.me on your own server 🏠
The basic structure for accessing a shortened URL is: https://spoo.me/<short_code>
Example - https://spoo.me/ga
For password-protected URLs, use the same basic structure. This redirects to a password entry page.
Example - https://spoo.me/exa
Password - Example@12
Tip
Bypass the password entry page by appending the password to the URL parameters - https://spoo.me/<short_code>?password=<password>
To view the statistics for a URL, use the following structure: https://spoo.me/stats/<short_code>
Example - https://spoo.me/stats/ga
Note
You won't be able to view statistics for a password-protected page unless you provide its password.
Get deep insights into your shortened URLs with our comprehensive analytics platform:
Geographic Intelligence- Interactive world map showing click distribution by country and city 🌍Device Analytics- Detailed breakdowns of devices, browsers, operating systems, and screen sizes 📱Traffic Patterns- Time-series charts showing clicks over time with granular date ranges ⏱️Referrer Tracking- Understand where your traffic comes from with full referrer analysis 🔗Bot Detection- Separate human traffic from bot clicks for accurate metrics 🤖N-Dimensional Filtering- Apply multi-layer filters across browsers, platforms, referrers, short URLs, and more for granular analysis 🔍Custom Time Ranges- Filter analytics by specific date ranges, from hours to months, for precise temporal insights 📅Export Capabilities- Download your data in CSV, JSON, XLSX, or XML formats 📤
Access statistics for any public URL at https://spoo.me/stats/<short_code> or manage all your links through the dashboard.
Spoo.me offers a free, open-source API for URL shortening and statistics. Check it out below:
| spoo.me API |
|---|
To self-host spoo.me on your server, follow the this detailed guide:
| Self-Hosting Guide 🏠 |
|---|
Expand this for a Quick Start
- Docker 🐳
git clone https://github.com/spoo-me/url-shortener.gitmv .env.example .envMONGODB_URI=<your_MONGODB_URI>
REDIS_URI=<your_REDIS_URI>
# OAuth Configuration (Optional - for social login features)
GOOGLE_CLIENT_ID=<your_google_client_id>
GOOGLE_CLIENT_SECRET=<your_google_client_secret>
# JWT Secret Keys (Required for authentication)
JWT_ISSUER=
JWT_AUDIENCE=
ACCESS_TOKEN_TTL_SECONDS=3600
REFRESH_TOKEN_TTL_SECONDS=2592000
COOKIE_SECURE="false" # false: for local dev, true: for production
JWT_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n.....\n-----END PRIVATE KEY-----"
JWT_PUBLIC_KEY="-----BEGIN PUBLIC KEY-----\n.....\n-----END PUBLIC KEY-----"
JWT_SECRET=""[!NOTE]
- The above is a minimal set of environment variables required to run spoo.me using Docker. Please refer to our official self-hosting guide for a complete list of environment variables and their descriptions.
- OAuth credentials are optional. Users can still register with email/password if OAuth is not configured.
- JWT secret keys should be long, random strings. You can generate them using
openssl rand -hex 32.- With this method, you can either use a cloud service like MongoDB Atlas to store the data remotely or you can use a local MongoDB instance.
- If you want to use a local MongoDB instance, your MongoDB URI would be
mongodb://localhost:27017/.
docker-compose up -d- MongoDB 🌿
- MongoDB is only required if you want to store the data locally. You can also use a cloud service like MongoDB Atlas to store the data remotely.
- Python 🐍
- uv 🛠️
git clone https://github.com/spoo-me/url-shortener.gitpip install uvuv venv
uv syncmv .env.example .envSame as in the Docker method above.
[!NOTE]
- OAuth credentials are optional. Users can still register with email/password if OAuth is not configured.
- JWT secret keys should be long, random strings. You can generate them using
openssl rand -hex 32.- If you installed MongoDB locally, your MongoDB URI would be
mongodb://localhost:27017/or if you are using MongoDB Atlas, you can find your MongoDB URI in the Connect tab of your cluster.
uv run main.pyOpen your browser and go to http://localhost:8000 to access the spoo.me URL shortener.
Contributions are always welcome! 🎉 Here's how you can contribute:
- Bugs are logged using the github issue system. To report a bug, simply open a new issue.
- Follow the contribution guidelines to get started.
- Make a pull request for any feature or bug fix.
Important
For any type of support or queries, feel free to reach out to us at ✉️ support@spoo.me
