Verwerkingsregister — Platform WebsitePublisher.ai
Organisatie: M25
Rollen van M25: verwerker (art. 30 lid 2 AVG, deel A) en verwerkingsverantwoordelijke (art. 30 lid 1 AVG, deel B)
Versie: 1.3 · Datum: 2 oktober 2026
Status: CONCEPT — nog niet juridisch getoetst
Over dit document
Dit register dekt het platform WebsitePublisher.ai: hosting van websites en apps, de gegevens die die sites verzamelen, integraties die M25 namens klanten uitvoert, en de eigen accountadministratie van M25.
Het e-mailarchief heeft een eigen register (verwerkingsregister e-mailarchief) en valt hier buiten.
De feiten zijn afgeleid uit de werkelijke systeemarchitectuur, niet uit een sjabloon. Waar iets nog niet is ingericht staat dat er zo bij. Een register dat gunstiger is dan de werkelijkheid is erger dan geen register.
1. Gegevens van de organisatie
| Naam | M25 |
| Adres | Brandemaat 78, 7943 EX Meppel, Nederland |
| KvK | 04072374 |
| Btw-id | NL001629875B23 |
| Handelsnaam / product | WebsitePublisher.ai |
| Privacycontactpunt | privacy@websitepublisher.ai |
Functionaris gegevensbescherming: niet aangesteld. Dat is niet verplicht op grond van art. 37 lid 1. Er is geen overheidsinstantie, geen grootschalige stelselmatige observatie als kernactiviteit, en geen grootschalige verwerking van bijzondere categorieën als kernactiviteit. Het privacycontactpunt is uitdrukkelijk geen FG (zie de toelichting in het eArch-register).
DEEL A — M25 als verwerker (art. 30 lid 2)
Verwerkingsverantwoordelijken: de klanten van WebsitePublisher.ai (accounthouders) voor hun eigen projecten. M25 verwerkt uitsluitend op hun instructie. Instructies worden gegeven via het dashboard of via een door de klant gekoppelde AI-assistent.
A1. Hosting van websites en apps
| Doel | Publiceren en beschikbaar houden van de websites, apps en webshops van de klant |
| Bewerking | Opslag van pagina's, bestanden en projectdata; uitlevering aan bezoekers; nachtelijke back-ups |
| Gegevens | Wat de klant publiceert. Dat kan persoonsgegevens bevatten, zoals namen of foto's op een teampagina |
| Locatie | Applicatie, databases en bestanden: DigitalOcean, Amsterdam (NL). Back-ups: Amsterdam (NL) en Hetzner Falkenstein (DE). CDN: Bunny.net (SI) met wereldwijde edges |
A2. Gegevens die sites van de klant verzamelen
| Doel | Namens de klant gegevens van diens bezoekers ontvangen en bewaren |
| Bewerkingen | Formulierinzendingen en leads (papi_leads), bezoekersaccounts (visitor auth), bestellingen en verzendgegevens (webshops), reacties, sitestatistiek |
| Betrokkenen | Bezoekers, leads, klanten en leden van de klant |
| Beperking | Via formulieren mogen geen betaalkaartgegevens, identiteitsnummers of gezondheids- of biometrische gegevens worden verzameld (privacyverklaring, sectie 2). Betalingen lopen via de gehoste checkout van de betaalprovider. Kaartgegevens raken de servers van M25 niet |
A3. Integraties op instructie van de klant
| Doel | Namens de klant koppelingen met andere diensten uitvoeren |
| Bewerking | API-aanroepen naar de dienst die de klant kiest, met diens eigen inloggegevens |
| Inloggegevens | In de Vault: AES-256, write-only (niet uitleesbaar via API of dashboard), alleen ontsleuteld op het moment van de aanroep |
| Positie van de derde partij | Koppelt de klant een eigen account (bv. Stripe, Twilio, een eigen AI-sleutel), dan is die aanbieder een keuze van de klant, geen subverwerker van M25 |
A3.1 Google-integratie (30-09-2026, uitgebreid 01-10-2026)
Alleen beschikbaar op betaalde plannen.
| Doel | Leads synchroniseren met een Google Sheet (lezen), leads exporteren naar een nieuwe Google Sheet, en e-mail versturen vanuit het Gmail-account van de klant |
| Toestemming | De klant koppelt zijn eigen Google-account via het toestemmingsscherm van Google (OAuth) en kiest daar de rechten |
| Rechten | Per functie, alleen wanneer nodig: Sheets lezen (spreadsheets.readonly); Drive alleen voor bestanden die de app zelf aanmaakt (drive.file, voor exports); Gmail alleen versturen (gmail.send: geen lezen, zoeken, wijzigen of verwijderen van mail) |
| Bewerking | Lezen van de geconfigureerde tabbladen en rijen en opslaan als lead; aanmaken van nieuwe Sheets in de Drive van de klant en daarin leads wegschrijven (export); versturen van door de klant of diens AI-assistent opgegeven e-mails vanaf het gekoppelde account |
| Frequentie | Op het schema dat de klant instelt of handmatig. Standaard minimaal 1 uur tussen runs; per project instelbaar (set-config) binnen een platformgrens van minimaal 15 minuten |
| Betrokkenen | De personen in de Sheet, doorgaans leads of prospects van de klant |
| Gegevens | De kolommen die de klant koppelt of exporteert, bv. naam, e-mail, telefoon, adres; bij Gmail: ontvangers en inhoud van de verstuurde mail. Daarnaast het e-mailadres van het gekoppelde Google-account, voor weergave |
| Technische status | Per bron: rij-sleutels, vingerafdrukken (sha1) en een runlog. ⚠ Een rij-sleutel kan zelf een persoonsgegeven zijn, bijvoorbeeld een e-mailadres in kleine letters als sleutelkolom. Gmail: inhoud wordt niet opgeslagen, alleen een dagteller per project (cache, 1 dag). Projectinstellingen (papi_google_config) kunnen een standaard afzendernaam en reply-to-adres bevatten |
| Tokens | Toegangs- en vernieuwingstokens in de Vault, versleuteld, nooit gelogd. Ontkoppelen trekt de toegang bij Google in en verwijdert de tokens direct |
| Positie van Google | Geen subverwerker. Het Google-account is van de klant zelf; M25 haalt er op diens instructie gegevens uit op, schrijft exports in diens Drive en geeft mails op diens instructie aan diens eigen Gmail-account mee ter aflevering |
| Menselijke inzage | Alleen met toestemming van de klant (supportverzoek), voor beveiliging of bij wettelijke verplichting. Geen gebruik voor advertenties of voor het trainen van AI-modellen (Google Limited Use) |
A4. AI-verwerking binnen het platform
Vastgesteld in de code op 2 oktober 2026, per functie:
| Functie | Route | Gegevens | Positie |
|---|---|---|---|
| Factory (AI-bouwopdrachten voor sites en pagina's) | Lokale GPU-lane (eigen hardware, wphf01) of cloud-lane via OpenRouter, afhankelijk van het model dat per tier is ingesteld | Instructie van de klant en bestaande of gegenereerde pagina-inhoud; kan persoonsgegevens bevatten | Bij de cloud-lane is OpenRouter subverwerker, met de aanbieder van het gekozen model daarachter |
| E-mailarchief (samenvattingen, concepten, vectoren) | Lokaal (wphf01); cloud-uitwijk standaard uit | Zie het eArch-register | Zie het eArch-register |
| Site-assistent en AI-integraties van de klant | Met de eigen sleutel van de klant, bij de aanbieder die de klant kiest | Bezoekersvragen, opdrachten van de klant | Keuze van de klant, geen subverwerker (A3) |
| Vertalingen van de marketingsite | Via de AI-gateway | Eigen content van M25, geen klantgegevens | n.v.t. |
Alle AI-verkeer van het platform loopt via de eigen AI-gateway (wphf01, later ook wphf02), die lokaal afhandelt of doorzet naar de cloud.
A5. Categorieën van betrokkenen en gegevens (deel A)
| Betrokkenen | Gegevens |
|---|---|
| Bezoekers van klantsites | IP-adres (beveiliging, rate limiting), statistiek, formulierinhoud |
| Leads en prospects van de klant | Contactgegevens en vrije tekst, uit formulieren of uit een gekoppelde Google Sheet |
| Klanten en leden van de klant | Accountgegevens (visitor auth), bestellingen, verzendgegevens |
| Personen in gepubliceerde inhoud | Wat de klant publiceert |
Bijzondere categorieën: niet beoogd en contractueel uitgesloten voor formulieren (A2). Vrije tekstvelden kunnen ze technisch bevatten. M25 filtert dat niet.
DEEL B — M25 als verwerkingsverantwoordelijke (art. 30 lid 1)
B1. Accountadministratie en inloggen
| Doel | Accounts aanmaken en beheren; inloggen |
| Grondslag | Uitvoering overeenkomst (art. 6 lid 1 sub b) |
| Gegevens | E-mailadres, sessies, tijdzone, herkomst (via welk kanaal het account is aangemaakt) |
| Inlogmethoden | Eenmalige code per e-mail, of Sign in with Google |
| Sign in with Google | Google deelt na toestemming naam, e-mailadres en profielfoto. Opgeslagen wordt alleen het e-mailadres; naam en profielfoto worden niet bewaard (vastgesteld in de code, 2 oktober 2026). Geen toegang tot andere Google-gegevens |
| Bewaartermijn | Zolang het account bestaat; verwijdering binnen 30 dagen na opheffing |
B2. Facturatie en betalingen
| Doel | Abonnementen, domeinregistratie, facturen |
| Grondslag | Uitvoering overeenkomst; fiscale bewaarplicht (art. 6 lid 1 sub c) |
| Gegevens | Naam, e-mail, factuurgegevens, betaalstatus. Geen kaartgegevens (gehoste checkout van Mollie) |
| Bewaartermijn | Fiscale gegevens 7 jaar (art. 52 AWR) |
B3. Support en correspondentie
| Doel | Vragen van klanten beantwoorden |
| Grondslag | Uitvoering overeenkomst; gerechtvaardigd belang |
| Gegevens | E-mailadres, inhoud van de correspondentie, projectgegevens voor zover nodig |
| Bewaartermijn | ⚠ Vast te stellen |
B4. Platform-e-mail
| Doel | Inlogcodes, meldingen, facturatie- en limietmails |
| Verwerker | Resend, Inc. (VS), gecertificeerd onder het EU-U.S. Data Privacy Framework |
B5. Beveiliging en misbruikbestrijding
| Doel | Fraude, misbruik en ongeautoriseerde toegang voorkomen; inhoud scannen op verboden materiaal |
| Grondslag | Gerechtvaardigd belang (art. 6 lid 1 sub f) |
| Gegevens | IP-adres, API-logs, scanresultaten van gepubliceerde inhoud |
| Bewaartermijn | API-logs 90 dagen; beveiligings- en misbruiklogs 1 jaar |
B6. Websiteanalyse en productanalyse
| Doel | Gebruik van de marketingsite en het platform begrijpen en verbeteren |
| Verwerkers | Google Analytics (geanonimiseerd IP), PostHog (EU-hosting) |
| Grondslag | ⚠ Toestemming of gerechtvaardigd belang — afhankelijk van de cookie-inrichting vast te stellen |
C. Subverwerkers en verwerkers
| Partij | Rol | Locatie | Moederbedrijf | Status |
|---|---|---|---|---|
| DigitalOcean LLC | Applicatieservers, load balancer, databases, bestandsopslag, back-ups | Amsterdam (NL) | VS | In gebruik — ⚠ verwerkersovereenkomst vastleggen (#1440) |
| Hetzner Online GmbH | Back-ups, mailservers | Falkenstein (DE) | EU (DE) | In gebruik — DPA gesloten 17-09-2026 |
| UpCloud Ltd | Servers — EU-first uitbreiding | Finland (hoofdkantoor Helsinki); datacenterregio in de EU ⚠ vast te stellen | EU (FI) | In voorbereiding — nog geen persoonsgegevens |
| BunnyWay d.o.o. (Bunny.net) | CDN voor sitebestanden | Slovenië; wereldwijde edges | EU (SI) | In gebruik — ⚠ verwerkersovereenkomst vastleggen (#1440) |
| Resend, Inc. | Platform-e-mail | VS (DPF) | VS | In gebruik — ⚠ verwerkersovereenkomst vastleggen (#1440) |
| Mollie B.V. | Betalingen | Nederland | EU (NL) | In gebruik |
| Openprovider (Hosting Concepts B.V.) | Domeinregistratie | Nederland; registry-locatie | EU (NL) | In gebruik — ⚠ verwerkersovereenkomst vastleggen (#1440) |
| PostHog | Productanalyse | EU | VS | In gebruik |
| Google (Analytics) | Websiteanalyse | VS | VS | In gebruik |
| OpenRouter, Inc. | Cloud-taalmodellen voor factory-opdrachten op de cloud-lane (A4); de aanbieder van het gekozen model verwerkt daarachter | VS | VS | In gebruik — ⚠ verwerkersovereenkomst en doorgiftegrondslag vastleggen (#1440); ⚠ nog niet vermeld in de privacyverklaring |
Geen subverwerker: Google voor Sign in with Google (zelfstandige partij), Google voor de Google-integratie (account van de klant), en diensten die de klant zelf koppelt met eigen inloggegevens (A3).
UpCloud — vóór ingebruikname
- Verwerkersovereenkomst met UpCloud sluiten en de datacenterregio vastleggen (EU).
- Klanten ten minste 30 dagen vooraf informeren over de nieuwe subverwerker. Dat volgt uit de subverwerkerbepaling in de verwerkersovereenkomst; binnen die termijn kan de klant bezwaar maken.
- Hosting-factsheet, privacyverklaring (tabel derde partijen) en eArch-documenten bijwerken met de locatie.
D. Doorgifte buiten de EER
Uitgangspunt: opslag en verwerking in de EER, met de volgende uitzonderingen:
- Resend (VS): alleen platform-e-mail aan accounthouders. Grondslag: EU-U.S. Data Privacy Framework.
- Bunny.net-edges: een bezoeker buiten Europa krijgt sitebestanden van een edge in zijn buurt. Gecachte bestanden zijn site-assets, maximaal een maand bewaard.
- Google Analytics (VS): marketingsite. ⚠ Doorgiftegrondslag vastleggen.
- OpenRouter (VS): factory-opdrachten op de cloud-lane (A4), inclusief de aanbieder van het gekozen model. ⚠ Doorgiftegrondslag vastleggen (#1440).
- AI-assistenten van de klant: geen doorgifte door M25 maar door de klant zelf, met de aanbieder die hij kiest.
Met de koers "EU first" (UpCloud) wordt dit lijstje korter, niet langer. Nieuwe verwerkers buiten de EER alleen met een expliciete afweging.
E. Bewaartermijnen
| Gegeven | Termijn | Status |
|---|---|---|
| Accountgegevens | Tot opheffing + 30 dagen | Actief |
| Gepubliceerde inhoud en projectdata | Tot verwijdering door de klant of opheffing | Actief |
| Door sites verzamelde gegevens, incl. gesynchroniseerde leads | Beheerd door de klant; weg bij verwijdering door de klant of van project/account | Actief |
| Google-integratie: tokens | Tot ontkoppelen (dan direct verwijderd) | Actief |
| Google-integratie: sync-status | Tot de bron wordt verwijderd; runlog maximaal 200 runs per bron | Actief |
| Gmail-verzending | Inhoud niet opgeslagen; alleen een dagteller per project (1 dag) | Actief |
| Export-Sheets | Bestanden in de eigen Google Drive van de klant; beheer door de klant | n.v.t. |
| API-logs | 90 dagen | ⚠ Cleaner in aanbouw (#1438) |
| Back-ups | 7 dagen op de applicatieserver; objectopslag ⚠ 90 dagen beoogd | ⚠ Cleaner in aanbouw (#1438) |
| Beveiligings- en misbruiklogs | 1 jaar | ⚠ Afdwinging vast te stellen |
| Verlopen inlogcodes | 24 uur | Actief |
| Ingetrokken API-tokens | 30 dagen (audit), daarna verwijderd | Actief |
| Fiscale gegevens | 7 jaar | Wettelijk |
F. Beveiligingsmaatregelen (art. 32)
Technisch
- Transport: TLS op alle verbindingen.
- Geheimen: Vault met AES-256, write-only. API-tokens worden gehasht opgeslagen.
- Scheiding tussen klanten: elke aanvraag wordt gecontroleerd op projecteigendom.
- Rate limiting tegen brute force en misbruik.
- Inhoudsscanning van gepubliceerde pagina's op phishing en misbruik.
- OAuth-koppelingen: single-use state met korte levensduur (10 minuten), gebonden aan project en dienst. Scopes liggen vast in het manifest en worden nooit uit de aanvraag overgenomen. Tokens worden niet gelogd.
- Back-ups: nachtelijk, op twee locaties (NL en DE).
Organisatorisch
- Toegang door M25: de eigenaar heeft technisch toegang tot alle systemen. Bij een eenmansonderneming is functiescheiding niet mogelijk.
- Beperkende afspraak: inhoud wordt alleen ingezien bij storingsonderzoek, bij een beveiligingsincident of op verzoek van de klant.
Zwakste schakel, net als in het eArch-register: er is geen sluitende logging van beheerderstoegang tot inhoud. Haalbare stappen:
- logging van beheerdersopvragingen met tijdstip en aanleiding
- een vastgelegde werkinstructie wanneer toegang is toegestaan
G. Wijzigingslog
| Versie | Datum | Wijziging |
|---|---|---|
| 1.0 | 2026-09-30 | Eerste opzet. Inclusief de Google-integratie (A3.1) en UpCloud als subverwerker in voorbereiding |
| 1.1 | 2026-10-01 | A3.1 uitgebreid met export naar Google Sheets (drive.file) en Gmail-verzending (gmail.send); frequentie per project instelbaar; bewaartermijnen aangevuld |
| 1.2 | 2026-10-02 | B1: alleen het e-mailadres wordt opgeslagen bij Sign in with Google. A4: AI-verwerking per functie vastgesteld; OpenRouter is subverwerker voor de factory-cloud-lane (C en D bijgewerkt) |
| 1.3 | 2026-10-02 | Voorbereiding Europe First (#1580): kolom Moederbedrijf in C; nieuw hoofdstuk I Dataregio en routes |
H. Openstaande punten
- Verwerkersovereenkomsten DigitalOcean, Bunny.net, Resend, Openprovider vastleggen (#1440).
- UpCloud: DPA, datacenterregio, 30-dagenmelding aan klanten, documenten bijwerken (sectie C).
Vaststellen welke Sign in with Google-gegevens worden opgeslagen (B1)— alleen het e-mailadres, vastgesteld 2 okt 2026.AI-uitwijk per functie vastleggen (A4)— vastgesteld 2 okt 2026. Wat daaruit volgt: OpenRouter is subverwerker voor de factory-cloud-lane → DPA en doorgiftegrondslag (#1440), opname in de privacyverklaring en de subverwerkermelding aan klanten (beslissing Mike), en of klanten de cloud-lane per project kunnen uitzetten (vgl. de consent-eis in #1451).- Cleaners voor API-logs en back-ups (#1438).
- Bewaartermijn supportcorrespondentie vaststellen (B3).
- Grondslag en doorgifte Google Analytics vastleggen (B6, D).
- Logging van beheerderstoegang tot inhoud (F).
- Europe First (#1580): dit register bijwerken zodra de projectinstelling
data_regioner is (zie I).
I. Dataregio en routes (voorbereiding Europe First, #1580)
Dit hoofdstuk bereidt het register voor op de projectinstelling
data_region(eu_only/eu_first/global) uit #1580. Die instelling bestaat nog niet. De kolom "Onder EU-only" beschrijft het beoogde gedrag, niet het huidige.
Twee begrippen, bewust gescheiden:
- EU-resident: opslag en verwerking binnen de EER. De aanbieder kan een niet-Europees moederbedrijf hebben (kolom "Moederbedrijf" in C).
- EU-soeverein: EU-resident én alleen aanbieders met een Europees moederbedrijf. Doel voor later, geen huidige belofte.
| Verwerking | Regio nu | Hangt af van route? | Onder EU-only (beoogd) |
|---|---|---|---|
| Hosting en projectdata (A1, A2) | EU (DigitalOcean Amsterdam; back-ups NL en DE) | Nee | EU-resident; EU-soeverein na overstap naar UpCloud |
| Google-integratie (A3.1) | Google-account van de klant | Nee | Buiten de reikwijdte: account en keuze van de klant |
| Factory, AI-bouwopdrachten (A4) | Lokaal (NL) of cloud via OpenRouter (VS) | Ja | Alleen lokaal of EU-cloud (eu.openrouter.ai, afgedwongen); anders draait de taak niet |
| E-mailarchief, AI (eArch-register) | Lokaal; uitwijk naar OpenRouter mogelijk | Ja | Alleen lokaal of EU-cloud; voorgestelde standaard voor het archief |
| AI met eigen sleutel van de klant (A3) | Bij de aanbieder die de klant kiest | Keuze van de klant | Buiten de reikwijdte: keuze van de klant |
| Platform-e-mail (B4) | VS (Resend) | Nee | ⚠ Valt buiten EU-only zolang Resend blijft |
| Websiteanalyse (B6) | VS (Google Analytics); PostHog met EU-hosting | Nee | ⚠ Google Analytics valt buiten EU-only |
| CDN (A1) | EU, met wereldwijde edges voor bezoekers buiten Europa | Nee | Edges buiten de EU leveren alleen publieke site-assets |
Bij invoering van data_region dit hoofdstuk bijwerken:
- Per project vastleggen welke route geldt: standaard en afwijkingen.
- De kolom "Onder EU-only" omzetten naar het werkelijke gedrag.
- OpenRouter EU als aparte regel in C opnemen, zodra Business-account en DPA er zijn.
- Sectie D (doorgifte) per route uitsplitsen.
Website