A Python microservice that automatically forwards new articles from Miniflux RSS feeds to your Instapaper account using webhooks.
- Webhook Listener: Receives webhooks from Miniflux when new articles are discovered
- Automatic Forwarding: Sends articles to Instapaper using the Simple API
- Signature Verification: Validates webhook authenticity using HMAC-SHA256
- Docker Support: Ready-to-deploy Docker container
- Comprehensive Logging: Detailed logging for monitoring and debugging
- Health Checks: Built-in health check endpoint for monitoring
- Error Handling: Graceful handling of API errors and network issues
- Instapaper Account: You need an Instapaper account
- Miniflux Instance: You need a running Miniflux instance with admin access
- Server/Hosting: A server or hosting platform to run the webhook service
services:
miniflux-to-instapaper:
image: ghcr.io/dylanfrankcom/miniflux-to-instapaper:latest
ports:
- "5002:5002"
environment:
- MINIFLUX_WEBHOOK_SECRET=${MINIFLUX_WEBHOOK_SECRET}
- INSTAPAPER_USERNAME=${INSTAPAPER_USERNAME}
- INSTAPAPER_PASSWORD=${INSTAPAPER_PASSWORD}
- WEBHOOK_HOST=0.0.0.0
- WEBHOOK_PORT=5002
env_file:
- .env
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:5002/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
Edit the .env
file with your credentials:
# Get this from Miniflux Settings > Integrations > Webhook
MINIFLUX_WEBHOOK_SECRET=your_webhook_secret_from_miniflux_settings
# Your Instapaper credentials
INSTAPAPER_USERNAME=your_instapaper_username_or_email
INSTAPAPER_PASSWORD=your_instapaper_password_if_you_have_one
# Server configuration (optional)
WEBHOOK_HOST=0.0.0.0
WEBHOOK_PORT=5002
Variable | Required | Description |
---|---|---|
MINIFLUX_WEBHOOK_SECRET |
Required | Webhook secret from Miniflux for signature verification |
INSTAPAPER_USERNAME |
Required | Your Instapaper username or email address |
INSTAPAPER_PASSWORD |
Optional | Your Instapaper password (if set) |
WEBHOOK_HOST |
Optional | Host to bind the webhook server (default: 0.0.0.0) |
WEBHOOK_PORT |
Optional | Port for the webhook server (default: 5002) |
- Go to Miniflux Settings → Integrations → Webhook
- Set the webhook URL to:
http://your-server:5002/webhook
- Copy the auto-generated secret to your
.env
file asMINIFLUX_WEBHOOK_SECRET
- Save the webhook configuration
docker-compose up -d
The service handles two types of Miniflux webhook events:
- Triggered when Miniflux discovers new articles in RSS feeds
- Automatically adds all new articles to Instapaper
- Includes article title, URL, and description (from content)
- Triggered when you manually save an article in Miniflux
- Adds the saved article to Instapaper
- Useful for articles you want to read later
Note
To avoid duplicate articles, disable Miniflux's built-in Instapaper integration in Settings → Integrations → Instapaper.
-
403 Forbidden from Instapaper
- Check your Instapaper username and password
- Verify credentials by logging into Instapaper directly
-
Invalid Webhook Signature
- Ensure
MINIFLUX_WEBHOOK_SECRET
matches the secret in Miniflux settings - Check that the webhook URL in Miniflux is correct
- Ensure
-
Connection Errors
- Verify network connectivity to instapaper.com
- Check firewall settings
-
Articles Not Appearing in Instapaper
- Check logs for error messages
- Verify the webhook is being triggered in Miniflux
- Test the health endpoint to ensure the service is running
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
For issues and questions:
- Check the logs for error messages
- Review the troubleshooting section
- Open an issue on GitHub with relevant log output