Track German Apartment Listings Daily
Scans apartment listings across key German cities daily, extracts details, scores investment potential, and logs enriched data with market summaries to Google Sheets.
German Real Estate Market Intelligence
This workflow provides up-to-date market intelligence by collecting and analyzing apartment listings for sale in select German cities every morning. It uses web search and AI analysis to extract relevant data, estimate rental yields, score investment potential, and log the results — along with a city-level market summary — into Google Sheets.
What It Does
- Triggers daily at 7:00 AM Berlin time to keep your data fresh.
- Generates search queries for apartments for sale in 12 German cities, limited to listings from the last 90 days.
- Searches the web for relevant apartment listings in each city.
- Uses an AI agent to browse and extract detailed information from listing portals like ImmoScout24, Immowelt, and Kleinanzeigen.
- Cleans, parses, and deduplicates the aggregated listing data.
- Scores each apartment based on estimated rental income, gross yield, price per sqm, and overall investment value.
- Sorts all listings by city and investment score.
- Writes individual listings to a Google Sheets "Listings" tab with date-stamped entries.
- Generates a market summary with per-city statistics (average/median prices, yields, hot deals count) and writes it to a separate "Market Summary" tab.
What You Need
- A Needle Platform account with access to workflow automation tools.
- A Google account with access to Google Sheets.
- A configured Google Sheets connector in Needle.
- A destination spreadsheet with two sheets: Listings and Market Summary.
How the Flow Works
| Node | Description |
|---|---|
| Scheduled Trigger | Runs the workflow daily at 7:00 AM Europe/Berlin time. |
| Code (Generate Queries) | Creates search queries for each of the 12 target cities to find apartment listings from the last 90 days. |
| Web Search | Performs internet searches based on the generated queries for each city. |
| AI Agent (Extract Listings) | Browses the most promising listing pages and extracts structured apartment data including price, size, rooms, address, and source. |
| Code (Clean & Deduplicate) | Flattens results from all cities, parses string-format entries if needed, and removes duplicates. |
| AI Agent (Score Listings) | Estimates monthly rent using city-level benchmarks, calculates gross yield, and assigns an investment score and verdict (HOT_DEAL, GOOD, AVERAGE, or OVERPRICED). |
| Code (Sort Listings) | Sorts enriched listings by city name, then by investment score in descending order. |
| Google Sheets (Listings) | Writes the final processed listings to the "Listings" sheet with date-stamped rows. |
| Code (Market Summary) | Aggregates per-city statistics: average/median prices, price per sqm, yields, listing counts, and deal breakdowns. |
| Google Sheets (Market Summary) | Writes the city-level summary to the "Market Summary" sheet. |
Output
Each day, your Google Sheet is updated with two tabs:
- Listings — Individual apartment entries with the following fields:
| Field | Description |
|---|---|
| Date | The date the listing was collected |
| Title | Listing title |
| City | City name |
| Source | Portal name (e.g., ImmoScout24) |
| Price (EUR) | Asking price |
| Size (sqm) | Apartment size in square meters |
| Rooms | Number of rooms |
| Price per sqm | Calculated price per square meter |
| Address | Street-level address if available |
| Listing URL | Direct link to the listing |
| Est. Monthly Rent | Estimated cold rent based on city benchmarks |
| Gross Yield % | Estimated annual gross rental yield |
| Score | Investment score from 1 (worst) to 10 (best) |
| Verdict | HOT_DEAL, GOOD, AVERAGE, or OVERPRICED |
| Notes | Brief explanation of the score |
- Market Summary — Per-city aggregated statistics including average and median prices, yield percentages, and counts of hot deals vs. overpriced listings.
Target Cities
The workflow currently covers 12 German cities across Eastern and Western Germany:
- Leipzig, Dresden, Chemnitz
- Dortmund, Essen, Duisburg, Gelsenkirchen, Wuppertal, Bochum
- Halle (Saale), Magdeburg, Bremerhaven
You can customize this list by editing the code node that generates search queries.
Notes
- Rental estimates are based on predefined cold-rent benchmarks per city. Actual rents may vary.
- Listings where the price is listed as "auf Anfrage" (on request) or is ambiguous are excluded.
- The AI browsing tool targets popular portals but may miss smaller sites or private listings.
- Make sure your Google Sheets API credentials are correctly set up and authorized in the Needle connector.
- You can adjust city lists, rent benchmarks, and scoring logic by editing the relevant code nodes.
Want to showcase your own workflows?
Become a Needle workflow partner and turn your expertise into recurring revenue.
