Scout is an automated bid/bid discovery and notification system that leverages AI to find relevant business opportunities across multiple procurement platforms.
Scout wakes up once every day and performs its magic in under a minute:
- 🕷️ Scrapes hundreds of bids from configured websites
- 🧠 Analyzes each bid using AI
- ✅ Filters opportunities matching your company's interests
- 📱 Delivers qualified bids directly to your Telegram
- Automated Scraping: Currently supports SomaliJobs and ReliefWeb platforms
- Intelligent Filtering: Uses GPT-4 and Claude to analyze bid relevance
- Real-time Notifications: Instant Telegram updates with structured bid information
- Duplicate Prevention: Smart detection to avoid repeated notifications
- State Management: Robust tracking of bid processing status
- Database Persistence: SQLite storage for bid history and state
- LangGraph: Orchestrates the workflow between different components
- LangChain: Manages interactions with AI models
- Pydantic: Ensures data validation and serialization
- SQLite: Provides lightweight but reliable data persistence
-
Scraper Node
- Fetches bids from multiple sources
- Validates and normalizes data
- Prevents duplicate entries
-
Filter Node
- Analyzes bids using AI models
- Applies company-specific criteria
- Classifies bids as qualified/unqualified
-
Notification Node
- Formats bid information
- Delivers updates via Telegram
- Tracks notification status
- Time Efficiency: Reduces manual bid searching from hours to seconds
- Accuracy: AI-powered analysis ensures relevant matches
- Never Miss Out: Automated monitoring catches every opportunity
- Team Coordination: Instant team notifications via Telegram
- Cost Effective: Minimizes human resources needed for bid discovery
- Scalable: Easy to add new sources or modify filtering criteria
Built in just 3 days using:
- CursorAI: For rapid development assistance
- LangGraph: For workflow orchestration
- Python: As the primary programming language
- AI Models: GPT-4 and Claude for intelligent analysis
graph LR
A[Scraper] --> B[Bid Analyst]
B --> C{Analyze more bids?}
C -->|Yes| B
C -->|No| D[Telegram Notifier]
C --> D[Telegram Notifier]
- Initialization: System loads configurations and connects to necessary services
- Scraping: Collects bids from configured sources
- Processing: AI models analyze and filter bids
- Notification: Qualified bids are formatted and sent to Telegram
- State Management: System tracks progress and prevents duplicates
Scout has transformed the bid discovery process from a time-consuming manual task into an automated, intelligent system. It continuously monitors opportunities 24/7, ensuring your team never misses a relevant bid while saving countless hours of manual searching.
Built with ❤️ using CursorAI and LangGraph
- Docker and Docker Compose installed on your system
- API keys for:
- OpenAI (GPT-4)
- Anthropic (Claude)
- Telegram Bot
-
Clone the repository
git clone git@github.com:moe1047/scout-the-bid-finder.git cd scout-the-bid-finder -
Set up environment variables
# Copy the example env file cp .env.example .env # Edit .env with your API keys nano .env
-
Build and start the container
docker-compose up -d
View Logs
# All logs
docker-compose logs -f
# Service logs
docker-compose logs -f scout
# Cron job logs
docker exec scout-agent cat /var/log/scout/cron.logManual Trigger
# Run the scraper manually
docker-compose exec scout python3 main.pyContainer Management
# Stop the service
docker-compose down
# Restart the service
docker-compose restart scout
# Check container status
docker-compose ps
# Check container health
docker inspect scout-agent- Schedule: Cron job runs every 2 days at midnight UTC
- Persistence:
- Database:
./db/bids.db - Logs:
./logs/
- Database:
- Timezone: Set to Europe/London (configurable in docker-compose.yml)
-
Container won't start
- Check if all required environment variables are set in
.env - Verify Docker daemon is running
- Check logs for specific errors
- Check if all required environment variables are set in
-
No notifications
- Verify Telegram bot token is correct
- Check if bot has permission to send messages
- Review cron logs for execution status
-
Database issues
- Ensure
./dbdirectory has proper permissions - Check if volume is properly mounted
- Ensure
-
Cron not running
- Verify timezone settings
- Check cron logs
- Ensure cron service is running inside container