A Pi package that turns Pi into a Danish real-estate agent for boligsiden.dk — it finds houses matching your criteria, compares them, and keeps stored listings up to date.
The agent works through three skills backed by native Pi tools that talk to Boligsiden and other Danish public-data services. Promising listings (and their photos) are saved to a local database so you can compare them and track price changes over time.
| Skill | What it does |
|---|---|
/skill:search |
Search Boligsiden by location, price, size and type; judge suitability; store good listings and their photos. |
/skill:compare |
Compare stored listings on economy, living space, and commute/travel. |
/skill:update |
Re-check stored listings for changes (price, days on market, availability). |
- Boligsiden — houses for sale (search + case details)
- Skraafoto — oblique aerial 360 photos (Dataforsyningen STAC API)
- Rejseplanen — public-transport journey planning
- DAWA — Danish address lookup (text → id + coordinates)
Storage uses libsql (@libsql/client, with vector-search support for future
use). Listing photos are downloaded to ./data/images/.
- Pi (
npm install -g @earendil-works/pi-coding-agent) - Node.js 18+ (bundled with Pi's installer)
Install it into Pi from git; Pi runs npm install for the extension's
dependencies automatically:
pi install git:github.com/mrn-dk/pi-estate-agentUse -l to install it only for the current project instead of globally. Once
installed, start pi and the estate_* tools and /skill:* skills are
available in any session.
git clone https://github.com/mrn-dk/pi-estate-agent
cd pi-estate-agent
npm install # installs @libsql/client used by the extension
pi install -l . # register this repo as a project-local Pi packageThen run pi in the project directory (trust it when prompted). The database is
created automatically under ./data/ on first use.
Invoke a skill with /skill:<name>, optionally followed by instructions. You can
also just describe what you want in plain language — Pi loads the right skill and
tools on its own.
/skill:search find a villa near Aarhus under 4.5M kr with at least 4 rooms and a garden
A typical session:
- Search & save —
/skill:searchlooks up matching homes, judges them against your criteria, and stores the good ones with their photos:/skill:search condos in Copenhagen (zip 2100) between 3 and 5 million, min 3 rooms - Compare —
/skill:compareweighs the saved listings against each other on economy, living space, and commute:/skill:compare the two cheapest saved listings, commute target Rådhuspladsen 1 København - Update —
/skill:updatere-checks saved listings for price drops or changes:/skill:update all saved listings
Data is stored under ./data/ (git-ignored): the libsql database in
data/estate.db and downloaded photos in data/images/<caseID>/. Override the
location with ESTATE_DATA_DIR or ESTATE_DB.
All integrations are native Pi tools (no CLI to run):
| Tool | Purpose |
|---|---|
estate_search |
Search Boligsiden listings by location/price/size/type |
estate_case |
Fetch one listing by caseID / URL / slug |
estate_address_search |
Resolve an address to id + coordinates (DAWA) |
estate_skraafoto |
Oblique aerial 360 photos for an address / lat,lon |
estate_transit_locations / estate_transit_trip |
Rejseplanen journeys |
estate_db_add / estate_db_list / estate_db_get / estate_db_update / estate_db_remove |
Stored-listing database |
See skills/TOOLS.md for parameters and details.
- DinGeo is not integrated: it sits behind a Cloudflare challenge that blocks programmatic access.
- Listing photos are stored but not analysed by a vision model in this version.