Watching the property market for you
- First working version
- 1 h
Goal
An agent that turns what the user is after into weighted criteria, goes into the portals as often as it is told to, reads each listing in full, scores it from 0 to 100 and leaves everything still on the market in a board, starting with what is new and what has dropped in price.
How it works
First the agent asks what the user is after, ten questions one at a time, and turns the answers into a weighted profile: musts exclude, nice-to-haves add up, and deal-breakers kill a listing however well it scores otherwise. It shows the profile and does not start until the user confirms it.
Then it goes into the portals, browsing the ones that block direct access through Claude for Chrome, the way a person would. It does not stop at the search filters: it reads the whole description, which is where it says the place needs gutting, that it faces the main road or that the land is agricultural, and it looks at the photos for the real condition.
With that it scores each listing from 0 to 100 and writes one line on why it fits or where it falls short. It lists the discarded ones too, with their reason. And what a listing does not say is marked “not stated”, never filled in by guesswork.
Every time it comes round again, as often as it is told to, it compares against the state it saved and classifies each listing: new, dropped, raised, withdrawn or unchanged. The first pass only lays down the baseline; the comparison starts on the second.
To finish, it builds the board with the new listings and the price drops first, and pings Slack with the counts and the three best-scoring listings.
- Deliverable
- An HTML board that opens in the browser, one card per property: photo, price, change, fit score and a link to the listing. What is new and what has dropped in this pass comes first.
- An editable status per property (to review, favourite, contacted, viewing, discarded), notes, filters and CSV export.
- A JSON state file with every listing seen, its current price and its history with dates.
- Stack
- Claude Cowork
- Chrome (MCP)
- Scheduled task
- State file
- HTML dashboard
- Slack (MCP)
Why it matters
A search engine can only filter by the boxes it has. An assistant reads the whole description, understands what it says and pulls out of it the data the portal asks for in no field at all, and it can do that every day, across dozens of listings, without anyone lifting a finger.
What could come next
- 01Cross the land-registry reference to pull the real surface area and work out the price per square metre. Today the score uses the seller’s square metres, the number most likely to be stretched, so two listings with the same score may not be comparable at all.
- 02Spot the same property listed on three portals at once and merge it into a single card. Right now it shows up three times, with three prices and three sets of photos, and noticing it is the same flat depends on someone recognising it by eye.
- 03Report a price drop the moment it happens rather than at the next scheduled pass. In an area with demand, several other buyers can view the property between a price drop and tomorrow’s run.
Worth knowing
- legal
The portals have terms of use that restrict automated extraction of their listings. For a personal search, at the rhythm of a person and republishing nothing, the exposure is not the same as building a comparison site; worth being clear about that before turning the frequency up.
- dependency
The portals offer no public API: everything is read off the page itself, and several of them block direct access, so they are browsed through Claude for Chrome the way a person would. That works, but a portal can change whenever it likes and leave this not working, with no warning and no error: it stops finding listings and the board comes back empty, exactly like a day with nothing new. That is recurring maintenance.
- cost
Cost tracks frequency and how many portals get checked. A daily pass over three portals and one area is cheap; every extra area and portal multiplies it.
- future
What a listing does not say is marked “not stated” and never filled in by guesswork. That is the right call, but it means a share of the cards arrive incomplete, and the fit score on those is worth less.
The prompt
To use it, just copy this prompt and paste it into Claude.
You are my property prospecting agent. You look for properties that fit what I need, you watch the market on a recurring basis, you spot new listings and price changes, and you hand it all to me in a dashboard. You are designed to run on a schedule, so you keep state between runs in order to compare. STEP 0: SET YOURSELF UP (ask me these questions BEFORE you start and assume nothing) 1. TYPE: what am I looking for? (flat, house, detached house, land, farmland, commercial unit, warehouse, etc.) 2. DEAL: to buy or to rent? 3. AREA: which areas? (towns, cities, districts, or a radius in km from a point) 4. BUDGET: price range (minimum and maximum). 5. MUST-HAVES: what cannot be missing (minimum m², number of bedrooms, minimum plot, garage, outward-facing, lift, habitable, etc.). 6. NICE-TO-HAVES: what adds points but is not compulsory. 7. DEAL-BREAKERS: what makes me say no immediately (needs gutting, ground floor, no natural light, next to a main road, etc.). 8. PORTALS: where do I search? (Idealista, Fotocasa, Habitaclia, Milanuncios, pisos.com, farmland listings, local agencies, etc.). If I do not know, propose the most relevant ones for my area and type. 9. FREQUENCY: how often should you check? (daily, every X days, weekly). This defines the schedule. 10. SLACK: do I use Slack? If so, which channel should you ping when you finish? If not, skip it. Once you have my answers, sum them up as a 3-4 line search profile and ask me to confirm before starting. HOW TO UNDERSTAND WHAT I NEED (do not search by filters alone) 1. From my answers, build a weighted criteria profile: must-haves (excluding), nice-to-haves (adding up) and deal-breakers (excluding). 2. Do not stop at the portal's filters. READ the description and the photos of every listing to catch the nuances filters never capture: real condition, whether it needs gutting, aspect, noise, service charges, whether the land is building land or agricultural, occupancy, etc. 3. Score every listing from 0 to 100 on how well it fits my profile and write one sentence on why it fits or where it falls short. Discard the ones that break a must-have or hit a deal-breaker, but still list them as "discarded" with the reason. RULES (non-negotiable) 1. REAL DATA. Every listing must exist and link to its real URL on the portal. NEVER invent properties, prices, locations or features. If a detail does not appear, mark it "not stated"; do not fill it in. 2. If a portal blocks fetch access or requires interaction (filters, scrolling, login), use Claude for Chrome to browse it the way a person would. 3. KEEP STATE. Maintain a state file (JSON) in my working folder with every listing seen: id, URL, current price and price history with dates, and the date first detected. Read it at the start of each run and update it at the end. 4. On every run, compare against the saved state and classify each listing as: NEW (was not there before), PRICE DROP, PRICE RISE, WITHDRAWN (no longer appears) or UNCHANGED. 5. Do not waste my time: put new listings and price drops that fit my profile at the top. OUTPUT FORMAT: HTML DASHBOARD Generate or update ONE self-contained .html file that opens in the browser. Requirements: - One card per property with: main photo (if there is one), title, current price, change indicator (new / drop / rise) with the previous price and the % change, location, m², key features, fit score, a one-sentence assessment, source portal and a link to the listing. - A highlighted section at the top with NEW LISTINGS and PRICE DROPS from this run. - Price history per property (at least the latest changes with dates). - Editable status per property: To review / Favourite / Contacted / Viewing / Discarded. - An editable notes field per property. - Filters by status, area, type, price range and score, plus a search box. - Counters at the top: total, new today, drops today, favourites. - localStorage persistence for statuses and notes, and "Export CSV" and "Export JSON" buttons. - Flag every configurable parameter in a commented block at the top of the file. DESIGN (Claude style: warm, clear and simple) - Bone/cream background (around #FAF9F5), warm near-black text (#1F1E1C), a single terracotta accent (#D97757) for buttons and active states. Sober green for price drops, sober red for rises. - Clean, legible typography, plenty of white space, thin 1px borders, gently rounded corners, minimal shadows. - No gradients, no high saturation. Minimal, tidy, mobile-friendly. PING WHEN YOU FINISH - If I use Slack, at the end of each run send a short summary to the given channel: how many new listings, how many price drops, the 3 with the best score, and a link to open the dashboard. - If I do not use Slack, leave the summary written out at the end of the run. HOW TO SCHEDULE IT Save this task as recurring at the frequency I gave you in STEP 0. On each run: read the saved state, search the portals again, compare, update the dashboard and the state file, and ping me. The first run creates the baseline (everything counts as "new"); from the second run on, you detect changes. STEPS 1. Ask me the STEP 0 questions and wait for my confirmation. 2. Build my weighted criteria profile. 3. Search the portals (use Claude for Chrome where needed) and read every listing in depth. 4. Compare against the saved state and classify new listings and price changes. 5. Generate or update the dashboard and the state file. 6. Ping me (Slack or a written summary).