Privacyverklaring
Laatst bijgewerkt: 4 oktober 2026
Deze privacyverklaring beschrijft welke gegevens ScootKoers verwerkt, waarom, op welke grondslag en hoe lang. Ze geldt voor de ScootKoers-app (Android, iOS en de webversie) en is van toepassing op iedereen die de app gebruikt.
Verwerkingsverantwoordelijke
SvenSite
E-mail: [email protected]
KvK-nummer: 83853049
BTW-id: NL003881492B31
Locatie
De app vraagt alleen tijdens gebruik toegang tot je precieze locatie, om je positie te tonen, een route te berekenen en actieve navigatie mogelijk te maken. De app vraagt geen achtergrondlocatie. Tijdens een actieve rit verwerkt de app gefilterde GPS-punten in het geheugen om navigatie, afwijkingen en aankomst te herkennen. Grondslag: uitvoering van de dienst waar je om vraagt.
Routeberekening en externe kaartdiensten
Om een route te berekenen worden start- en bestemmingscoördinaten via een beveiligde verbinding naar de routeringsdienst gestuurd. Voor zoeken, kaartweergave en extra routecontrole gebruikt de app daarnaast OpenStreetMap-gerelateerde diensten: Valhalla voor routering, Photon (een eigen zoekserver van ScootKoers, met als terugval de publieke Photon van Komoot) en Nominatim voor zoeken naar adressen, PDOK van het Kadaster voor de kaart en luchtfoto's binnen Nederland, MapTiler voor de kaart en luchtfoto's daarbuiten, en de Overpass API voor aanvullende wegcontrole. Deze diensten ontvangen technisch noodzakelijke gegevens zoals je IP-adres en, afhankelijk van de functie, zoektekst, kaartgebied of coördinaten. Bij het zoeken gaat je zoektekst, en als voorkeur voor resultaten in de buurt ook je ongeveer huidige locatie, naar de zoekserver. De eigen zoekserver draait op een computer van ScootKoers en is bereikbaar via Cloudflare; die bewaart geen zoektekst en logt die nooit. Voor de publieke Photon van Komoot en voor Nominatim gelden hun eigen voorwaarden. Hun eigen bewaartermijnen en privacyvoorwaarden zijn van toepassing. Grondslag: uitvoering van de dienst waar je om vraagt.
Lokale opslag
Favorieten, recente bestemmingen, instellingen, een hervatbare actieve rit en routeprobleemmeldingen worden lokaal op je apparaat opgeslagen. Wanneer een voltooide afwijkende rit aantoonbaar sneller was, bewaart de app lokaal maximaal drie tussenpunten, begin en bestemming en de gemeten reistijd, zodat hetzelfde apparaat die route bij een volgende rit opnieuw kan herkennen. Lokale geleerde routes vervallen na maximaal 180 dagen.
De Android-app sluit deze lokale gegevens uit van Android-cloudback-ups en apparaatmigratie; de gegevens blijven binnen de app-sandbox op het apparaat. De webversie gebruikt de afgeschermde site-opslag van de browser; iedereen met toegang tot het ontgrendelde apparaat of browserprofiel kan die lokale gegevens mogelijk benaderen.
Voor betere aankomsttijden bewaart de app daarnaast lokaal een grove corridorcode, spits- of dalcategorie en maximaal twintig recente bruikbare reistijden per categorie. Slechte GPS, lange pauzes, grote afwijkingen en statistische uitschieters worden geweigerd. Pas vanaf drie passende ritten wordt de lokale ETA aangepast. Er worden maximaal veertig corridormodellen bewaard; waarnemingen vervallen na maximaal 365 dagen en verdwijnen direct via Lokale appgegevens wissen in de instellingen.
Als je ScootKoers als app hebt geïnstalleerd, worden kaarttegels die je online al bekijkt daarna een tijdje offline bewaard (maximaal 3.000 tegels, oudste eerst verwijderd), zodat een eerder bekeken gebied ook zonder internet nog zichtbaar blijft. Er worden nooit tegels van een gebied opgehaald dat je niet zelf hebt bekeken; dit is dus geen download van een groter gebied. Verwijderen kan via Offline kaart wissen in de instellingen.
Ritten delen voor route-verbetering
De instelling Deel ritten automatisch voor route-verbetering staat standaard aan; je ziet 'm direct bij de eerste keer opstarten en kunt 'm daar of later altijd uitzetten via Instellingen. Staat de instelling uit, dan wordt er niets van het onderstaande verstuurd en verzamelt de app sowieso alleen locatie tijdens een actief genavigeerde rit.
Na elke rit die je actief hebt genavigeerd, stuurt de app een met SHA-256 gemaakte corridorcode, spits/dal, reistijd, afstand en technische kwaliteitswaarden voor het gezamenlijke statistische reistijdmodel (zie hieronder). Dit gebeurt uitsluitend direct na een zojuist afgeronde, actief genavigeerde rit. De verwerking is volledig deterministisch: er wordt geen data naar een AI-aanbieder of een derde land buiten de EU gestuurd. Grondslag: gerechtvaardigd belang bij het verbeteren van reistijdvoorspellingen, met een anonieme, sterk afgeronde dataset en een altijd beschikbare opt-out.
Wanneer een rit ook aantoonbaar een snellere afwijkende route heeft opgeleverd, kan onder dezelfde instelling apart een routekandidaat worden gedeeld (zie hieronder). Een wekelijkse, eveneens volledig deterministische taak clustert de zo verzamelde routekandidaten van meerdere onafhankelijke rijders op dezelfde plek en genereert daar een korte samenvatting van (aantal bijdragers, gemiddelde locatie) voor handmatige review. Suggesties hieruit worden nooit automatisch op je route toegepast: ze doorlopen eerst dezelfde wettelijke routecontrole als een handmatig gedeelde routekandidaat, voordat ze ooit als routecorrectie kunnen worden gebruikt.
Gezamenlijk statistisch reistijdmodel
Voor dit deel ontvangt de server geen start- of bestemmingscoördinaten, adres, volledig GPS-spoor, account, naam of e-mailadres — alleen de hierboven genoemde corridorcode en cijfers. Dit deel traint geen AI- of taalmodel, alleen een statistisch praktijkmodel.
Een gezamenlijke ETA wordt pas getoond vanaf minimaal vijf geaccepteerde ritten van minimaal drie afzonderlijke deelnemers. Ritmedians per deelnemer, uitschieterfilters en een maximumaantal bijdragen per deelnemer voorkomen dat één veelrijder het model domineert. Spits en dal blijven apart. De wettelijke routecontrole en blokkade van verboden wegen gaan altijd vóór een eventuele tijdwinst. Praktijktijden vervallen na maximaal 365 dagen.
Een gedeelde routekandidaat rondt begin en einde af tot een raster van ongeveer één kilometer. Alleen maximaal drie noodzakelijke tussenpunten worden op ongeveer tien meter afgerond meegestuurd; er wordt geen GPS-deelspoor, snelheid per punt of tijdlijn naar de server gestuurd. Een routekandidaat wordt eerst op kaartregels gecontroleerd en vervalt na maximaal 90 dagen.
Je kunt delen op ieder moment uitzetten; dit voorkomt nieuwe uploads. Omdat er bewust geen account of blijvende apparaatcode wordt opgeslagen, kan een eerder gedeelde praktijktijd niet betrouwbaar aan jou worden teruggekoppeld om afzonderlijk te verwijderen; ze wordt automatisch opgeschoond en alleen in een groepsmodel uitgelezen.
Bij het opvragen van een groeps-ETA stuurt de app alleen de ondoorzichtige corridorcode en spits/dalcategorie. Cloudflare verwerkt daarbij technisch het IP-adres; ScootKoers bewaart het ruwe IP-adres niet. Een maandelijks wisselende HMAC-code telt het aantal onafhankelijke bijdragers en begrenst misbruik.
Beveiliging van de database
De centrale database is alleen vanuit de serverfunctie bereikbaar via een Cloudflare-binding en staat niet rechtstreeks open op internet. Cloudflare D1 versleutelt databaseobjecten met AES-256-GCM in rust en beveiligt verkeer tussen de serverfunctie en D1 met TLS. De geheime HMAC-sleutel staat als versleuteld Cloudflare-secret en niet in de app of broncode. API-verzoeken worden op herkomst, type, maximale grootte, veldwaarden en frequentie gecontroleerd, per IP-adres en daarnaast voor alle verzoeken samen. Antwoorden met gegevens van of over jou worden niet gecachet.
De server schrijft geen GPS-coördinaten, routes of bestemmingen naar zijn logs. Een snellere-routezoekopdracht verstuurt begin en bestemming in de versleutelde verzoekinhoud en niet in de URL.
Beveiligingslogs
Na een geautomatiseerde spamaanval op 30 september 2026 houdt ScootKoers bij de verzoeken die iets in de database schrijven (meldingen, reacties op een melding, flitsermeldingen, gedeelde ritten en reistijden, Crew-codes en herstelcodes) een beveiligingslog bij. Hetzelfde geldt voor de poorten vóór de routeserver en de zoekserver: een verzoek om een route of zoekopdracht dat die poort weigert (te veel verzoeken, of een verzoek dat een echte app nooit stuurt) wordt met je IP-adres, land en de reden gelogd. Een gewoon, geslaagd verzoek wordt niet met je IP-adres gelogd. De coördinaten van je route en de tekst van je zoekopdracht staan nooit in dit log; van een zoekopdracht wordt alleen de lengte vastgelegd. Daarin staan: je IP-adres, het land waaruit het verzoek komt, het type browser of app (User-Agent), de herkomst van het verzoek (Origin), een technisch verzoeknummer van Cloudflare, wat er met het verzoek gebeurde (bijvoorbeeld geaccepteerd, geweigerd of te vaak), en waar het verzoek over ging: de appversie, of het nummer van de melding, flitsermelding of Crew-code. De inhoud van een melding, je GPS-locatie en je route staan er niet in.
Controle dat de app echt is (Google Play Integrity). In de Android-app vraagt ScootKoers één keer per dag aan Google Play Integrity om te bevestigen dat het de echte, ongewijzigde app is op een echt toestel. Google ontvangt daarvoor technische gegevens over de app en het toestel, volgens het privacybeleid van Google. Onze server ontvangt een versleuteld resultaat dat alleen Google kan lezen, laat dat door Google beoordelen, en geeft de app een eigen controlecode terug die 24 uur geldig is. Die code bevat geen naam, account, toestelnummer of IP-adres en wordt bij routes en zoekopdrachten alleen naar onze eigen servers meegestuurd, nooit naar andere partijen. We gebruiken hem om echte apps ruimer te bedienen dan geautomatiseerd verkeer. Een geslaagde controle wordt niet met je IP-adres opgeslagen; een afgewezen controle wordt met je IP-adres, land en de reden gelogd, net als andere geweigerde verzoeken. Een toestel dat de controle niet haalt, kan de app gewoon blijven gebruiken. Rechtsgrond: gerechtvaardigd belang bij het beschermen van de dienst tegen misbruik.
Deze logs worden gebruikt om misbruik te herkennen en te blokkeren, bijvoorbeeld door een IP-adres in de firewall van Cloudflare te weren. Ze staan in Cloudflare Workers Logs en worden daar automatisch na hooguit 7 dagen verwijderd. Grondslag: gerechtvaardigd belang, namelijk de app en de gegevens van andere gebruikers beschermen tegen misbruik. Je kunt daartegen bezwaar maken via het contactadres onderaan.
Cloudflare D1 houdt automatisch een versleutelde herstelgeschiedenis bij. Een verwijderde of automatisch opgeschoonde rij kan daardoor nog maximaal de voor het Cloudflare-abonnement geldende Time Travel-periode van 7 of 30 dagen herstelbaar zijn. Die herstelgeschiedenis is niet via de app of publieke API leesbaar en wordt niet voor routeberekening gebruikt.
Vrijwillig een routeprobleem delen
Een routeprobleem blijft eerst lokaal. Alleen wanneer je bij die melding bewust op Deel anoniem met beta tikt, worden de getoonde GPS-locatie, OSM-way, appversie en technische routecontext naar de ScootKoers-database bij Cloudflare gestuurd. De bestemming, je naam, e-mailadres en een gebruikersaccount worden niet meegestuurd. Meldingen ouder dan 180 dagen worden bij de periodieke opschoning verwijderd. Grondslag: toestemming, per melding opnieuw gegeven.
Een gedeelde melding wordt ook per e-mail naar de beheerder gestuurd, via de e-maildienst Resend: het soort melding, je notitie, de GPS-locatie van de melding en de appversie. Om te voorkomen dat een spamaanval de mailbox overspoelt, gaan er hooguit een paar van zulke mails per tien minuten uit; de melding zelf staat dan nog steeds in de database.
Om spam te beperken telt de server per IP-adres hoeveel verzoeken er binnenkomen. In de database komt daarvoor niet het IP-adres zelf, maar een korte HMAC-controlesleutel die met een geheime sleutel per tijdvak van tien minuten wordt gemaakt; die limietsleutels worden uiterlijk na twee dagen verwijderd. Het IP-adres zelf staat alleen in de beveiligingslog hierboven. Je kunt een gedeelde melding vanuit Mijn meldingen weer uit de centrale database verwijderen, zolang de lokale verwijdercode nog op je apparaat staat.
Een gesprek over je melding
Heeft de beheerder een vraag over een gedeelde melding, dan zie je die in de app en kun je erop antwoorden. Je antwoord wordt samen met de melding in de database bewaard en per e-mail (via Resend) naar de beheerder gestuurd. Het gesprek is alleen gekoppeld aan het meldingsnummer, niet aan een account, naam of apparaat. Het wordt verwijderd samen met de melding: na 180 dagen, of eerder als je de melding via Mijn meldingen verwijdert. Grondslag: toestemming, gegeven door zelf te antwoorden.
Flitsers en controles melden
In Nederland, België en Denemarken kun je een snelheidscontrole melden en een melding van anderen bevestigen of wegstemmen. Daarvoor bewaart ScootKoers alleen de plek van de controle, het land en het aantal bevestigingen en stemmen tegen, zonder koppeling aan jou. Andere gebruikers zien de melding op de kaart. Een melding verloopt na 45 minuten zonder bevestiging en wordt een dag na het verlopen verwijderd. Grondslag: toestemming, gegeven door zelf te melden of te stemmen.
Berichten van ScootKoers
De app haalt af en toe op of er een bericht voor alle gebruikers is, bijvoorbeeld over onderhoud of een storing. Daarbij wordt niets over jou meegestuurd. Welke berichten je al gezien hebt, onthoudt de app alleen lokaal op je apparaat.
Accounts, advertenties en tracking
ScootKoers bevat geen gebruikersaccount. De native Android/iOS-app gebruikt geen Google Analytics-SDK. De website en PWA gebruiken Google Analytics alleen nadat je daarvoor via de analyticsvoorkeuren toestemming hebt gegeven. Daarmee worden bezoeken en installatiegebeurtenissen gemeten, zoals het accepteren van de browserprompt en de eerste zelfstandige opening van de geïnstalleerde PWA. Google kan daarbij cookies, een willekeurige clientcode, IP-adres en technische browser- en apparaatgegevens verwerken. ScootKoers stuurt hiervoor geen GPS-locatie, route, bestemming, naam of e-mailadres naar Google. Grondslag: toestemming. Je keuze wordt lokaal in je browser bewaard en kan via Cookievoorkeuren op de website of Analyticsvoorkeuren in de webapp worden gewijzigd. De bewaartermijn van gebeurtenisgegevens volgt de instelling van de Google Analytics-property en de voorwaarden van Google.
Er worden geen locatiegegevens verkocht en er wordt geen persoonlijk routeprofiel voor advertenties gemaakt.
De website en PWA hebben een optionele beloningsfunctie via Google Ad Manager: alleen wanneer je zelf op Kijk een advertentie voor 1 band tikt, wordt een advertentie geopend. Na een volledig bekeken advertentie krijg je in de app 1 band. Er worden geen automatische displayadvertenties of banners geplaatst. Voor bezoekers in de EER, het Verenigd Koninkrijk en Zwitserland wordt vooraf toestemming gevraagd via Google's toestemmingsplatform. Google en eventuele advertentiepartners kunnen daarbij cookies, lokale opslag, IP-adressen en browser- of apparaatgegevens verwerken voor advertentieweergave, beveiliging, meting en rapportage. ScootKoers stuurt hiervoor geen GPS-locatie, route of bestemming naar Google. Grondslag: toestemming via het Google-privacybericht.
De native Android/iOS-app biedt dezelfde vrijwillige beloningsfunctie via Google AdMob. Ook daar worden advertenties nooit automatisch getoond en wordt een band pas toegekend nadat Google bevestigt dat de advertentie volledig is bekeken. Voorafgaand wordt toestemming gevraagd via Google's toestemmingsplatform; zonder toestemming toont de app geen advertentie.
ScootKoers Crew (uitnodigingscode)
ScootKoers Crew is een optioneel programma om vrienden uit te nodigen. De app maakt daarvoor lokaal op je apparaat een willekeurige code van 8 tekens aan; deze code bevat geen persoonsgegevens en is niet aan een account of apparaat-ID gekoppeld. Als je de code deelt (bijvoorbeeld via WhatsApp) en kiest voor Delen via WhatsApp, wordt alleen een kant-en-klaar bericht met die code geopend in de app van je keuze; ScootKoers stuurt zelf niets naar je contacten. Vult iemand anders jouw code in, dan onthoudt de database enkel dat die code is ingevoerd en, na een voltooide eerste rit, dat er één bevestigde vriend bij is. Er wordt geen naam, telefoonnummer, IP-adres of locatie van jou of je vriend bij de code opgeslagen. Grondslag: toestemming, per code-invoer opnieuw gegeven. Codes en het aantal bevestigde vrienden worden bewaard zolang het Crew-programma actief is; je kunt je lokale code en voortgang altijd verwijderen via Lokale appgegevens wissen.
Herstelcode voor voortgang
Je kunt vrijwillig een afzonderlijke geheime herstelcode van 16 tekens maken. Daarmee bewaart ScootKoers in Cloudflare D1 een kopie van je banden, aantal bekeken beloningsadvertenties, ontgrendelde kaarticonen, avatar- en voertuigkleuren en Crew-voortgang. Ritgeschiedenis, geleerde routes, je huidige locatie, naam en e-mailadres worden niet in deze kopie opgenomen. Je thuis- en werkadres en je opgeslagen plaatsen gaan alleen mee als je dat aan laat staan (bij een nieuwe herstelcode staat het standaard aan, bij een bestaande code uit). Die gegevens worden op je eigen apparaat versleuteld (AES-GCM, met een sleutel die uit je herstelcode wordt afgeleid) voordat ze worden verstuurd. ScootKoers bewaart alleen het versleutelde pakket en kan de adressen niet lezen; zonder je herstelcode zijn ze onleesbaar. Zet je de schakelaar uit, dan wordt de volgende cloudkopie zonder plaatsen opgeslagen en vervangt die de vorige. De openbare Crew-uitnodigingscode is niet je herstelcode.
De herstelcode werkt als een geheime sleutel: iedereen die de volledige code kent, kan de bijbehorende voortgang op een ander apparaat herstellen of de cloudkopie verwijderen. Bewaar de code daarom privé. De database bewaart niet de leesbare herstelcode maar alleen een HMAC-afdruk met een servergeheim. De kopie wordt bijgewerkt nadat je voortgang verandert en blijft bestaan totdat je in de app kiest voor Cloudkopie verwijderen of het herstelprogramma wordt beëindigd. Grondslag: toestemming, gegeven wanneer je zelf een herstelcode maakt.
Bewaartermijnen
- Lokaal geleerde routes: maximaal 180 dagen.
- Lokale reistijdwaarnemingen: maximaal 365 dagen.
- Gedeelde routekandidaten: maximaal 90 dagen.
- Gedeelde reistijdwaarnemingen: maximaal 365 dagen.
- Vrijwillig gedeelde routeproblemen: maximaal 180 dagen.
- Gesprek over een melding: samen met de melding, maximaal 180 dagen.
- Flitsermeldingen: tot een dag nadat de melding verlopen is.
- Rate-limitsleutels: maximaal 2 dagen.
- Beveiligingslogs met IP-adres: maximaal 7 dagen.
- Crew-uitnodigingscodes en bevestigde-vriendentellingen: zolang het Crew-programma actief is, tot handmatige verwijdering.
- Voortgangskopie bij een herstelcode: tot je de cloudkopie zelf verwijdert of het herstelprogramma wordt beëindigd.
Jouw rechten
Je hebt recht op inzage, rectificatie, verwijdering en beperking van je persoonsgegevens, en op bezwaar tegen verwerking op basis van gerechtvaardigd belang. Stuur voor het uitoefenen van deze rechten een e-mail naar het adres bij Verwerkingsverantwoordelijke. Omdat de meeste gegevens bewust anoniem worden verzameld (geen account, geen apparaat-ID), kan een individuele bijdrage aan het gezamenlijke reistijdmodel niet altijd één-op-één aan jou worden gekoppeld; lokale gegevens verwijder je rechtstreeks via Lokale appgegevens wissen in de instellingen.
Je hebt daarnaast het recht om een klacht in te dienen bij de Autoriteit Persoonsgegevens (autoriteitpersoonsgegevens.nl).
Verwijderen
Je kunt lokale appgegevens verwijderen in de instellingen van ScootKoers of via de opslaginstellingen van je browser of Android-toestel. Verwijder vrijwillig gedeelde meldingen bij voorkeur eerst via Mijn meldingen en een voortgangskopie via Cloudkopie verwijderen; na het wissen van lokale opslag raken de bijbehorende geheime codes verloren. De app heeft geen gebruikersaccount, dus er is ook geen serveraccount om te verwijderen.
Gebruikte 3D-modellen
Het avatar-dashboard gebruikt drie gratis 3D-modellen onder de Creative Commons Attribution-licentie (CC-BY), aangepast (ingekort tot één voertuig, gecomprimeerd) voor gebruik in de app:
- Auto: "Generic passenger car pack" door Comrade1280, via Sketchfab.
- Scooter: "Electric Scooter (Low-poly, game-ready)" door Delandi, via Sketchfab.
- Fiets: "Low Poly Bicycle" door tolotedesign, via Sketchfab.
Wijzigingen in dit beleid
Wanneer de gebruikte diensten, dataverwerking of functies van de app wijzigen, wordt deze privacyverklaring bijgewerkt en verandert de datum bovenaan.
Contact
Vragen over deze privacyverklaring of over je gegevens kun je sturen naar [email protected].
Privacy Policy
Last updated: 4 October 2026
This privacy policy describes what data ScootKoers processes, why, on what legal basis, and for how long. It applies to the ScootKoers app (Android, iOS and the web version) and to everyone who uses the app.
Data controller
SvenSite
Email: [email protected]
Dutch Chamber of Commerce (KvK) number: 83853049
VAT ID: NL003881492B31
Location
The app only requests access to your precise location while in use, to show your position, calculate a route and enable active navigation. The app does not request background location. During an active ride, the app processes filtered GPS points in memory to detect navigation progress, deviations and arrival. Legal basis: performance of the service you request.
Route calculation and external map services
To calculate a route, start and destination coordinates are sent over a secure connection to the routing service. For search, map display and additional route checking, the app also uses OpenStreetMap-related services: Valhalla for routing, Photon (ScootKoers' own search server, with the public Komoot Photon as a fallback) and Nominatim for searching addresses, PDOK from the Dutch Kadaster for map tiles and aerial imagery within the Netherlands, MapTiler for map tiles and aerial imagery elsewhere, and the Overpass API for additional road checking. These services receive technically necessary data such as your IP address and, depending on the feature, search text, map area or coordinates. When searching, your search text, and as a preference for nearby results also your approximate current location, is sent to the search server. The own search server runs on a ScootKoers computer and is reachable through Cloudflare; it does not store search text and never logs it. The public Komoot Photon and Nominatim are subject to their own terms. Their own retention periods and privacy terms apply. Legal basis: performance of the service you request.
Local storage
Favorites, recent destinations, settings, a resumable active ride and route problem reports are stored locally on your device. When a completed alternative ride was demonstrably faster, the app locally stores up to three waypoints, the start and destination, and the measured travel time, so the same device can recognize that route again on a later ride. Locally learned routes expire after a maximum of 180 days.
The Android app excludes this local data from Android cloud backups and device migration; the data stays within the app sandbox on the device. The web version uses the browser's isolated site storage; anyone with access to the unlocked device or browser profile may be able to access that local data.
For better arrival-time estimates, the app also locally stores a coarse corridor code, a rush-hour/off-peak category, and up to twenty recent usable travel times per category. Poor GPS, long pauses, large deviations and statistical outliers are rejected. Only from three matching rides onward is the local ETA adjusted. A maximum of forty corridor models are kept; observations expire after a maximum of 365 days and disappear immediately via Clear local app data in settings.
If you've installed ScootKoers as an app, map tiles you already view online are then kept offline for a while (up to 3,000 tiles, oldest removed first), so a previously viewed area stays visible without internet. Tiles for an area you haven't viewed yourself are never fetched — this is not a download of a larger area. You can remove it via Clear offline map in settings.
Sharing rides to improve routes
The Automatically share rides to improve routes setting is on by default; you see it right away on first launch and can turn it off there or later via Settings at any time. If the setting is off, none of the below is sent, and the app only ever collects location during an actively navigated ride regardless.
After every ride you've actively navigated, the app sends a SHA-256-derived corridor code, rush-hour/off-peak indicator, travel time, distance and technical quality values for the shared statistical travel-time model (see below). This happens only immediately after a just-completed, actively navigated ride. The processing is fully deterministic: no data is sent to an AI provider or a third country outside the EU. Legal basis: legitimate interest in improving travel-time predictions, using an anonymous, heavily rounded dataset and an always-available opt-out.
When a ride also demonstrably produced a faster alternative route, a route candidate can separately be shared under the same setting (see below). A weekly, likewise fully deterministic job clusters the route candidates collected this way from multiple independent riders at the same location and generates a short summary (number of contributors, average location) for manual review. Suggestions from this are never automatically applied to your route: they first go through the same legal route check as a manually shared route candidate, before they can ever be used as a route correction.
Shared statistical travel-time model
For this part, the server does not receive start or destination coordinates, address, full GPS trace, account, name or email address — only the corridor code and figures mentioned above. This part does not train an AI or language model, only a statistical real-world model.
A shared ETA is only shown once there are at least five accepted rides from at least three separate participants. Per-participant ride medians, outlier filters and a maximum number of contributions per participant prevent one frequent rider from dominating the model. Rush-hour and off-peak stay separate. The legal route check and blocking of forbidden roads always take priority over any time saving. Real-world travel times expire after a maximum of 365 days.
A shared route candidate rounds the start and end to a grid of roughly one kilometer. Only up to three necessary waypoints are included, rounded to roughly ten meters; no partial GPS trace, per-point speed or timeline is sent to the server. A route candidate is first checked against map rules and expires after a maximum of 90 days.
You can turn off sharing at any time; this prevents new uploads. Because no account or persistent device code is deliberately stored, a previously shared real-world travel time cannot be reliably traced back to you to delete individually; it is automatically cleaned up and only ever read as part of a group model.
When requesting a group ETA, the app only sends the opaque corridor code and rush-hour/off-peak category. Cloudflare technically processes the IP address in doing so; ScootKoers does not store the raw IP address. A monthly-rotating HMAC code counts the number of independent contributors and limits abuse.
Database security
The central database is only reachable from the server function via a Cloudflare binding and is not directly open on the internet. Cloudflare D1 encrypts database objects with AES-256-GCM at rest and secures traffic between the server function and D1 with TLS. The secret HMAC key is stored as an encrypted Cloudflare secret, not in the app or source code. API requests are checked on origin, type, maximum size, field values and frequency, both per IP address and across all requests together. Responses containing data from or about you are not cached.
The server does not write GPS coordinates, routes or destinations to its logs. A faster-route request sends the start and destination in the encrypted request body, not in the URL.
Security logs
After an automated spam attack on 30 September 2026, ScootKoers keeps a security log for requests that write to the database (reports, replies to a report, speed-check reports, shared rides and travel times, Crew codes and recovery codes). The same applies to the gates in front of the routing server and the search server: a route or search request that these gates refuse (too many requests, or a request that a genuine app never sends) is logged with your IP address, country and the reason. A normal, successful request is not logged with your IP address. The coordinates of your route and the text of your search never appear in this log; for a search only its length is recorded. The security log contains: your IP address, the country the request comes from, the browser or app type (User-Agent), the origin of the request, a technical Cloudflare request ID, what happened to the request (for example accepted, rejected or too frequent), and what the request was about: the app version, or the number of the report, speed-check report or Crew code. The content of a report, your GPS location and your route are not included.
Checking that the app is genuine (Google Play Integrity). In the Android app, ScootKoers asks Google Play Integrity once a day to confirm that it is the genuine, unmodified app on a genuine device. For this, Google receives technical data about the app and the device, under Google's own privacy policy. Our server receives an encrypted result that only Google can read, has Google assess it, and gives the app its own check code that is valid for 24 hours. That code contains no name, account, device number or IP address, and it is only sent to our own servers with route and search requests, never to other parties. We use it to serve genuine apps more generously than automated traffic. A successful check is not stored with your IP address; a rejected check is logged with your IP address, country and the reason, like other refused requests. A device that fails the check can keep using the app. Legal basis: legitimate interest in protecting the service against abuse.
These logs are used to detect and block abuse, for example by blocking an IP address in Cloudflare's firewall. They are kept in Cloudflare Workers Logs and are deleted there automatically after at most 7 days. Legal basis: legitimate interest, namely protecting the app and other users' data against abuse. You can object to this via the contact address below.
Cloudflare D1 automatically keeps an encrypted recovery history. A deleted or automatically cleaned-up row may therefore still be recoverable for up to the Time Travel period of 7 or 30 days that applies to the Cloudflare plan in use. That recovery history is not readable via the app or public API and is not used for route calculation.
Voluntarily sharing a route problem
A route problem stays local at first. Only when you deliberately tap Share anonymously with beta on that report are the displayed GPS location, OSM way, app version and technical route context sent to the ScootKoers database at Cloudflare. The destination, your name, email address and a user account are not included. Reports older than 180 days are removed during periodic cleanup. Legal basis: consent, given again per report.
A shared report is also emailed to the administrator via the email service Resend: the report type, your note, the GPS location of the report and the app version. To stop a spam attack from flooding the mailbox, only a few such emails are sent per ten minutes; the report itself is still stored in the database.
To limit spam, the server counts how many requests arrive per IP address. The database does not store the IP address itself for this, but a short HMAC check key made with a secret key per ten-minute window; these rate-limit keys are deleted after at most two days. The IP address itself only appears in the security log above. You can remove a shared report from the central database again via My reports, as long as the local removal code is still on your device.
A conversation about your report
If the administrator has a question about a shared report, you will see it in the app and can reply. Your reply is stored in the database together with the report and emailed (via Resend) to the administrator. The conversation is linked only to the report number, not to an account, name or device. It is deleted together with the report: after 180 days, or earlier if you delete the report via My reports. Legal basis: consent, given by replying yourself.
Reporting speed checks
In the Netherlands, Belgium and Denmark you can report a speed check and confirm or vote away other people's reports. ScootKoers only stores the location of the check, the country and the number of confirmations and votes against, with no link to you. Other users see the report on the map. A report expires after 45 minutes without confirmation and is deleted one day after expiry. Legal basis: consent, given by reporting or voting yourself.
Messages from ScootKoers
The app occasionally checks whether there is a message for all users, for example about maintenance or an outage. Nothing about you is sent along. Which messages you have already seen is only remembered locally on your device.
Accounts, ads and tracking
ScootKoers has no user account. The native Android/iOS app does not use the Google Analytics SDK. The website and PWA use Google Analytics only after you have consented through the analytics preferences. This measures visits and installation events, such as accepting the browser prompt and the first standalone launch of the installed PWA. Google may process cookies, a random client identifier, IP address, and technical browser and device information. ScootKoers does not send GPS location, routes, destinations, names or email addresses to Google for this purpose. Legal basis: consent. Your choice is stored locally in your browser and can be changed through Cookie preferences on the website or Analytics preferences in the web app. Event data retention follows the Google Analytics property setting and Google's terms.
No location data is sold and no personal route profile is created for advertising.
The website and PWA have an optional reward feature through Google Ad Manager: an ad opens only when you tap Watch an ad for 1 band. A completed ad earns 1 in-app band. No automatic display ads or banners are placed. Visitors in the EEA, the United Kingdom and Switzerland are asked for consent beforehand through Google's consent platform. Google and any ad partners may process cookies, local storage, IP addresses and browser or device data for ad delivery, security, measurement and reporting. ScootKoers does not send GPS location, routes or destinations to Google for this purpose. Legal basis: consent through the Google privacy message.
The native Android/iOS app offers the same voluntary reward feature through Google AdMob. Ads are never shown automatically there either, and a band is granted only after Google confirms that the ad was completed. Consent is requested beforehand through Google's consent platform; without consent, the app shows no ad.
ScootKoers Crew (invitation code)
ScootKoers Crew is an optional program for inviting friends. The app generates a random 8-character code locally on your device for this; this code contains no personal data and is not linked to an account or device ID. If you share the code (for example via WhatsApp) using Share via WhatsApp, only a ready-made message containing that code is opened in the app of your choice; ScootKoers itself sends nothing to your contacts. If someone else enters your code, the database only remembers that the code was entered and, once their first ride is completed, that one confirmed friend has been added. No name, phone number, IP address or location of you or your friend is stored alongside the code. Legal basis: consent, given again per code entry. Codes and confirmed-friend counts are kept for as long as the Crew program is active; you can always remove your local code and progress via Clear local app data.
Progress recovery code
You can voluntarily create a separate secret 16-character recovery code. ScootKoers then stores a copy in Cloudflare D1 of your bands, number of rewarded ads watched, unlocked map icons, avatar and vehicle colours, and Crew progress. Ride history, learned routes, your current location, name and email address are not included in this copy. Your home and work address and saved places are only included if you leave that switched on (it is on by default for a new recovery code and off for an existing one). That data is encrypted on your own device (AES-GCM, with a key derived from your recovery code) before it is sent. ScootKoers only stores the encrypted package and cannot read the addresses; without your recovery code they are unreadable. If you switch it off, the next cloud copy is saved without places and replaces the previous one. Your public Crew invitation code is not your recovery code.
The recovery code acts as a secret key: anyone who knows the complete code can restore the associated progress on another device or delete the cloud backup. Keep it private. The database does not store the readable recovery code, only an HMAC fingerprint made with a server secret. The copy is updated after your progress changes and remains until you choose Delete cloud backup in the app or the recovery programme ends. Legal basis: consent, given when you create a recovery code yourself.
Retention periods
- Locally learned routes: maximum 180 days.
- Local travel-time observations: maximum 365 days.
- Shared route candidates: maximum 90 days.
- Shared travel-time observations: maximum 365 days.
- Voluntarily shared route problems: maximum 180 days.
- Conversation about a report: together with the report, maximum 180 days.
- Speed-check reports: until one day after the report has expired.
- Rate-limit keys: maximum 2 days.
- Security logs containing IP addresses: maximum 7 days.
- Crew invitation codes and confirmed-friend counts: for as long as the Crew program is active, until manually removed.
- Progress copy linked to a recovery code: until you delete the cloud backup yourself or the recovery programme ends.
Your rights
You have the right to access, rectify, erase and restrict your personal data, and to object to processing based on legitimate interest. To exercise these rights, send an email to the address listed under Data controller. Because most data is deliberately collected anonymously (no account, no device ID), an individual contribution to the shared travel-time model cannot always be linked back to you one-to-one; local data can be removed directly via Clear local app data in settings.
You also have the right to file a complaint with the Dutch Data Protection Authority (Autoriteit Persoonsgegevens, autoriteitpersoonsgegevens.nl).
Deleting data
You can delete local app data in ScootKoers's settings or via your browser's or Android device's storage settings. Preferably remove voluntarily shared reports first via My reports and a progress copy via Delete cloud backup; after clearing local storage, the associated secret codes are lost. The app has no user account, so there is also no server account to delete.
3D models used
The avatar dashboard uses three free 3D models under the Creative Commons Attribution license (CC-BY), modified (trimmed to a single vehicle, compressed) for use in the app:
- Car: "Generic passenger car pack" by Comrade1280, via Sketchfab.
- Scooter: "Electric Scooter (Low-poly, game-ready)" by Delandi, via Sketchfab.
- Bicycle: "Low Poly Bicycle" by tolotedesign, via Sketchfab.
Changes to this policy
When the services used, data processing, or features of the app change, this privacy policy is updated and the date at the top changes.
Contact
Questions about this privacy policy or about your data can be sent to [email protected].