Quick overview
Youtube Video: https://youtu.be/FGzYp8k-ONY
This workflow runs daily or on demand to scrape Immoweb listings via Apify, compare them against historical prices stored in Google Sheets, and uses Google Gemini to label each listing as BUY/MAYBE/AVOID before logging results and sending Slack alerts for notable opportunities.
How it works
- Runs on a schedule (7:00) or manually to start the scan with predefined search and notification settings.
- Calls the Apify Immoweb scraper API to fetch up to the configured number of listings, and posts a Slack warning if the scrape fails.
- Loads previously seen listings from Google Sheets and combines them with the fresh scrape to de-duplicate, track price history, and calculate features like €/m², comparable medians, discounts, and anomaly flags.
- Sends each new listing or price-changed listing to Google Gemini with a structured rubric to return a BUY/MAYBE/AVOID verdict, score, reasons, and red flags.
- Merges the Gemini verdict back into each listing, builds formatted Slack and email-ready messages, and updates/creates the listing row in Google Sheets.
- Sends a Slack alert for listings that are not rated AVOID and are either new or have at least the configured minimum price drop.
Setup
- Create an Apify account, add an API token as an HTTP Header Auth credential, and set the Immoweb search URL and maxItems values in the configuration step.
- Set up a Google Sheets Service Account credential, share the target spreadsheet with the service account email, and update the sheet ID and sheet tab name used to store listing history.
- Add a Google Gemini (Google PaLM) API credential for the Gemini model used to generate structured verdicts.
- Add a Slack API credential and set the target channel name (and any channel ID value used for scrape-failure messages) in the configuration step.