# wohn-bot A Python bot that monitors Berlin's public housing portal (inberlinwohnen.de) and WG rooms (wgcompany.de). Sends Telegram notifications when new listings appear and can automatically apply to some listings. ## What it does - Monitors inberlinwohnen.de for new apartment listings from 6 housing companies (HOWOGE, Gewobag, Degewo, Gesobau, Stadt und Land, WBM) - Monitors wgcompany.de for WG room listings with configurable filters - Sends Telegram notifications with listing details - Logs listing times to CSV for pattern analysis - Auto-apply feature for supported housing companies ## Auto-Apply Support All six housing companies monitored by this bot now support the autopilot (automatic application) feature. Use autopilot with care — automatic form submission is destructive and may send many requests if configured incorrectly. | Company | Status | Notes | |---------|--------|-------| | HOWOGE | Working | Fully automated and tested | | Degewo | Working | Uses Wohnungshelden portal; automated | | Stadt und Land | Working | Embedded form handled automatically | | Gewobag | Working | Wohnungshelden iframe handled automatically | | Gesobau | Working | Automated form submission implemented | | WBM | Working | Automated form submission implemented | | WGcompany | Monitoring only | WGcompany monitoring only (no autopilot) | Recommended precautions: - Run with `/autopilot off` while testing new selectors or after changing config. - Inspect `data/applications.json` and saved screenshots in `data/` after enabling autopilot. - Respect site terms of use and rate limits; set `CHECK_INTERVAL` appropriately. ## Setup ### Docker (recommended) ```bash cp .env.example .env # Edit .env with your credentials docker compose up -d ``` ### Local development ```bash pip install -r requirements.txt playwright install chromium export TELEGRAM_BOT_TOKEN=your_token export TELEGRAM_CHAT_ID=your_chat_id # ... other env vars python monitor.py ``` ## Configuration ### Required environment variables - `TELEGRAM_BOT_TOKEN` - Bot token from @BotFather - `TELEGRAM_CHAT_ID` - Your Telegram chat ID ### InBerlin login (required for auto-apply) - `INBERLIN_EMAIL` - Your inberlinwohnen.de email - `INBERLIN_PASSWORD` - Your inberlinwohnen.de password ### Form data (for auto-apply) - `FORM_ANREDE` - Salutation (Herr/Frau) - `FORM_VORNAME` - First name - `FORM_NACHNAME` - Last name - `FORM_EMAIL` - Email address - `FORM_PHONE` - Phone number - `FORM_STRASSE` - Street name - `FORM_HAUSNUMMER` - House number - `FORM_PLZ` - Postal code - `FORM_ORT` - City - `FORM_PERSONS` - Number of persons in household - `FORM_CHILDREN` - Number of children - `FORM_INCOME` - Monthly net income ### WGcompany filters - `WGCOMPANY_ENABLED` - Enable WGcompany monitoring (true/false) - `WGCOMPANY_MIN_SIZE` - Minimum room size in sqm - `WGCOMPANY_MAX_SIZE` - Maximum room size in sqm - `WGCOMPANY_MIN_PRICE` - Minimum price in EUR - `WGCOMPANY_MAX_PRICE` - Maximum price in EUR - `WGCOMPANY_BEZIRK` - District filter (optional) ## Telegram Commands - `/autopilot on|off` - Enable or disable automatic applications (use `/autopilot on` or `/autopilot off`). - `/status` - Show current status and statistics (autopilot state, application counts by company). - `/plot` - Generate and send a weekly listing-patterns plot (`data/weekly_plot.png`). - `/errorrate` - Generate and send an autopilot success vs failure plot (`data/error_rate.png`). - `/help` - Show available commands and usage information. Note: The bot only processes commands from the configured `TELEGRAM_CHAT_ID`. Use `/autopilot off` while testing selector changes or after modifying configuration to avoid accidental submissions. ## Data files All data is stored in the `data/` directory: - `listings.json` - Previously seen inberlinwohnen listings - `wgcompany_listings.json` - Previously seen WGcompany listings - `applications.json` - Application history - `listing_times.csv` - Time series data for listings - `state.json` - Runtime state (autopilot toggle) - `monitor.log` - Application logs ## Debugging When applications fail, the bot saves: - Screenshots to `data/*.png` - Page HTML to `data/debug_page.html` Check these files to understand why an application failed. ## License MIT