fredy is a free, open source data extraction & web scraping project written in JavaScript and released under Apache-2.0. It has 1,611 GitHub stars, 259 forks and 0 open issues, and was last pushed 15 hours ago. On this registry it ranks #91 of 149 tracked projects in Data Extraction & Web Scraping, with 5 head-to-head comparisons available. It gained 57 stars over the last 30 tracked days.

What is fredy?

Fredy is a self-hosted real estate finder for Europe that watches 24 property portals, removes duplicate listings across platforms, and pushes each new apartment or house to Slack, Telegram, email, ntfy or Discord, built for anyone hunting a place to live in Germany, Austria, Switzerland, Spain, Italy or Portugal.

What it is

Fredy is a JavaScript application, published under the Apache-2.0 licence, that runs as a long-lived service and continuously searches real estate portals on the user's behalf. It lives in the Node.js ecosystem, crawling with Puppeteer under the hood, and it can be deployed either as a container or straight from source with Node.js 22.22.0 or higher. A Web UI on port 9998 is where searches are defined and where found listings, a maps view and a dashboard are reviewed.

The concrete problem it solves is the repeated manual loop of opening ImmoScout24, Immowelt, Kleinanzeigen and their peers, re-running the same filters, and reading the same flat three times because every portal writes a headline differently. Fredy replaces that routine with configured searches that run continuously, with cross-platform deduplication matched on living space, rooms and location rather than on the headline, and with a notification the moment a new listing appears. It answers three further questions a portal does not: what a listing would cost given entered income, living costs and savings, how long the real journey from the user's own address would take, and whether a listing carries the marks of a rental scam.

Key capabilities

  • Crawls 24 portals across Germany, Austria, Switzerland, Spain, Italy and Portugal, including ImmoScout24, Immowelt, Kleinanzeigen, WG-Gesucht, willhaben, Flatfox, idealista and Subito.
  • Sends instant notifications through Slack, Telegram, Email (SMTP, SendGrid, Mailjet, Resend), ntfy, Discord, Mattermost, Pushover and Apprise.
  • Deduplicates listings across platforms by living space, rooms and location, so the same flat advertised on ImmoScout, Immowelt and Kleinanzeigen arrives once.
  • Flags listings that read like rental fraud, with the user's own verdict always outranking Fredy's warning.
  • Calculates affordability for renting and for buying from entered income, living costs and savings.
  • Computes real travel times from the user's addresses by public transport, car, bike or on foot, with a filter to match, plus live departures from the transport network.
  • Manages searches and reviews results in a Web UI, including a Fredy Maps view, a dashboard and a found-listings view.

Who uses it and how

  • Self-hosters running the container with a fredy_conf:/conf volume and a fredy_db:/db volume, where uploaded documents live inside the database and every backup already contains them.
  • Unraid users installing it from the Unraid community store.
  • Homelab operators on linux/amd64 or linux/arm64 hosts, since images are built for both architectures.
  • Node.js users who build the Web UI with yarn run build:frontend and serve the UI and API with yarn run start:backend.
  • Movers who set several addresses and filter listings by travel time rather than straight-line distance.

Getting started

The recommended route is Docker: docker run -d --name fredy -v fredy_conf:/conf -v fredy_db:/db -p 9998:9998 ghcr.io/orangecoding/fredy:master, then sign in at the Web UI with admin / admin. No configuration file is needed, because Fredy creates /conf/config.json on first run if it is missing.

How it compares

The facts provided name no paid products that Fredy replaces, and they name no comparable self-hosted alternatives either, so on the evidence available it stands alone in this registry. It is a self-hosted Apache-2.0 project rather than a hosted service, and its data ownership model is complete: listings, configuration and uploaded documents stay in the user's own volumes.

When to use it — and when not to

Fredy suits anyone willing to operate a Node.js 22.22.0+ service or a container, and who wants their search data, documents and configuration to stay on their own hardware. Anyone who does not want to run and maintain a host, or who needs a vendor-managed offering, should not pick it. Two practical cautions: the default admin / admin sign-in must be changed immediately, and the :master tag follows the master branch, so a version tag such as ghcr.io/orangecoding/fredy:28.0.0 should be pinned for an instance you rely on; the develop-based pre-release image is for trying upcoming features or verifying a fix, not for production.

project readme (upstream, from github) — read inline

Fredy

Website  |   Demo  |   Quick Start  |   Docs

Tests Docker Source Docker Pulls

Fredy 🏡 - Your Self-Hosted Real Estate Finder for Europe

Fredy watches 24 real estate portals across 🇩🇪 🇦🇹 🇨🇭 🇪🇸 🇮🇹 🇵🇹 for you (e.g. Immoscout, Kleinanzeigen etc), drops duplicates across platforms, and notifies you via Slack, Telegram, Email, ntfy, Discord and more the moment a new listing appears. Searches are managed from a Web UI, and you never see the same listing twice.

On top of the listing itself, Fredy answers the three questions a portal will not:

  • What would this cost me? Enter your income, living costs and savings once, and every listing is measured against them, for renting and for buying. → Financing
  • How long would I actually travel? Not straight-line distance, but the real journey from your own address by public transport, car, bike or on foot. → Travel time
  • Is this too good to be true? Fredy reads every listing for the marks of a rental scam and warns you when enough of them line up. → Scam detection

orangecoding%2Ffredy | Trendshift

Fredy Maps View Dashboard Found Listings
Screenshot showing Fredy Screenshot showing job configuration in Fredy Screenshot showing found listings in Fredy

🚀 Quick Start

Docker (recommended)

docker run -d --name fredy \
  -v fredy_conf:/conf \
  -v fredy_db:/db \
  -p 9998:9998 \
  ghcr.io/orangecoding/fredy:master

👉 Open and sign in with admin / admin.

[!NOTE] No configuration file is needed to start. Fredy creates /conf/config.json on first run if it is missing. That file only holds the database path, everything else is configured in the Web UI and stored in the database. Documents you upload live in the database too, so the /db volume above is all you need to keep them, and every backup already contains them.

:master follows the master branch; pin a release with its version tag instead, e.g. ghcr.io/orangecoding/fredy:28.0.0. Images are built for linux/amd64 and linux/arm64. Logs: docker logs fredy -f.

There is also a pre-release channel following the develop branch, ghcr.io/orangecoding/fredy-pre-release:latest. It is built from the same pipeline (lint, format check and the offline test suite all have to pass first), but the changes in it have not been through master yet. Use it to try upcoming features or to verify a fix, not for an instance you rely on.

Node.js

Requires Node.js 22.22.0 or higher.

yarn
yarn run build:frontend  # builds the Web UI into ui/public
yarn run start:backend   # serves the UI and the API on port 9998

Unraid

Fredy is in the Unraid community store.


✨ What you get

  • 🏠 24 portals across 🇩🇪 🇦🇹 🇨🇭 🇪🇸 🇮🇹 🇵🇹: ImmoScout24, Immowelt, Kleinanzeigen, WG-Gesucht, willhaben, Flatfox, idealista, Subito and 16 more
  • ⚡ Instant notifications: Slack, Telegram, Email (SMTP, SendGrid, Mailjet, Resend), ntfy, Discord, Mattermost, Pushover, Apprise and more
  • 🔄 Deduplication across platforms: the same flat advertised on ImmoScout, Immowelt and Kleinanzeigen reaches you once, matched on living space, rooms and location rather than on the headline, no two portals write that the same way
  • 🛑 Scam detection: a warning on listings that read like rental fraud, with your verdict always outranking Fredy's
  • 💶 Financing calculator: which listings you can afford, for renting and for buying
  • 🚆 Real travel times from your addresses by public transport, car, bike or on foot, plus a filter to match, and the transport network with live departures on the map
  • 📊 Market benchmark: the price per m² of every listing against the local median, so cheap and expensive are facts rather than a feeling
  • 📎 Document uploads: attach the exposé, floor plans and photos to a listing, so they survive the portal taking the ad down. A listing with documents is never cleaned up automatically
  • 🖥️ Web UI in several languages, with configurable search intervals and working hours
  • 🤖 MCP server: query your listings from Claude, ChatGPT or a local LLM
  • 🌍 Runs anywhere: Docker, Node.js, self-hosted, and uses the reverse engineered ImmoScout Mobile API

🧩 Basic architecture overview

Concept What it is
Provider 🌐 A real-estate platform. You paste a search URL from the portal into Fredy, sorted by date.
Adapter 📡 A kind of connection Fredy can send through (Slack, Telegram, Email, ntfy, Discord ...). You never configure one on its own.
Channel 🔔 One filled-in adapter, e.g. "Telegram → family chat", saved once under Settings → Notification channels and reused in as many jobs as you like.
Job 📅 Providers + channels: "search ImmoScout24 and Immowelt, send to Slack and Telegram". Runs at the interval set under Administration → Execution.

A job can hold as many channels as you want, including several of the same type, and every new listing goes out through all of them at once. Rotating a token means editing one channel instead of every job that used it. Channels belong to whoever created them; an admin can share one with all users or with admins only, which lets others send through it without ever revealing its credentials. A channel still used by a job cannot be deleted.

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 NotificationChannels["Notification Channels"]
        F1["Channel 1"]
        F2["Channel 2"]
  end

    A1 --> B["FredyPipelineExecutioner"]
    A2 --> B
    A3 --> B
    B --> C1 & C2 & C3
    C1 --> D["Similarity Check"]
    C2 --> D
    C3 --> D
    D --> E{"Duplicate?"}
    E -- No --> G["Enrich: market price, scam signals, travel time"]
    G --> F1 & F2

📚 Going deeper

Topic What is in there
Providers & scraping All 24 providers, the Immoscout / idealista / Casa.it specifics, and residential proxies for when a VPS gets blocked
Scam detection The signals, their weights, the languages, and how to overrule Fredy
Financing calculator Rent and Annuitätendarlehen, Kaufnebenkosten, Restschuld, the 35 % rule
Travel time & public transport Addresses and place types, estimated vs exact, route drawing, departure boards, operator settings
MCP server Connecting Claude, ChatGPT or a local LLM to your listings
Reverse proxy sign-in Forward auth with Authelia, Authentik, oauth2-proxy, Traefik, Pangolin
Debug bundles Capturing logs for a bug report
Development Dev mode, tests, fixtures, adding a language
Contributing Writing a provider or a notification adapter

🤖 MCP Server

Since V20, Fredy ships a built-in MCP Server, so you can connect it to Claude, ChatGPT or a local model (LM Studio) and query your real estate data in natural language. A local LLM can even enrich existing listings by checking them online. Setup: MCP Readme.

To connect Claude.ai or ChatGPT over OAuth, set Fredy's baseUrl to its public HTTPS URL and add /api/mcp as a custom MCP server. Fredy advertises OAuth discovery metadata, dynamically registers the client, and asks you to sign in and approve read access. Access tokens expire after one hour and refresh automatically; existing MCP tokens keep working for local clients. Connected apps are listed under Settings → Connections, where access can be revoked at any time.


📊 Analytics

Fredy is completely free (and will always remain free). However, it would be a huge help if you would allow me to collect some analytical data. Before you freak out, let me explain: if you agree, Fredy sends a ping every 6 hours to my internal tracking project (will be open sourced soon). The data includes which notification adapters and providers are in use (the type only, for example slack, never your channels, their names or their credentials), OS, architecture, Node version and language. It is entirely anonymous and helps me understand which adapters and providers matter most.

Thanks 🤘


🤝 Sponsorship

I build and maintain Fredy in my free time. If it saves you some, consider chipping in ❤️

Support me on Ko-fi Sponsor on GitHub

Fredy is backed by the JetBrains Open Source Support Program.

JetBrains Open Source Support Program

👐 Contributing

Thanks to everyone who has contributed!

Start with the Contributing Guide; it also covers where AI-assisted contributions help, and where they do not.


🗺️ Data Attribution & Partners

Timetables, journey planning and travel times come from Transitous, a community-run MOTIS instance. It is free, needs no API key, and is maintained by volunteers, so please be considerate with the load you put on it and read their usage policy before pointing a large instance at it. Street and map data come from OpenStreetMap contributors.

Every listing with coordinates links out to Lagecheck, which rates the address on noise, air quality, green space and flood risk. Fredy only builds the link and stores nothing from it; the underlying data is by geosci.de.

Transitous

📄 License

Apache-2.0 with two additional conditions:

  • Commons Clause - you may not sell the software, or sell a product or service whose value derives entirely or substantially from it. Self-hosting Fredy for yourself is explicitly fine.
  • Attribution and Naming Clause - substantial derivative works must credit the original project "Fredy" and its author.

Because of these conditions Fredy is source-available, not OSI open source. Read the full LICENSE before building anything commercial on top of it.


💬 Support

  • Bugs and feature requests: GitHub Issues. For bugs, attach a debug bundle.
  • An Immoscout search URL Fredy cannot map: open an issue with the URL, it is usually a one line fix.
  • Try before you install: the live demo.

⭐ Star History

Frequently asked questions

Is fredy free to use?

fredy is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does fredy do?

❤️ Fredy - [F]ind [R]eal [E]state [D]amn Eas[y] - Fredy keeps searching for new apartments, houses, and flats in Europe on platforms like ImmoScout24, Immowelt,

What is fredy written in?

fredy is primarily written in JavaScript. Its source is publicly available at https://github.com/orangecoding/fredy, and it has 1,611 GitHub stars.