Impf 🐍⚡ automation for the German


Impf 🐍 – Bot für Impftermine

Python Selenium

Entspahnt in den Sommer

Automatisierte Impftermin-Vermittlung des offiziellen ImpfterminService - Der Patientenservice 116117. Der Bot kann mehrere Standorte parallel durchsuchen und auf verfügbare Terminen überwachen. Dabei wird der gesamte Prozess von der Vermittlungscode-Beschaffung bis zur Reservierung und Benachrichtigung freier Termine ganzheitlich abgebildet.

Wenn ein freier Impftermin / Slot gefunden wird, sendet der Bot eine Benachrichtigung via Zulip (Telegram, Slack, ... sind einfach integrierbar) und macht den Benutzer via Sprachausgabe auf den Slot aufmerksam. So kann der SMS Bestätigungscode manuell oder von überall unterwegs via Lieblings-Chat App übermittelt werden - Impf erledigt den Rest. - detaillierter Workflow

Der Bot verwendet Browser-Automatisierung, die im Hintergrund laufen kann und es dem Benutzer ermöglicht manuell einzugreifen sowie einfach nachzuvollziehen, was gerade passiert. Die wichtigen Timings können dabei eingestellt werden, um einen Timeout (bzw. Shadow Ban) zu vermeiden.

This is an improved Python implementation of the Java-based 💉 🤖 Impf-Bot


Easy to set up
Python for the 21st Century
Full browser automation
Concurrent checking
Waiting room detection
Timeout / Shadow Ban 429 detection
Automatically re-check Vermittlungscode for single point of configuration
Zulip integration
Run custom Commands for Alerting (Text-to-Speech preconfigured)
Easy to add additional backends, like Telegram, Slack, Webhooks ...


This is a two-step process. First you'll need a Vermittlungscode to then book a vaccination appointment. Each center* has its own valid Vermittlungscode, which you'll need to acquire first to advance to the next step.

  1. If you do not have a Vermittlungscode for a center yet
    • The bot will check the site to see if there is vacancy
    • If there is vacancy, the bot will enter your age, email and phone number
    • The bot will alert you that there is vacancy using the alert backends
    • ImpfterminService will send you a SMS with a confirmation code
    • Either enter the code manually or send it to the bot using sms:123-456
    • The Vermittlungscode is sent to your email
    • Enter the Vermittlungscode on the center in and restart the bot 🚨
  2. If you have a Vermittlungscode for a center
    • The bot will enter your Vermittlungscode
    • It will check if there are available appointments
    • If there are appointments, it will alert you using your alert backend
    • You will have to manually choose the appointment for your best convenience
    • Alternatively use a remote access tool (I prefer AnyDesk, but TeamViewer also works) to access your machine remotely

* Every center is hosted on a server, indicated by the numbers in the URL, e.g. is server 001. Vermittlungscodes are valid for every center on the given server

Warning: The online booking isn't an authorization

On the booking date you still have to bring the documents with you, to proof that you are qualified to receive the vaccination. Check out the official guidelines and make sure you are qualified for them. This bot doesn't help you get a privilege. It only allows you to get a date without losing the nerves or waisting a lifetime in pointless callcenter calls.

Setup 👾


For Dummies

I don't know anything about programming! And CLI gives me anxiety

Don't worry. It's easy. Follow this Step-by-Step Guide and then come back.

For Techies

git clone
cd impf-botpy
pip3 install -r requirements.txt
# configure


  1. Rename to
  2. Edit the LOCATIONS by adding your Impfzentrum with the name as shown on ImpfterminService
  3. If you already have a Vermittlungscode for one of the centers, enter it at code - otherwise leave empty
  4. Enter your age, mail and phone number
  5. The rest of the settings is ok as is. If you want to check locations with multiple browsers at the same time, dig into the Advanced Features section.

Run it

  • python3 und entspahnen
  • python3 --alerts to test configured alerts

Support & Contributing

Feature Requests & Feedback

Too complex? Successfully booked an appointment?
Feedback and reasonable feature requests are always much appreciated and can be submitted here!

Adding Backends for Alerts

Contributions are welcome! Adding your favorite backend (e.g. Slack) for alerting is easy. Simply add your preferred integration to

  1. and integrate it with read_code() and send_alert()
  2. if your API is a bit more complex to keep things tidy
  3. add your relevant settings (must include ENABLED flag)
  4. in print_config for NextGen UX
  5. Pull Request & Done 💥

Auch ich wünschte, dass es so n Tool nicht geben müsste, aber ist aktuell einfach absolute Katastrophe. Seid vernünftig und missbraucht den Bot nicht, ja?

Buy me a Coffee

Ärzte ohne Grenzen

  • Instant code Generation No Response

    Instant code Generation No Response

    For some reasons, Im unable to generate a Code using the --code method. I guess the error is some kind of rate limiting.

    I get two kinds of errors: Either I get ratelimited, have to wait some time and then get this response:

    An error occurred requesting code from server; response [200]

    Or I am not forced to wait some time, but then I instantly get

    An error occurred requesting code from server; response [429]

    No matter, which error occurs, this is always the last line in the log:

    [INFO] <> {}

    So I dont seem to get any response at all.

    As a User-Agent, I used the default one and Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36

    I tried it with 2 different Phonenumbers and 3 different Emails, so I dont think its because of that. The locations I tried are 88444 Ummendorf, 88212 Ravensburg and 89073 Ulm

    I also tried to wait 30 Minutes after some tries and 3 different IPs, and also from my server, nothing worked.

    Also I tried it in Docker and natively on Windows, both time the same error

    2021-05-20 18:57:06,128 - [INFO] <>  89073: Navigating to ImpfterminService
    2021-05-20 18:57:08,545 - [INFO] <>  89073: Selected Bundesland: Baden-Württemberg           
    2021-05-20 18:57:08,760 - [INFO] <>  89073: Selected Impfzentrum: 89073 Ulm, Zentrales Impfzentrum Ulm
    2021-05-20 18:57:27,263 - [INFO] <>  API: Attempting to get Vermittlungscode from server              
    2021-05-20 18:57:30,719 - [ERROR] <>  API: An error occurred requesting code from server; status code [429]                                                                                                                   
    2021-05-20 18:57:30,720 - [INFO] <>  API: Response: {}

    Edit: I tried to put the steps done in the into a standalone script, and here I constistently get Statuscode 200, but no returned data

    good first issue 
    opened by Pfuenzle 40
  • Comprehensive Guide to Getting Appointments for Dummies

    Comprehensive Guide to Getting Appointments for Dummies

    Getting an Appointment 101

    The experience collected is only for BaWü, but should apply anywhere else too.

    GitHub stars


    Getting appointments is just a matter of the amount of Centers you're checking. As of writing this on June 8th, I've been getting 1-3 appointment offers a day, though I have gone without getting any appointments for 2-3 days too – it's just part of the process.

    If you're only checking one center over and over again, your chances of getting an appointment are significantly lower. Center capacities vary from their size and overall load – e.g. getting an appointment at Robert Bosch Krankenhaus is like catching an extremely rare Pokémon; I've only seen it give out appointments twice over the period of 4 weeks.

    When new appointments are added by a center, you're playing Roulette against everyone else currently checking the center for appointments,– so it's just a matter of improving your chances.

    Improving Your Chances

    aka Q: I have been searching for 2-85430 days 24/7, but didn't find anything yet! oh my god pls does this even work

    If you're only searching one center your chances of getting an appointment are obviously lower. It will definitely take some time due to the reasons mentioned initially.

    Improving your chances means turning on parallel searching. Setting CONCURRENT_ENABLED = True enables you to search multiple centers at the same time, thus increasing your chances immensely. Ideally, search with six instances / for six centers concurrently. But why six?

    As mentioned in the centers are assigned to specific servers, indicated by the number at the start of the URL. It's best to spread out and choose ONE center on each server to search on. Checking more on the same server doesn't yield any benefit afaik

    Just choose 4-6 centers on different servers, get Vermittlungscodes (see below), enter them in your and start searching. Depending on how many centers you have entered you should set your CONCURRENT_WORKERS to the same values as the centers you added – you might have to decrease it depending on how potent your PC is. And then just be patient; appointments will come.

    If your PC cannot handle multiple browsers at the same time at least do not jump around centers while searching. It's usually desirable to keep on checking the same center over and over again.

    This is the way I run my setup – it's just an old laptop that I turn on in the morning, and let run throughout the day – imo the smallest Vaccination Center in Stuttgart.

    Getting Vermittlungscodes

    Getting Vermittlungscodes via the Browser should be avoided at all costs.

    aka Q: I'm not getting any Vermittlungscodes! The instant Code Generation is broken! I tried so many times, never works

    As long as the Instant Vermittlungscode bullet point is not crossed out on the main page (, it still works. Simply try again in an hour, two, ten, or tomorrow. Just. Keep. On. Trying.

    It's unclear whether or not your cookies need a certain age before the server will accept your request; just something to keep in mind. That's why the --surf switch was added, but should also be a-ok to just let the bot run for 2-4 hours before.

    And while you're at it, as soon as you can generate one, generate a bunch! One for each of the six centers. One doesn't work? Doesn't matter. Just move on to the next one and try again later.


    Please note: All of this is based on my own experiences – your mileage may vary. A lot of things are unknown about the platform and simply assumptions based on trial-and-error and my previous technical experience. If anything is wrong, please feel free to discuss it, but understand that I cannot get back to each and every one individually. Especially non-elaborated questions, clearly showing a lack of having read this thoroughly or lack of self-initiative, will be ignored.

    • Do not use Docker primarily – searching for appointments works, but you have to help Docker instances to get to the appointment searching page manually
    • Do not use a Raspberry Pi – same as above
    • No new appointments are added on Sunday
    • Do not stress the Impfterminservice API. Lowering your waiting limits and then coming here to cry about your fate of not finding any appointments, giving other people questionable advice is not the spirit. Behave like a reasonable person.
    • Searching between 2400-0900 is usually not the game-changer. It's also unknown if searching excessively could flag your Vermittlungscode as being a bot – so better safe than sorry.
    • If you're not getting any appointments (highly doubt it if you followed this), then – hey, how about changing one of the centers? How about trying with a different Vermittlungscode? Or changing the user agent? Increasing the waiting times? etc etc
    • Simply try things. Ask for advice, but not after 5 seconds. Read this article again. This is the pinnacle of everything you need to know for getting an appointment.
    opened by alfonsrv 13
  • Geburtsdatum ungueltig oder in der Zukunft

    Geburtsdatum ungueltig oder in der Zukunft

    Describe the issue After the latest maintenance window on the impfterminservice server, when trying to obtain a code using /code, I get an error "Geburtsdatum ungueltig oder in der Zukunft". It looks like the api changed a little bit, since there is no option to actually enter a birth date.

    Versions latest

    Log files

    2021-06-03 21:12:26,461 - [INFO] API: Attempting to get Vermittlungscode from server 2021-06-03 21:12:26,701 - [WARNING] API: Endpoint returned Error: Geburtsdatum ungueltig oder in der Zukunft 2021-06-03 21:12:26,701 - [INFO] API: Cookies probably expired – raising AdvancedSessionCache 2021-06-03 21:12:26,702 - [WARNING] API: Underlying service layer indicating invalid session for <generate_vermittlungscode> – refreshing all cookies and retrying 2021-06-03 21:12:28,077 - [INFO] 76137: Navigating to ImpfterminService 2021-06-03 21:12:31,724 - [INFO] 76137: Selected Bundesland: Baden-Württemberg 2021-06-03 21:12:31,858 - [INFO] 76137: Selected Impfzentrum: 76137 Karlsruhe, Kreisimpfzentrum Schwarzwaldhalle Karlsruhe 2021-06-03 21:12:49,104 - [INFO] API: Attempting to get Vermittlungscode from server Traceback (most recent call last): File "C:\Users\Florian\impfung\impf-botpy\impf\", line 131, in func x = f(self, *args, **kwargs) File "C:\Users\Florian\impfung\impf-botpy\impf\", line 177, in generate_vermittlungscode r ='{}/rest/smspin/anforderung', json=data) File "C:\Users\Florian\impfung\impf-botpy\impf\", line 119, in api_response x = self._handle_error(response.status_code, response.json()) File "C:\Users\Florian\impfung\impf-botpy\impf\", line 59, in _handle_error raise AdvancedSessionCache(code, message) kunft'}


    opened by fgathercoupa 12
  • Raise Exception after failure to recover from shadow ban; fixes issue…

    Raise Exception after failure to recover from shadow ban; fixes issue…

    …s with continuing broken workflows

    This morning I had an issue that recovering from shadow ban failed and then the (now broken) workflow tried to continue resulting in a endless loop of failure. This change will go back to the main loop and just starts from anew.

    opened by lusor 10
  • Troubleshooting Python was not found

    Troubleshooting Python was not found

    Hello I have in cd line this error C:\Users\user>python3 main.pypip3 install -r requirements.txt --user Python was not found; run without arguments to install from the Microsoft Store, or disable this shortcut from Settings > Manage App Execution Aliases.

    I follow this instructions You did not install Python properly. Either reinstall, following the steps or delete the python.exe and python3.exe in %LocalAppData%\Microsoft\WindowsApps

    BUT I can't delete python.exe & python3.exe in %LocalAppData%\Microsoft\WindowsApps I add the windows message in attachement. fehler

    I running win10 as adminstrator I reinstall Python with the link provide in this page

    Any advise ?

    Thanks a lot

    opened by Nico78HD 7
  • ERROR bei  pip3 install -r requirements.txt --user

    ERROR bei pip3 install -r requirements.txt --user


    ich habe Probleme den Bot zum laufen zu bringen. Bisher habe ich mich an der Anleitung für Dummies entlanggehangelt. Bei der Eingabe des commands: 'pip3 install -r requirements.txt --user' kommt es jedoch zu einer Fehlermeldung:

    Fehler 1

    Habe zu Fehlerbehandlung folgendes probiert: -löschen der Zeilen cryptography + zulip im file requirements.txt -Python neu installieren mit den beschriebenen customized Einstellungen -Update wie in der Fehlermeldung empfohlen mit 'python.exe -m pip install --upgrade pip' :

    -installieren von 'pip install chardet' -hinzufügen des Pfads 'C:\Users---\AppData\Roaming\Python\Python39\Scripts' zu der Systemvariablen 'Path'

    Die jetzige Fehlermeldung bei der Eingabe von 'pip3 install -r requirements.txt --user' ist wie folgt:

    Fehler 3

    C:\Users---\Desktop\Impfbot\impf-botpy-main>pip3 install -r requirements.txt --user Collecting certifi==2020.12.5 Using cached certifi-2020.12.5-py2.py3-none-any.whl (147 kB) Collecting cffi==1.14.5 Using cached cffi-1.14.5-cp39-cp39-win_amd64.whl (179 kB) ERROR: Could not find a version that satisfies the requirement chardet==4.0.0´ (from versions: 1.0, 1.0.1, 1.1, 2.1.1, 2.2.1, 2.3.0, 3.0.0, 3.0.1, 3.0.2, 3.0.3, 3.0.4, 4.0.0) ERROR: No matching distribution found for chardet==4.0.0´

    Mein Rechner läuft mit Windows 10, die Version des Bots ist denk ich die neueste (habe ihn vor 2-3 h runtergeladen).

    Vielen Dank schonmal.


    opened by aschutt77 7
  • The State of Docker containers

    The State of Docker containers

    Been addressing it here and there, but wanted to centrally document the current state and issues when using Docker environments.

    The main issue being that the bot is reliably flagged by ImpfterminService when running in Docker containers. It's basically unusable from my experience, as it's stuck with getting 429s thrown at it. E.g. even after multiple hours it cannot enter the Vermittlungscode successfully – when reloading the page in the container and inputting it manually, it works first try. After that it can monitor for new appointments flawlessly – even though I haven't been able to get a successful alert from it yet.

    Maybe some mouse wiggles can fix it. I'm a bit torn apart tho. While I want to solve it on a technical level, I think Docker containers only benefit a very small margin of people and it's likely an abuse-factor anyways.

    opened by alfonsrv 7
  • Update Step 7 of selenium-install-instruction [Windows]

    Update Step 7 of selenium-install-instruction [Windows]

    Chromedriver can be placed in the same directory as the Unexperienced users will be more comfortable putting an unknow file somwhere in their downloads-folder instead of System32 or messing with %PATH%

    opened by Shirkanesi 6
  • Exception bei verfuegbarem Termin

    Exception bei verfuegbarem Termin


    beim Versuch, einen freien Impftermin ueber Telegram zu buchen, reagierte der Bot (Version 0.43b) mit einer Exception der Form:

    impf-botpy | 2021-05-28 20:53:44,382 - [INFO] Read APPOINTMENT_SLOT Code from Telegram: 2 impf-botpy | 2021-05-28 20:53:44,382 - [WARNING] xxxxx: Received Appointment indicator from backend: 2 - booking now... impf-botpy | 2021-05-28 20:53:44,383 - [INFO] API: Booking appointment for xxxxx impf-botpy | 2021-05-28 20:53:44,531 - [ERROR] xxxxx: Unexpected exception occurred trying to book appointments remotely! impf-botpy | Traceback (most recent call last): impf-botpy | File "/app/impf/", line 274, in alert_appointment impf-botpy | self.remote_booking() impf-botpy | File "/app/impf/", line 299, in remote_booking impf-botpy | if api.book_appointment(appointments, int(_code)): impf-botpy | File "/app/impf/", line 119, in func impf-botpy | x = f(self, *args, **kwargs) impf-botpy | File "/app/impf/", line 234, in book_appointment impf-botpy | r ='{}/rest/buchung', json=data) impf-botpy | File "/app/impf/", line 107, in api_response impf-botpy | x = self._handle_error(response.status_code, response.json()) impf-botpy | File "/app/impf/", line 54, in _handle_error impf-botpy | if 'Anfragelimit erreicht' in message.get('error'): impf-botpy | TypeError: argument of type 'NoneType' is not iterable impf-botpy | 2021-05-28 20:53:44,532 - [INFO] Sending alert "Appointment could not be booked – please continue manually!" impf-botpy | 2021-05-28 21:03:48,773 - [WARNING] xxxxx: Exiting...

    Davor gab es bereits eine Exception bei der Alarmierung:

    2021-05-28 20:52:27,941 - [ERROR] An unexpected exception occurred while reading alerts! Please report this issue to impf-botpy | Traceback (most recent call last): impf-botpy | File "/app/impf/", line 54, in read_backend impf-botpy | code = _read_backend(telegram_read, match_func) or code impf-botpy | File "/app/impf/", line 39, in _read_backend impf-botpy | code = backend_func(match_func) impf-botpy | File "/app/impf/", line 124, in telegram_read impf-botpy | if match_func(_message.get('text')) and time() - _message.get('date') <= 120: impf-botpy | File "/app/impf/", line 32, in appointment_slot impf-botpy | m = impf-botpy | AttributeError: 'NoneType' object has no attribute 'strip'

    Beim Versuch, den Termin dann manuell zu buchen, wurde er zwar noch angezeigt, konnte aber nicht mehr gebucht werden, obwohl die 10 Minuten noch nicht abgelaufen waren.

    Als Feedback.


    opened by hbitsch 6
  • Getting 429 all the time

    Getting 429 all the time

    Hi, first of all thanks for the program. I completed the setup and then ran the program and it's running for a while now. I realised that I'm getting 429- shadow bans all the time. Is there anything that I can do? Don't know if it's the right log file but here it is: bot.log

    opened by yagizcamo93 5
  • Switch to Chrome to avoid 429s

    Switch to Chrome to avoid 429s

    Switch to chrome-stable and make chromedriver dynamic to installed chrome-version. This solves shadow-bans for me on docker and should be future-proof, becuase the correct chrome-driver is evaluated by installed google-chrome.

    opened by mod242 5
  • Add vagrant

    Add vagrant

    I have noticed that the instructions for setting up all the dependencies are pretty lengthy. I am a big fan of Vagrant and have used it in many projects to ease the setup. Hope this would be useful for impf-botpy.

    opened by antrew 5
  • Feedback & Feature Requests

    Feedback & Feature Requests

    Feature Requests

    To avoid cluttering the issue tracker with feature requests, please comment any requests here and we'll keep a list.

    When available, I've linked a related issue or comment to add context to the request.

    Emoji Feedback Scale

    | Emoji | Feedback | |:----------:|-------------| | :rocket: | Successfully booked an appointment | | :tada: | Successfully booked two or more appointments |

    Helped you? Support this project!

    Buy me a Coffee

    opened by alfonsrv 101
Anki Cards for the HSK vocabulary Chinese-German

Anki-HanyuShuipingKaoshi Anki Cards for the HSK vocabulary Chinese-German Das Deck baut auf folgenden Quellen auf: China Endecken Wortschatz von wohok

null 1 Jan 7, 2022
Open source home automation that puts local control and privacy first

Home Assistant Open source home automation that puts local control and privacy first. Powered by a worldwide community of tinkerers and DIY enthusiast

Home Assistant 55k Sep 26, 2022
An application for automation of the mining function in the game Alienworlds.IO

alienautomation A Python script made to automate the tidious job of mining on AlienWorlds This script: Automatically opens the browser Automatically l

anonieXdev 41 Jun 18, 2022
Automation of VASP DFT workflows with ASE - application scripts

This repo contains a library that aims at automatizing some Density Functional Theory (DFT) workflows in VASP by using the ASE toolkit.

Frank Niessen 5 Sep 6, 2022
This project recreates the R-based RCy3 Cytoscape Automation library as a Python package.

Python library for calling Cytoscape Automation via CyREST

Cytoscape Consortium 34 Sep 12, 2022
External Network Pentest Automation using Shodan API and other tools.

Chopin External Network Pentest Automation using Shodan API and other tools. Workflow Input a file containing CIDR ranges. Converts CIDR ranges to ind

Aditya Dixit 9 Aug 4, 2022
A collection of daily usage utility scripts in python. Helps in automation of day to day repetitive tasks.

Kush's Utils Tool is my personal collection of scripts which is used to automated daily tasks. It is a evergrowing collection of scripts and will continue to evolve till the day I program. This is also my first python project.

Kushagra 10 Jan 16, 2022
Demo content - Automate your automation!

Automate-AAP2 Demo Content - Automate your automation! A fully automated Ansible Automation Platform. Context Installing and configuring Ansible Autom

null 0 Mar 10, 2022
Stori QA Automation Challenge

Stori-QA-Automation-Challenge This is the repository is created for the Stori QA Intern Automation Engineer Challenge! In this you can find the Requir

Daniel Castañeda 0 Feb 20, 2022
Mechanized literally means automation.

Mechanized literally means automation. And this branch which you are now observing is automated by the python script. This python project actually automates my workflow related to Git & Github.

Shreejan Dolai 4 Apr 10, 2022
Integration of CCURE access control system with automation HVAC of a commercial building

API-CCURE-Automation-Quantity-Floor Integration of CCURE access control system with automation HVAC of a commercial building CCURE is an access contro

Alexandre Edson Silva Pereira 1 Nov 24, 2021
python scripts - mostly automation scripts

python python scripts - mostly automation scripts You can set your environment in various ways bash #!/bin/bash python - locally on remote host #!/bi

Enyi 1 Jan 5, 2022
Automation in socks label validation

This is a project for socks card label validation where the socks card is validated comparing with the correct socks card whose coordinates are stored in the database. When the test socks card is compared with the correct socks card(master socks card) the software checks whether both test and master socks card matches or not.

null 1 Jan 19, 2022
Buildium-to-stessa - Automation to assist in converting Buildium transactions into Stessa format

Buildium Transactions -> Stessa Transactions There is currently no third-party i

Austin Comstock 4 Apr 17, 2022
Domoticz-hyundai-kia - Domoticz Hyundai-Kia plugin for Domoticz home automation system

Domoticz Hyundai-Kia plugin Author: Creasol For

Creasol 7 Aug 3, 2022
An end-to-end Python-based Infrastructure as Code framework for network automation and orchestration.

Nectl An end-to-end Python-based Infrastructure as Code framework for network automation and orchestration. Features Data modelling and validation. Da

Adam Kirchberger 13 Jul 12, 2022
Better Giveaways is a bot that will change the experience of using a giveaway bot forever.

Better-Giveaways Better Giveaways is a bot that will change the experience of using a giveaway bot forever. VoxelBotUtils/Novus, latest PyPi releases

Lightning 2 Jan 12, 2022
This bot uploads telegram files to,

What is about this bot ? This bot uploads telegram files to, Usage: Send any file, and the bot will upload it to, File.

Abhijith NT 3 Feb 26, 2022
A bot to use in a pump & dump event

A bot to use in a pump & dump event on Please note the bot is in heavy devleopment currently so be aware of errors. If you experience err

Freddie Jonas 185 Sep 21, 2022