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
