{"adoption": {"forks": 214, "observed_at": "2026-08-28T04:04:44.931504+00:00", "stars": 1444}, "canonical_url": "https://ross.abutalabs.com/products/fredy", "card": {"archived": false, "artifact_type": "application", "description": "❤️ 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, eBay Kleinanzeigen and instantly delivers the results to you via Slack, Telegram, Email, Discord or ntfy, so you can focus on the more important things in life ;)", "domain": ["real-estate", "web-development", "self-hosted", "crawlers"], "enriched": true, "function": ["web-scraping", "search-engine", "self-hosted", "mcp", "chatbot"], "health_score": 100, "homepage": "https://fredy.orange-coding.net/", "language": "JavaScript", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["orangecoding/fredy"], "name": "orangecoding/fredy", "platform": ["self-hosted", "cross-platform"], "pushed_at": "2026-08-26T17:29:08+00:00", "repo": "orangecoding/fredy", "stars": 1444, "tags": ["real-estate-search", "apartment-hunting", "germany", "europe", "immoscout24", "kleinanzeigen", "telegram-notifications", "slack-notifications", "puppeteer", "web-ui", "deduplication", "affordability-calculator", "travel-time", "notification", "automation", "nodejs", "docker", "web-server"], "topics": ["fredy", "immowelt", "appartment", "appartments", "ebay-kleinanzeigen", "immobilienscout24", "immoscout24", "nodejs", "puppeteer", "real-estate", "self-hosted", "telegrambots", "web-scraping", "wg-gesucht", "wohnungssuche", "real-estate-search", "crawler", "immobilien"], "urls": [], "use_cases": ["find new apartments in Germany automatically", "get notified on Telegram when a flat is listed on ImmoScout24", "monitor WG-Gesucht and Kleinanzeigen for new shared flats", "deduplicate real estate listings across multiple portals", "check whether a rental listing fits my budget", "see commute time by public transport for each listing", "self-host an apartment search bot for Europe"], "what_it_is": "Fredy is a self-hosted Node.js application that continuously scrapes European real estate portals like ImmoScout24, Immowelt, Kleinanzeigen, and WG-Gesucht for new apartment and house listings. It deduplicates results across platforms and instantly delivers new hits via Slack, Telegram, Email, Discord, ntfy, and other channels, with a web UI for managing searches plus affordability and travel-time analysis.", "when_to_avoid": ["you need real estate search outside Europe or for portals Fredy does not cover", "you want a hosted, zero-setup service rather than running your own server or Docker container", "you need a full property management or CRM system rather than a listing alert tool", "scraping-based access may break if portals change their sites or block bots"], "when_to_choose": ["you are apartment or house hunting in Germany or Europe and want instant alerts instead of manually refreshing portals", "you want a self-hosted tool with a web UI, deduplication, and many notification channels", "you want extra context like affordability scoring and real travel times per listing", "you want to query your searches via an MCP server from Claude or ChatGPT"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/fredy", "repo": "orangecoding/fredy", "role": "main", "score": 95}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:44.931504+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:36:18.489658+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "43748fe33282b1d511792a70a39fcf9803f7e99b92ea288b5fb454f88c5b71a7", "fetched_at": "2026-08-28T04:04:44.931504+00:00", "kind": "readme", "missing": false, "url": "https://github.com/orangecoding/fredy"}, {"content_hash": "8b2741ce31b66ee09cc32124c58b7b3f375faa698713dbd72f6566acc8c92418", "fetched_at": "2026-08-29T11:46:40.036959+00:00", "kind": "homepage", "missing": false, "url": "https://fredy.orange-coding.net/"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:44.931504+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:36:18.489658+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "43748fe33282b1d511792a70a39fcf9803f7e99b92ea288b5fb454f88c5b71a7", "fetched_at": "2026-08-28T04:04:44.931504+00:00", "kind": "readme", "missing": false, "url": "https://github.com/orangecoding/fredy"}, {"content_hash": "8b2741ce31b66ee09cc32124c58b7b3f375faa698713dbd72f6566acc8c92418", "fetched_at": "2026-08-29T11:46:40.036959+00:00", "kind": "homepage", "missing": false, "url": "https://fredy.orange-coding.net/"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:36:18.489658+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "43748fe33282b1d511792a70a39fcf9803f7e99b92ea288b5fb454f88c5b71a7", "fetched_at": "2026-08-28T04:04:44.931504+00:00", "kind": "readme", "missing": false, "url": "https://github.com/orangecoding/fredy"}, {"content_hash": "8b2741ce31b66ee09cc32124c58b7b3f375faa698713dbd72f6566acc8c92418", "fetched_at": "2026-08-29T11:46:40.036959+00:00", "kind": "homepage", "missing": false, "url": "https://fredy.orange-coding.net/"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:04:44.931504+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:44.931504+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:44.931504+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:36:18.489658+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "43748fe33282b1d511792a70a39fcf9803f7e99b92ea288b5fb454f88c5b71a7", "fetched_at": "2026-08-28T04:04:44.931504+00:00", "kind": "readme", "missing": false, "url": "https://github.com/orangecoding/fredy"}, {"content_hash": "8b2741ce31b66ee09cc32124c58b7b3f375faa698713dbd72f6566acc8c92418", "fetched_at": "2026-08-29T11:46:40.036959+00:00", "kind": "homepage", "missing": false, "url": "https://fredy.orange-coding.net/"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:44.931504+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:44.931504+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:36:18.489658+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "43748fe33282b1d511792a70a39fcf9803f7e99b92ea288b5fb454f88c5b71a7", "fetched_at": "2026-08-28T04:04:44.931504+00:00", "kind": "readme", "missing": false, "url": "https://github.com/orangecoding/fredy"}, {"content_hash": "8b2741ce31b66ee09cc32124c58b7b3f375faa698713dbd72f6566acc8c92418", "fetched_at": "2026-08-29T11:46:40.036959+00:00", "kind": "homepage", "missing": false, "url": "https://fredy.orange-coding.net/"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:44.931504+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:44.931504+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:44.931504+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:36:18.489658+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "43748fe33282b1d511792a70a39fcf9803f7e99b92ea288b5fb454f88c5b71a7", "fetched_at": "2026-08-28T04:04:44.931504+00:00", "kind": "readme", "missing": false, "url": "https://github.com/orangecoding/fredy"}, {"content_hash": "8b2741ce31b66ee09cc32124c58b7b3f375faa698713dbd72f6566acc8c92418", "fetched_at": "2026-08-29T11:46:40.036959+00:00", "kind": "homepage", "missing": false, "url": "https://fredy.orange-coding.net/"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:44.931504+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:44.931504+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:36:18.489658+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "43748fe33282b1d511792a70a39fcf9803f7e99b92ea288b5fb454f88c5b71a7", "fetched_at": "2026-08-28T04:04:44.931504+00:00", "kind": "readme", "missing": false, "url": "https://github.com/orangecoding/fredy"}, {"content_hash": "8b2741ce31b66ee09cc32124c58b7b3f375faa698713dbd72f6566acc8c92418", "fetched_at": "2026-08-29T11:46:40.036959+00:00", "kind": "homepage", "missing": false, "url": "https://fredy.orange-coding.net/"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:36:18.489658+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "43748fe33282b1d511792a70a39fcf9803f7e99b92ea288b5fb454f88c5b71a7", "fetched_at": "2026-08-28T04:04:44.931504+00:00", "kind": "readme", "missing": false, "url": "https://github.com/orangecoding/fredy"}, {"content_hash": "8b2741ce31b66ee09cc32124c58b7b3f375faa698713dbd72f6566acc8c92418", "fetched_at": "2026-08-29T11:46:40.036959+00:00", "kind": "homepage", "missing": false, "url": "https://fredy.orange-coding.net/"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:36:18.489658+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "43748fe33282b1d511792a70a39fcf9803f7e99b92ea288b5fb454f88c5b71a7", "fetched_at": "2026-08-28T04:04:44.931504+00:00", "kind": "readme", "missing": false, "url": "https://github.com/orangecoding/fredy"}, {"content_hash": "8b2741ce31b66ee09cc32124c58b7b3f375faa698713dbd72f6566acc8c92418", "fetched_at": "2026-08-29T11:46:40.036959+00:00", "kind": "homepage", "missing": false, "url": "https://fredy.orange-coding.net/"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:36:18.489658+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "43748fe33282b1d511792a70a39fcf9803f7e99b92ea288b5fb454f88c5b71a7", "fetched_at": "2026-08-28T04:04:44.931504+00:00", "kind": "readme", "missing": false, "url": "https://github.com/orangecoding/fredy"}, {"content_hash": "8b2741ce31b66ee09cc32124c58b7b3f375faa698713dbd72f6566acc8c92418", "fetched_at": "2026-08-29T11:46:40.036959+00:00", "kind": "homepage", "missing": false, "url": "https://fredy.orange-coding.net/"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 87}, "computed_at": "2026-09-03T02:39:23.370411+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3152, "days_push": 7, "days_rel": 7, "gap_med": 1.0, "n_releases_24m": 201}, "score": 95, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}