Tip
Are you looking to make apps like this easily? Check out our open-source, community-driven Odoo Docker image
A simple, friendly place to keep track of homes you’re looking at. Save listings, add notes, tag photos, and share the short list with the people who matter. Listing Lab also keeps an eye on changes—like price cuts and status updates—so your view of a property stays current without constant refreshing.
Under the hood, this repo includes the Listing Lab Odoo addon, a small scraper service, and a Docker Compose setup to run everything locally.
- 🏠 Property listing management inside Odoo
- 🗂️ Save, tag, and organize the homes you’re considering
- 🖼️ Photo management with simple tagging
- 📈 Popularity tracking when available
- 🏡 Realtor.com data via HomeHarvest (v0.7.0+)
- 📨 Background scraping powered by RabbitMQ
- 🤖 Optional ChatGPT/OpenAI analysis (bring your own API key)
- Keep a list of properties you care about
- Add notes, tags, and photos to remember what stood out
- See popularity hints when available (views, saves, clicks)
- Pull fresh details from Realtor.com so your info doesn’t go stale
To scrape a property, copy the address into the Address field, and click "Update Property"
Warning
This application is made to run via Docker. You can download Docker Desktop if you are on Windows or Mac
This project includes a docker-compose.yml file that will start the application and the scraper.
See the docker folder for more information.
Download the docker-compose.yml, open a terminal in the folder you downloaded it to, and
run docker compose up to start the application.
To have it always running, run docker compose up -d to start it in detached mode.
To stop the application, run docker compose down.
Clone this repository, and open a terminal in the root directory.
Tip
You can run the following command:
cp .env.example .env
Copy the .env.example file to .env
Tip
You can also run docker compose up --build.
Run docker compose build
Run the application by running
docker compose up
If you want to run run the application all the time, start it with
docker compose up -d
To stop the application, run
docker compose down
The web version will be accessible at:
By default, the login is:
| Field | Value |
|---|---|
| Username | admin |
| Password | admin |
By default, the login is:
| Field | Value |
|---|---|
| Username | guest |
| Password | guest |
After you have started the web application, you will need to generate an API key for the scraper to use.
If you are using the Docker Compose setup, you can update the environment variable ODOO_API_KEY in the
docker-compose.yml file.
Or, you can create a .env file in the root of the project.
If you are using a .env file, add the following line:
ODOO_API_KEY=your_api_key_hereOpen the application by visiting:
Select your user profile in the top right corner, and select My Preferences.
Click the "Security" tab, and generate a new API key.
If you are prompted for a password, enter the password you used to login (admin by default)
Add a persisistent key, and click "Save".
Copy the generated key and paste it into the .env file as the value for ODOO_API_KEY.
Restart the scraper by hitting CRTL+C or running docker compose down and docker compose up
You will see a message in the console that indicates the scraper is running successfully.
| Variable | Default | Notes |
|---|---|---|
| ODOO_API_KEY | — | You must generate an API key after you started the web service |
| ODOO_DB_HOST | listing_lab_postgres | |
| ODOO_DB_PORT | 5432 | |
| ODOO_DB_USER | listing_lab_user | |
| ODOO_DB_PASSWORD | listing_lab_password | |
| ODOO_DB_NAME | listing_lab | |
| ODOO_LOG_LEVEL | info | |
| RABBITMQ_HOST | rabbitmq | |
| RABBITMQ_PORT | 5672 | |
| RABBITMQ_USER | guest | Default management user |
| RABBITMQ_PASS | guest | Default management password |
| RABBITMQ_QUEUE | property_scrape_queue | |
| RABBITMQ_EXCHANGE | property_exchange | |
| RABBITMQ_ROUTING_KEY | property.scrape | |
| ODOO_URL | http://listing_lab:8069 | |
| ODOO_DB_NAME | listing_lab |
- User creates a property and sets an address. They click "Update Property"
- A message is published to RabbitMQ
- The scraper consumes, calls HomeHarvest, and transforms results
- Records are created/updated in Odoo
- Odoo UI uses live record data and reflects the latest photos, popularity, and details
If you are updating your application, be sure to upgrade the UI by clicking the square icon in the top left, selecting "Apps" and upgrading the Adomi - Listing Lab application.
Listing Lab is an Adomi project. We build helpful tools on Odoo. This one is made for individuals and families first. If you have ideas or run into issues, feel free to open an issue or suggestion.