{"id":34717934,"url":"https://github.com/second-hand-friends/kleinanzeigen-bot","last_synced_at":"2026-06-06T07:01:01.853Z","repository":{"id":37572081,"uuid":"445966190","full_name":"Second-Hand-Friends/kleinanzeigen-bot","owner":"Second-Hand-Friends","description":"Command-line bot to publish, update, delete, republish, download, and extend Kleinanzeigen listings via browser automation.","archived":false,"fork":false,"pushed_at":"2026-05-30T20:27:16.000Z","size":2908,"stargazers_count":400,"open_issues_count":2,"forks_count":77,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-05-30T22:21:17.068Z","etag":null,"topics":["command-line-tool","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Second-Hand-Friends.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2022-01-09T01:20:27.000Z","updated_at":"2026-05-30T20:30:53.000Z","dependencies_parsed_at":"2023-10-26T06:28:01.966Z","dependency_job_id":"378930f5-3ede-4a5d-8f0d-2112fb425282","html_url":"https://github.com/Second-Hand-Friends/kleinanzeigen-bot","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/Second-Hand-Friends/kleinanzeigen-bot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Second-Hand-Friends%2Fkleinanzeigen-bot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Second-Hand-Friends%2Fkleinanzeigen-bot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Second-Hand-Friends%2Fkleinanzeigen-bot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Second-Hand-Friends%2Fkleinanzeigen-bot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Second-Hand-Friends","download_url":"https://codeload.github.com/Second-Hand-Friends/kleinanzeigen-bot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Second-Hand-Friends%2Fkleinanzeigen-bot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33972398,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-06T02:00:07.033Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["command-line-tool","python"],"created_at":"2025-12-25T01:16:57.161Z","updated_at":"2026-06-06T07:01:01.846Z","avatar_url":"https://github.com/Second-Hand-Friends.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# kleinanzeigen-bot\n\n[![Build Status](https://github.com/Second-Hand-Friends/kleinanzeigen-bot/actions/workflows/build.yml/badge.svg)](https://github.com/Second-Hand-Friends/kleinanzeigen-bot/actions/workflows/build.yml)\n[![License](https://img.shields.io/github/license/Second-Hand-Friends/kleinanzeigen-bot.svg?color=blue)](LICENSE.txt)\n[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v3.0%20adopted-ff69b4.svg)](CODE_OF_CONDUCT.md)\n[![codecov](https://codecov.io/github/Second-Hand-Friends/kleinanzeigen-bot/graph/badge.svg?token=SKLDTVWHVK)](https://codecov.io/github/Second-Hand-Friends/kleinanzeigen-bot)\n\n\u003c!--[![Maintainability](https://qlty.sh/badges/69ff94b8-90e1-4096-91ed-3bcecf0b0597/maintainability.svg)](https://qlty.sh/gh/Second-Hand-Friends/projects/kleinanzeigen-bot)--\u003e\n\n**Feedback and high-quality pull requests are highly welcome!**\n\n1. [About](#about)\n1. [Installation](#installation)\n1. [Usage](#usage)\n1. [Configuration](#config)\n   1. [Main configuration](#main-config)\n   1. [Ad configuration](#ad-config)\n   1. [Using an existing browser window](#existing-browser)\n   1. [Browser Connection Issues](#browser-connection-issues)\n1. [Development Notes](#development)\n1. [Related Open-Source Projects](#related)\n1. [License](#license)\n\n## \u003ca name=\"about\"\u003e\u003c/a\u003eAbout\n\n**kleinanzeigen-bot** is a command-line application to **publish, update, delete, and republish listings** on kleinanzeigen.de.\n\n### Key Features\n\n- **Automated Publishing**: Publish new listings from YAML/JSON configuration files\n- **Smart Republishing**: Automatically republish listings at configurable intervals to keep them at the top of search results\n- **Bulk Management**: Update or delete multiple listings at once\n- **Download Listings**: Download existing listings from your profile to local configuration files\n- **Extend Listings**: Extend ads close to expiry to keep watchers/savers and preserve the monthly ad quota\n- **Browser Automation**: Uses Chromium-based browsers (Chrome, Edge, Chromium) for reliable automation\n- **Flexible Configuration**: Configure defaults once, override per listing as needed\n\n### ⚠️ Legal Disclaimer\n\nThe use of this program could violate the terms of service of kleinanzeigen.de applicable at the time of use.\nIt is your responsibility to ensure the legal compliance of its use.\nThe developers assume no liability for any damages or legal consequences.\nUse is at your own risk. Any unlawful use is strictly prohibited.\n\n### ⚠️ Rechtliche Hinweise\n\nDie Verwendung dieses Programms kann unter Umständen gegen die zum jeweiligen Zeitpunkt bei kleinanzeigen.de geltenden Nutzungsbedingungen verstoßen.\nEs liegt in Ihrer Verantwortung, die rechtliche Zulässigkeit der Nutzung dieses Programms zu prüfen.\nDie Entwickler übernehmen keinerlei Haftung für mögliche Schäden oder rechtliche Konsequenzen.\nDie Nutzung erfolgt auf eigenes Risiko. Jede rechtswidrige Verwendung ist untersagt.\n\n## \u003ca name=\"installation\"\u003e\u003c/a\u003eInstallation\n\n### Installation using pre-compiled exe\n\n1. The following components need to be installed:\n\n   1. [Chromium](https://www.chromium.org/getting-involved/download-chromium), [Google Chrome](https://www.google.com/chrome/),\n      or Chromium-based [Microsoft Edge](https://www.microsoft.com/edge) browser\n\n1. Open a command/terminal window\n\n1. Download and run the app by entering the following commands:\n\n   1. On Windows:\n\n      ```batch\n      curl -L https://github.com/Second-Hand-Friends/kleinanzeigen-bot/releases/download/latest/kleinanzeigen-bot-windows-amd64.exe -o kleinanzeigen-bot.exe\n\n      kleinanzeigen-bot --help\n      ```\n\n   1. On Linux/macOS:\n\n      ```shell\n      curl -L \"https://github.com/Second-Hand-Friends/kleinanzeigen-bot/releases/download/latest/kleinanzeigen-bot-$(uname -s | tr '[:upper:]' '[:lower:]')-$(uname -m | sed 's/x86_64/amd64/')\" -o kleinanzeigen-bot\n\n      chmod 755 kleinanzeigen-bot\n\n      ./kleinanzeigen-bot --help\n      ```\n\n### Installation using Docker\n\n1. The following components need to be installed:\n   1. [Docker](https://www.docker.com/)\n   1. [Bash](https://www.gnu.org/software/bash/) (on Windows e.g. via [Cygwin](https://www.cygwin.com/), [MSys2](https://www.msys2.org/) or git)\n   1. [X11 - X Window System](https://en.wikipedia.org/wiki/X_Window_System) display server (on Windows e.g. [Portable-X-Server](https://github.com/P-St/Portable-X-Server/releases/latest))\n\n**Running the docker image:**\n\n1. Ensure the X11 Server is running\n\n1. Run the docker image:\n\n   ```bash\n   X11_DISPLAY=192.168.50.34:0.0 # replace with IP address of workstation where X11 server is running\n\n   DATA_DIR=/var/opt/data/kleinanzeigen-bot # path to config\n\n   # /mnt/data is the container's default working directory\n   docker run --rm --interactive --tty \\\n     --shm-size=256m \\\n     -e DISPLAY=$X11_DISPLAY \\\n     -v $DATA_DIR:/mnt/data \\\n     ghcr.io/second-hand-friends/kleinanzeigen-bot:latest \\\n     --help\n   ```\n\n   Use `ghcr.io/second-hand-friends/kleinanzeigen-bot:preview` for the preview channel.\n\n### Installation from source\n\n1. The following components need to be installed:\n\n   1. [Chromium](https://www.chromium.org/getting-involved/download-chromium), [Google Chrome](https://www.google.com/chrome/),\n      or Chromium-based [Microsoft Edge](https://www.microsoft.com/edge) browser\n   1. [Python](https://www.python.org/) **3.10** or newer\n   1. [pip](https://pypi.org/project/pip/)\n   1. [git client](https://git-scm.com/downloads)\n\n1. Open a command/terminal window\n\n1. Clone the repo using\n\n   ```bash\n   git clone https://github.com/Second-Hand-Friends/kleinanzeigen-bot/\n   ```\n\n1. Change into the directory:\n\n   ```bash\n   cd kleinanzeigen-bot\n   ```\n\n1. Install the Python dependencies using:\n\n   ```bash\n   pip install pdm\n\n   pdm install\n   ```\n\n1. Run the app:\n\n   ```bash\n   pdm run app --help\n   ```\n\n### Installation from source using Docker\n\n1. The following components need to be installed:\n\n   1. [Docker](https://www.docker.com/)\n   1. [git client](https://git-scm.com/downloads)\n   1. [Bash](https://www.gnu.org/software/bash/) (on Windows e.g. via [Cygwin](https://www.cygwin.com/), [MSys2](https://www.msys2.org/) or git)\n   1. [X11 - X Window System](https://en.wikipedia.org/wiki/X_Window_System) display server (on Windows e.g. [Portable-X-Server](https://github.com/P-St/Portable-X-Server/releases/latest))\n\n1. Clone the repo using\n\n   ```bash\n   git clone https://github.com/Second-Hand-Friends/kleinanzeigen-bot/\n   ```\n\n1. Open the cloned directory in a Bash terminal window and navigate to the [docker](docker) subdirectory\n\n1. Execute `bash build-image.sh`\n\n1. Ensure the image is built:\n\n   ```text\n   $ docker image ls\n   REPOSITORY                            TAG      IMAGE ID       CREATED       SIZE\n   second-hand-friends/kleinanzeigen-bot latest   c31fd256eeea   1 minute ago  590MB\n   python                                3-slim   2052f0475488   5 days ago    123MB\n   ```\n\n**Running the docker image:**\n\n1. Ensure the X11 Server is running\n\n1. Run the docker image:\n\n   ```bash\n   X11_DISPLAY=192.168.50.34:0.0 # replace with IP address of workstation where X11 server is running\n\n   DATA_DIR=/var/opt/data/kleinanzeigen-bot # path to config\n\n   # /mnt/data is the container's default working directory\n   docker run --rm --interactive --tty \\\n     --shm-size=256m \\\n     -e DISPLAY=$X11_DISPLAY \\\n     -v $DATA_DIR:/mnt/data \\\n     second-hand-friends/kleinanzeigen-bot \\\n     --help\n   ```\n\n## \u003ca name=\"usage\"\u003e\u003c/a\u003eUsage\n\n```console\nUsage: kleinanzeigen-bot COMMAND [OPTIONS]\n\nCommands:\n  publish  - (re-)publishes ads\n  verify   - verifies the configuration files and previews automatic price reduction outcomes\n  delete   - deletes ads\n  update   - updates published ads\n  download - downloads one or multiple ads\n  extend   - extends active ads that expire soon (keeps watchers/savers and does not count towards the monthly ad quota)\n  update-check - checks for available updates\n  update-content-hash – recalculates each ad's content_hash based on the current ad_defaults;\n                      use this after changing config.yaml/ad_defaults to avoid every ad being marked \"changed\" and republished\n  create-config - creates a new default configuration file if one does not exist\n  diagnose - diagnoses browser connection issues and shows troubleshooting information\n  --\n  help     - displays this help (default command)\n  version  - displays the application version\n\nOptions:\n  --ads=all|due|new|changed|\u003cid(s)\u003e (publish) - specifies which ads to (re-)publish (DEFAULT: due)\n        Possible values:\n        * all: (re-)publish all ads ignoring republication_interval\n        * due: publish all new ads and republish ads according the republication_interval\n        * new: only publish new ads (i.e. ads that have no id in the config file)\n        * changed: only publish ads that have been modified since last publication\n        * \u003cid(s)\u003e: provide one or several ads by ID to (re-)publish, like e.g. \"--ads=1,2,3\" ignoring republication_interval\n        * Combinations: You can combine multiple selectors with commas, e.g. \"--ads=changed,due\" to publish both changed and due ads\n  --ads=all|new|\u003cid(s)\u003e (download) - specifies which ads to download (DEFAULT: new)\n        Possible values:\n        * all: downloads all ads from your profile\n        * new: downloads ads from your profile that are not locally saved yet\n        * \u003cid(s)\u003e: provide one or several ads by ID to download, like e.g. \"--ads=1,2,3\"\n  --ads=all|\u003cid(s)\u003e (extend) - specifies which ads to extend (DEFAULT: all)\n        Possible values:\n        * all: extend all eligible ads in your profile\n        * \u003cid(s)\u003e: provide one or several ads by ID to extend, like e.g. \"--ads=1,2,3\"\n        * Note: kleinanzeigen.de only allows extending ads within 8 days of expiry; ads outside this window are skipped.\n  --ads=changed|\u003cid(s)\u003e (update) - specifies which ads to update (DEFAULT: changed)\n        Possible values:\n        * changed: only update ads that have been modified since last publication\n        * \u003cid(s)\u003e: provide one or several ads by ID to update, like e.g. \"--ads=1,2,3\"\n  --force           - alias for '--ads=all'\n  --keep-old        - don't delete old ads on republication\n  --config=\u003cPATH\u003e   - path to the config YAML or JSON file (does not implicitly change workspace mode)\n  --workspace-mode=portable|xdg - overrides workspace mode for this run\n  --logfile=\u003cPATH\u003e  - path to the logfile (DEFAULT: depends on active workspace mode)\n  --lang=en|de      - display language (STANDARD: system language if supported, otherwise English)\n  -v, --verbose     - enables verbose output - only useful when troubleshooting issues\n```\n\n\u003e **Note:** The output of `kleinanzeigen-bot help` is always the most up-to-date reference for available commands and options.\n\nLimitation of `download`: It's only possible to extract the cheapest given shipping option.\n\n## \u003ca name=\"config\"\u003e\u003c/a\u003eConfiguration\n\nAll configuration files can be in YAML or JSON format.\n\n### Installation modes (portable vs. user directories)\n\nOn first run, the app may ask which installation mode to use. In non-interactive environments (CI/headless), it defaults to portable mode and will not prompt.\n\nPath resolution rules:\n\n- Runtime files are mode-dependent write locations (for example, logfile, update state, browser profile/cache, diagnostics, and downloaded ads).\n- `--config` selects only the config file; it does not silently switch workspace mode.\n- `--workspace-mode=portable`: runtime files are placed in the same directory as the active config file (or the current working directory if no `--config` is supplied).\n- `--workspace-mode=xdg`: runtime files use OS-standard user directories.\n- `--config` without `--workspace-mode`: mode is inferred from existing footprints; on ambiguity/unknown, the command fails with guidance (for example: `Could not infer workspace mode for --config ...`) and asks you to rerun with `--workspace-mode=portable` or `--workspace-mode=xdg`.\n\nExamples:\n\n- `kleinanzeigen-bot --config /sync/dropbox/config1.yaml verify` (no `--workspace-mode`): mode is inferred from detected footprints; if both portable and user-directories footprints are found (or none are found), the command fails and lists the found paths.\n- `kleinanzeigen-bot --workspace-mode=portable --config /sync/dropbox/config1.yaml verify`: runtime files are rooted at `/sync/dropbox/` (for example `/sync/dropbox/.temp/` and `/sync/dropbox/downloaded-ads/`).\n- `kleinanzeigen-bot --workspace-mode=xdg --config /sync/dropbox/config1.yaml verify`: config is read from `/sync/dropbox/config1.yaml`, while runtime files stay in user directories (on Linux: `~/.config/kleinanzeigen-bot/`, `~/.local/state/kleinanzeigen-bot/`, `~/.cache/kleinanzeigen-bot/`).\n\n1. **Portable mode (recommended for most users, especially on Windows):**\n\n   - Stores config, logs, downloads, and state in the current working directory\n   - No admin permissions required\n   - Easy backup/migration; works from USB drives\n\n1. **User directories mode (advanced users / multi-user setups):**\n\n   - Stores files in OS-standard locations\n   - Cleaner directory structure; better separation from working directory\n   - Requires proper permissions for user data directories\n\n**OS notes (brief):**\n\n- **Windows:** User directories mode uses AppData (Roaming/Local); portable keeps everything alongside the `.exe`.\n- **Linux:** User directories mode uses `~/.config/kleinanzeigen-bot/config.yaml`, `~/.local/state/kleinanzeigen-bot/`, and `~/.cache/kleinanzeigen-bot/`; portable uses `./config.yaml`, `./.temp/`, and `./downloaded-ads/`.\n- **macOS:** User directories mode uses `~/Library/Application Support/kleinanzeigen-bot/config.yaml` (config), `~/Library/Application Support/kleinanzeigen-bot/` (state/runtime), and `~/Library/Caches/kleinanzeigen-bot/` (cache/diagnostics); portable stays in the current working directory.\n\nIf you have footprints from both modes (portable + XDG), pass an explicit mode (for example `--workspace-mode=portable`) and then clean up unused files. See [Configuration: Installation Modes](docs/CONFIGURATION.md#installation-modes).\n\n### \u003ca name=\"main-config\"\u003e\u003c/a\u003e1) Main configuration ⚙️\n\nThe main configuration file (`config.yaml`) is **required** to run the bot. It contains your login credentials and controls all bot behavior.\n\n**Quick start:**\n\n```bash\n# Generate a config file with all defaults\nkleinanzeigen-bot create-config\n\n# Or specify a custom location\nkleinanzeigen-bot --config /path/to/config.yaml publish\n```\n\n**Minimal config.yaml:**\n\n```yaml\n# yaml-language-server: $schema=https://raw.githubusercontent.com/Second-Hand-Friends/kleinanzeigen-bot/main/schemas/config.schema.json\nlogin:\n  username: \"your_username\"\n  password: \"your_password\"\n```\n\nTo avoid storing credentials in the config file, use environment variable substitution:\n\n```yaml\nlogin:\n  username: \"${KLEINANZEIGEN_BOT_USERNAME}\"\n  password: \"${KLEINANZEIGEN_BOT_PASSWORD}\"\n```\n\n```bash\nexport KLEINANZEIGEN_BOT_USERNAME=your@email.com\nexport KLEINANZEIGEN_BOT_PASSWORD=your_password\n```\n\nPlain-text values in config.yaml are still fully supported.\n\n📖 **[Complete Configuration Reference →](docs/CONFIGURATION.md)**\n\nFull documentation including timeout tuning, browser settings, ad defaults, diagnostics, and all available options.\n\n### \u003ca name=\"ad-config\"\u003e\u003c/a\u003e2) Ad configuration 📝\n\nEach ad is defined in a separate YAML/JSON file. The `publish` workflow reads files matched by the `ad_files` glob pattern. The `download` workflow writes files into `download.dir` (default: the literal `downloaded-ads/` directory in the workspace root).\n\nIn XDG mode, the bare default `downloaded-ads/` stays in the workspace default download location. If you want a config-relative shared tree, set `download.dir` to `./downloaded-ads` and point `ad_files` at that tree, for example `./downloaded-ads/**/*.yaml`.\n\nDownloaded folder/file names are configured separately with `download.folder_name_template` and `download.ad_file_name_template`. For example: `ad_{id} {title}` or `{title} ({id})`.\n\nWhen an ad is published or republished and receives a new ID, the bot updates the `id` inside the existing local ad file; it does not rename local files or folders automatically.\n\n**Quick example (`ad_laptop.yaml`):**\n\n```yaml\n# yaml-language-server: $schema=https://raw.githubusercontent.com/Second-Hand-Friends/kleinanzeigen-bot/main/schemas/ad.schema.json\nactive: true\ntitle: \"Gaming Laptop - RTX 3060\"\ndescription: |\n  Powerful gaming laptop in excellent condition.\n  Includes original box and charger.\ncategory: \"Elektronik \u003e Notebooks\"\nprice: 450\nprice_type: NEGOTIABLE\nimages:\n  - \"laptop/*.jpg\"  # Relative to ad file location (or use absolute paths); glob patterns supported\n```\n\n📖 **[Complete Ad Configuration Reference →](docs/AD_CONFIGURATION.md)**\n\nFull documentation including automatic price reduction, shipping options, category IDs, and special attributes.\n\n### \u003ca name=\"existing-browser\"\u003e\u003c/a\u003e3) Using an existing browser window (Optional)\n\nBy default a new browser process will be launched. To reuse a manually launched browser window/process, you can enable remote debugging. This is useful for debugging or when you want to keep your browser session open.\n\nFor detailed instructions on setting up remote debugging with Chrome 136+ security requirements, see [Browser Troubleshooting - Using an Existing Browser Window](docs/BROWSER_TROUBLESHOOTING.md#using-an-existing-browser-window).\n\n### \u003ca name=\"browser-connection-issues\"\u003e\u003c/a\u003eBrowser Connection Issues\n\nIf you encounter browser connection problems, the bot includes a diagnostic command to help identify issues:\n\n**For binary users:**\n\n```bash\nkleinanzeigen-bot diagnose\n```\n\n**For source users:**\n\n```bash\npdm run app diagnose\n```\n\nThis command will check your browser setup and provide troubleshooting information. For detailed solutions to common browser connection issues, see the [Browser Connection Troubleshooting Guide](docs/BROWSER_TROUBLESHOOTING.md).\n\n## \u003ca name=\"development\"\u003e\u003c/a\u003eDevelopment Notes\n\n\u003e Please read [CONTRIBUTING.md](CONTRIBUTING.md) before contributing code. Thank you!\n\n## \u003ca name=\"related\"\u003e\u003c/a\u003eRelated Open-Source projects\n\n- [DanielWTE/ebay-kleinanzeigen-api](https://github.com/DanielWTE/ebay-kleinanzeigen-api) (Python) API interface to get random listings from kleinanzeigen.de\n- [f-rolf/ebaykleinanzeiger](https://github.com/f-rolf/ebaykleinanzeiger) (Python) Discord bot that watches search results\n- [r-unruh/kleinanzeigen-filter](https://github.com/r-unruh/kleinanzeigen-filter) (JavaScript) Chrome extension that filters out unwanted results from searches on kleinanzeigen.de\n- [simonsagstetter/Feinanzeigen](https://github.com/simonsagstetter/feinanzeigen) (JavaScript) Chrome extension that improves search on kleinanzeigen.de\n- [Superschnizel/Kleinanzeigen-Telegram-Bot](https://github.com/Superschnizel/Kleinanzeigen-Telegram-Bot) (Python) Telegram bot to scrape kleinanzeigen.de\n- [tillvogt/KleinanzeigenScraper](https://github.com/tillvogt/KleinanzeigenScraper) (Python) Webscraper which stores scraped info from kleinanzeigen.de in an SQL database\n- [TLINDEN/Kleingebäck](https://github.com/TLINDEN/kleingebaeck) (Go) kleinanzeigen.de Backup\n- [bkd3sign/kleinanzeigen-bot-ui](https://github.com/bkd3sign/kleinanzeigen-bot-ui) (TypeScript) A self-hosted web interface for kleinanzeigen-bot\n\n## \u003ca name=\"license\"\u003e\u003c/a\u003eLicense\n\nAll files in this repository are released under the [GNU Affero General Public License v3.0 or later](LICENSE.txt).\n\nIndividual files contain the following tag instead of the full license text:\n\n```text\nSPDX-License-Identifier: AGPL-3.0-or-later\n```\n\nThis enables machine processing of license information based on the SPDX License Identifiers that are available here: \u003chttps://spdx.org/licenses/\u003e.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsecond-hand-friends%2Fkleinanzeigen-bot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsecond-hand-friends%2Fkleinanzeigen-bot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsecond-hand-friends%2Fkleinanzeigen-bot/lists"}