Multi-platform flat search automation
Project description
FlatScraper
Find WG rooms and apartments in hours, not weeks. FlatScraper automates your search on WG-Gesucht: it discovers new listings, generates personalized messages with AI, and sends contact requests—so you can land multiple viewings while others are still refreshing the page.
Why FlatScraper?
| The old way | With FlatScraper |
|---|---|
| Manually refresh WG-Gesucht | Automatically scans for new listings |
| Copy-paste generic messages | AI writes personalized Anschreiben for each ad |
| Hope your message stands out | Tailored tone: WG-friendly or landlord-professional |
| One viewing per week if you're lucky | Multiple viewings in hours |
Demo
Setup wizard (one-time, ~2 minutes)
FlatScraper in action
Features
- Zero cost – Runs entirely on Groq's free tier. No paid APIs.
- Switch models – Choose from Groq models (compound, llama, etc.) in setup or
.env. - Personalized messages – Your profile (age, job, personality, hobbies) shapes every Anschreiben.
- Smart extraction – Strips LLM meta-commentary; only the message is sent.
- Rate limit handling – Automatic retries with user feedback when Groq throttles.
- Headless by default – Runs in the background; use
--visiblefor debugging. - Dry run –
--no-sendto preview messages without sending.
Quick start
1. Install
# With uv (recommended)
uv sync
# Or with pip
pip install flatscraper
# or from source: pip install -e .
2. Install Playwright browser
playwright install chromium
3. Run setup
uv run flatscraper setup
# or: uv run setup
The wizard guides you through:
- WG-Gesucht credentials
- Groq API key (free)
- Google Drive link for your documents
- Your profile (age, city, job, personality, hobbies)
- Model selection (Groq free-tier models)
- Search URLs from WG-Gesucht
4. Run
# Test run (no messages sent)
uv run flatscraper --no-send
# Live run
uv run flatscraper
CLI reference
| Command | Description |
|---|---|
flatscraper |
Run once: find listings, generate messages, send |
flatscraper --no-send |
Dry run: generate messages only, don't send |
flatscraper --visible |
Show browser window (default: headless) |
flatscraper --debug |
Include all listings (ignore age filter) |
flatscraper --schedule |
Run repeatedly on an interval |
flatscraper setup |
Run the setup wizard |
Configuration
Environment (.env)
| Variable | Required | Description |
|---|---|---|
FLATSCRAPER_EMAIL |
Yes | WG-Gesucht login email |
FLATSCRAPER_PASSWORD |
Yes | WG-Gesucht password |
GROQ_API_KEY |
Yes | Groq API key (free tier) |
GOOGLE_DRIVE_LINK |
Yes | Google Drive folder with your documents |
GROQ_MODEL |
No | Model (default: llama-3.1-8b-instant) |
RUN_INTERVAL_MINUTES |
No | Schedule interval (default: 30) |
AUTO_RUN_ENABLED |
No | Enable schedule (default: false) |
Copy .env.example to .env and fill in your values. Never commit .env or user_profile.json—they contain personal data.
Profile (user_profile.json)
Created by the setup wizard. Contains your persona (for personalized messages) and search URLs. Edit manually or run flatscraper setup again.
Groq models (free tier)
You can switch models in setup or via GROQ_MODEL in .env:
| Model | Notes |
|---|---|
groq/compound |
High throughput, good for many messages |
groq/compound-mini |
Fast, good for high frequency |
llama-3.3-70b-versatile |
Best text quality |
meta-llama/llama-4-scout-17b-16e-instruct |
Good balance |
llama-3.1-8b-instant |
Default, fast |
Tests
uv sync --extra dev
uv run pytest tests/ -v
Project structure
flatscraper/
├── run.py # Main entry point
├── config.py # Settings + user profile
├── groq_client.py # LLM client (Groq)
├── models.py # Pydantic models
├── setup_wizard.py # Interactive setup
├── .env.example # Env template
└── platforms/
└── wggesucht/ # WG-Gesucht implementation
Supported platforms
| Platform | Status |
|---|---|
| WG-Gesucht | ✅ Ready |
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file flatscraper-0.1.0.tar.gz.
File metadata
- Download URL: flatscraper-0.1.0.tar.gz
- Upload date:
- Size: 23.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ade62772e60d0b8679c45fcc706566ea919bc279ac74b54be2ad152ffc57f0b5
|
|
| MD5 |
7558a02e70675b6c6eab45ca17d33245
|
|
| BLAKE2b-256 |
5c799afb31fdd0c01bac790b0945f82565e32b7ae12b1c7ef79f3c8fcf5bdf12
|
Provenance
The following attestation bundles were made for flatscraper-0.1.0.tar.gz:
Publisher:
publish.yml on lukasthekid/flatscraper
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
flatscraper-0.1.0.tar.gz -
Subject digest:
ade62772e60d0b8679c45fcc706566ea919bc279ac74b54be2ad152ffc57f0b5 - Sigstore transparency entry: 999169842
- Sigstore integration time:
-
Permalink:
lukasthekid/flatscraper@f861e1c29e63ce7103155fcec794e9ceedc6e3bc -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/lukasthekid
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f861e1c29e63ce7103155fcec794e9ceedc6e3bc -
Trigger Event:
release
-
Statement type:
File details
Details for the file flatscraper-0.1.0-py3-none-any.whl.
File metadata
- Download URL: flatscraper-0.1.0-py3-none-any.whl
- Upload date:
- Size: 25.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2d6cc5eb998ddca688ce1336c4886e78780296111eef3c64621c7f58a7824a83
|
|
| MD5 |
cf68aa730a57d6e41ddfd38476ca509f
|
|
| BLAKE2b-256 |
bbf1d9f0ab86cbf7bb17a9be1c24a09b075b136139e4e483d9ad6b7227b188af
|
Provenance
The following attestation bundles were made for flatscraper-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on lukasthekid/flatscraper
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
flatscraper-0.1.0-py3-none-any.whl -
Subject digest:
2d6cc5eb998ddca688ce1336c4886e78780296111eef3c64621c7f58a7824a83 - Sigstore transparency entry: 999169892
- Sigstore integration time:
-
Permalink:
lukasthekid/flatscraper@f861e1c29e63ce7103155fcec794e9ceedc6e3bc -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/lukasthekid
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f861e1c29e63ce7103155fcec794e9ceedc6e3bc -
Trigger Event:
release
-
Statement type: