2025-09-05 12:07:35 +02:00
2025-08-25 21:11:30 +02:00
2024-11-19 13:45:07 +01:00
2025-08-31 20:25:52 +02:00
2025-09-03 14:47:56 +02:00
2025-09-03 14:22:04 +02:00
2025-06-04 09:46:07 +02:00
2021-11-25 19:16:06 +01:00
2022-03-09 14:28:13 +01:00
2025-07-25 13:13:04 +02:00
2025-09-03 14:22:04 +02:00
2025-07-23 08:47:26 +02:00
2025-01-05 06:53:07 +01:00
2025-09-05 12:07:35 +02:00
2025-09-04 09:08:25 +02:00

Fredy 🏡 Your Self-Hosted Real Estate Finder for Germany

Finding an apartment or house in Germany can be stressful and time-consuming.
Fredy makes it easier: it automatically scrapes ImmoScout24, Immowelt, Immonet, eBay Kleinanzeigen, and WG-Gesucht and notifies you instantly via Slack, Telegram, Email, ntfy, and more when new listings appear.

With a modern architecture, Fredy provides a clean Web UI, removes duplicates across platforms, and stores results so you never see the same listing twice.

Tests Docker Source


Key Features

  • 🏠 Scrapes ImmoScout24, Immowelt, Immonet, eBay Kleinanzeigen, WG-Gesucht
  • Instant notifications: Slack, Telegram, Email (SendGrid, Mailjet), ntfy
  • 🔎 Uses the ImmoScout Mobile API (reverse engineered)
  • 🌍 Runs anywhere: Docker, Node.js, self-hosted
  • 🖥️ Intuitive Web UI to manage searches
  • 🎯 Easy to use thanks to a user-friendly Web UI
  • 🔄 Deduplication across platforms
  • ⏱️ Customizable search intervals

🤝 Sponsorship

I maintain Fredy and other open-source projects in my free time.
If you find it useful, consider supporting the project 💙

JetBrains

Fredy is proudly supported by the JetBrains Open Source Support Program.


🚀 Quick Start

With Docker

docker pull ghcr.io/orangecoding/fredy:master
docker create --name fredy -v /path/to/your/conf/:/conf -p 9998:9998 fredy/fredy
docker start fredy

Logs:

docker logs fredy -f

Manual (Node.js)

  • Requirement: Node.js 20 or higher
  • Install dependencies and start:
yarn
yarn run start:backend   # in one terminal
yarn run start:frontend  # in another terminal

👉 Open http://localhost:9998

Default Login:

  • Username: admin
  • Password: admin

📸 Screenshots

Job Configuration Job Analytics Job Overview
Screenshot showing job configuration in Fredy Screenshot showing job analytics in Fredy Screenshot showing job overview in Fredy

🧩 Core Concepts

Fredy is built around three simple concepts:

Provider 🌐

A provider is a real-estate platform (e.g. ImmoScout24, Immowelt, Immonet, eBay Kleinanzeigen, WG-Gesucht).
When you create a job, you paste the search URL from the platform into Fredy.
⚠️ Always make sure the search results are sorted by date, so Fredy picks up the newest listings first.

Adapter 📡

An adapter is the channel through which Fredy notifies you (Slack, Telegram, Email, ntfy, ...).
Each adapter has its own configuration (e.g. API keys, webhook URLs).
You can use multiple adapters at once --- Fredy will send new listings through all of them.

Job 📅

A job combines providers and adapters.
Example: "Search apartments on ImmoScout24 + Immowelt and send results to Slack + Telegram."
Jobs run automatically at the interval you configure (see /conf/config.json).


Immoscout

Immoscout has implemented advanced bot detection. In order to work around this, we are using a reversed engineered version of their mobile api. See Immoscout Reverse Engineering Documentation

Analytics

Fredy is completely free (and will always remain free). However, it would be a huge help if youd allow me to collect some analytical data. Before you freak out, let me explain...
If you agree, Fredy will send a ping to my Mixpanel project each time it runs.
The data includes: names of active adapters/providers, OS, architecture, Node version, and language. The information is entirely anonymous and helps me understand which adapters/providers are most frequently used.

Thanks🤘

🛠️ Development

Development Mode

yarn run start:backend:dev
yarn run start:frontend:dev

You should now be able to access Fredy from your browser. Check your Terminal to see what port the frontend is running on.

Run Tests

yarn run test

📐 Architecture

flowchart TD
 subgraph Jobs["Jobs"]
        A1["Job 1"]
        A2["Job 2"]
        A3["Job 3"]
  end
 subgraph Providers["Providers"]
        C1["Provider 1"]
        C2["Provider 2"]
        C3["Provider 3"]
  end
 subgraph NotificationAdapters["Notification Adapters"]
        F1["Adapter 1"]
        F2["Adapter 2"]
  end

    A1 --> B["FredyRuntime"]
    A2 --> B
    A3 --> B
    B --> C1 & C2 & C3
    C1 --> D["Similarity Check"]
    C2 --> D
    C3 --> D
    D --> E{"Duplicate?"}
    E -- No --> F1
    F1 --> F2

👐 Contributing

Thanks to everyone who has contributed!

<a href="https://github.com/orangecoding/fredy/graphs/contributors">{=html} <img src="https://contrib.rocks/image?repo=orangecoding/fredy" />{=html} </a>{=html}

See the Contributing Guide.


Star History

Star History
Chart

Languages
JavaScript 92.9%
Less 5%
Handlebars 1.5%
Shell 0.3%
Dockerfile 0.2%
Other 0.1%