This document is provided in English. The German version will follow our legal review.
Last updated: 2026-09-23
This Data Retention and Minimisation Policy is issued by Finalform GmbH, Theodor-Heuss-Str. 106, 26129 Oldenburg, Germany ("Finalform", "we", "us"), the operator of Autopage. It is Finalform's deletion concept (Löschkonzept) and gives effect to the storage limitation and data minimisation principles of Article 5 GDPR across the data Autopage processes. It is written in plain B2B English.
This policy is structured following the method of DIN EN ISO/IEC 27555 (which in September 2025 replaced the withdrawn DIN 66398). Under that method, each category of data is assigned exactly one deletion rule consisting of a regular retention period (Regellöschfrist) and a defined start trigger (Startzeitpunkt), and categories that share a rule are grouped into deletion classes (Löschklassen). A written deletion concept is not itself mandated by the GDPR, but it is the recognised way to evidence the accountability duty in Article 5(2) GDPR.
This policy sets out how long Finalform retains the categories of data it processes through Autopage, and the measures it applies to keep the amount of personal data to what each purpose actually requires. It gives effect to two principles of Article 5(1) GDPR:
This policy covers two distinct roles:
Deletion-execution owner.The Geschäftsführer, Robin Schröder, is responsible for executing and reviewing the deletion rules in this policy, including triggering deletions and confirming the scheduled purge jobs run as intended.
This policy is a Finalform-internal control. It does not shorten any statutory retention obligation, and it does not extend any retention period beyond what is lawful.
Autopage is designed to collect and process only the personal data the optimisation actually needs, and to avoid collecting identifying data in the first place rather than collecting and then reducing it. The principal measures are:
Following the DIN EN ISO/IEC 27555 method, the data categories below are grouped into deletion classes that share a retention logic. The concrete period and start trigger for each category are set out in the schedule in Section 4.
The table below sets out, for each category, the deletion class, the target retention period, the start trigger (Startzeitpunkt) from which that period runs, and the status in code. Periods marked as enforced are executed by a scheduled purge job that runs once daily and attempts one evidence row per category per run; a failed evidence write surfaces separately rather than failing the deletion itself, and Section 6 describes the mechanism. For a category whose job is committed but not yet implemented, the period states the legally correct target under Article 5(1)(e); the Status column identifies those categories, and until the job is built the data is retained for the life of the account.
| Löschklasse | Data category | Target period | Startzeitpunkt (start trigger) | Status |
|---|---|---|---|---|
| A. Visitor interaction | Raw visitor events and their session assignments (pseudonymous session id plus coarse behavioral signals; no IP, user-agent, referrer, or geo stored) | 90 days | Event ingest timestamp | Enforced by the daily purge job since 2026-07-31. Rows belonging to an experiment that has not yet concluded are held past 90 days until it concludes, so that a running test is never decided on truncated data |
| A. Visitor interaction | Per-iteration metrics snapshot (population-level counts, non-identifying) | Life of the account | Written when the engine records a decision | Implemented. This, and not the live aggregates, is the layer intended to survive the raw-event purge. The two aggregates behave differently and neither is a durable record: variant_metrics is a plain SQL view, computed at query time, so it reflects the purge immediately; context_variant_stats is a materialised view refreshed by the periodic sweep rather than by the purge, so between a purge and the next sweep it can still hold population-level counts derived from rows that have already been deleted. Those counts carry no identifier. See Section 6 |
| B. Operational telemetry | Model-call telemetry: token counts and call duration, no prompt or response content | 90 days | Call timestamp | Enforced by the daily purge job since 2026-07-31. Held as work-state events rather than in a table of its own |
| B. Operational telemetry | Security and access logs | 30 days | Log-write timestamp | No dedicated access-audit log today |
| B. Operational telemetry | In-app notifications | 30 days | Notification creation timestamp | Enforced by the daily purge job since 2026-07-31 |
| B. Operational telemetry | Sign-in rate-limit counters (request counts keyed by the account holder's IP address; dashboard sign-in only, never page visitors) | 30 days | Last request counted against the entry | Enforced by the daily purge job since 2026-07-31 |
| D. Account and tenant | Dashboard session records (including the account holder's login IP address and browser user agent) | Deleted once expired; sessions expire 30 days after issue | Session expiry | Enforced by the daily purge job since 2026-07-31 |
| C. Decision and audit | Iterations, proposals, applied engine changes, enrichment audit | Life of the account | Tenant deletion | Implemented; deleted on tenant deletion, no separate clock |
| D. Account and tenant | Account, profile, configuration, and authentication data, plus all 15 tenant-scoped tables | Immediate and complete deletion on request | Owner deletion action | Implemented |
| D. Account and tenant | Contract acceptance ledger (which version of the Terms, Acceptable Use Policy and Data Processing Agreement each account accepted, and for a pilot partner the Pilot Order Agreement with a snapshot of the company name and account email, with timestamp, language and surface) | Life of the account | Owner deletion action | Implemented; erased last in the account-deletion hook, after the tenant wipe |
| E. Statutory | Billing records and invoices (Buchungsbelege) | 8 years per Section 147 AO, Section 257 HGB, Section 14b UStG (8 years from 2025-01-01), with GoBD write-once archiving | End of the calendar year in which the invoice was issued (Section 147(4) AO) | Held in Stripe and the external accounting system, outside the Autopage database |
| E. Statutory | Business correspondence and contracts (Handelsbriefe) | 6 years (Section 257 HGB, Section 147 AO) | End of the calendar year of the last entry or of receipt or dispatch | External accounting system |
The unconcluded-experiment hold currently has no outer bound. The 90-day window for raw visitor events is suspended while the experiment those rows belong to has not concluded, so that a running test is not decided on truncated data. As implemented, "concluded" means the experiment reached its terminal state; an experiment that is paused, or left awaiting approval, holds its events for as long as it stays in that state. There is no maximum age at which those rows are deleted regardless. We disclose this rather than smooth over it: it is a known gap against Article 5(1)(e), it is tracked as a fix, and the fix is to define an outer bound after which the rows are purged whatever the experiment's state.
Account and tenant deletion is immediate. When the account owner deletes the organisation, all tenant-scoped data is wiped in a single transaction. There is no soft-delete, no scheduled grace tail, and no anonymised residue. This meets, and is faster than, the one-month maximum in Article 12(3) GDPR. There is no 30-day or 90-day post-closure retention window for account data.
Billing retention is 8 years, not 10.The German Bürokratieentlastungsgesetz IV reduced the retention period for accounting vouchers and invoices (Buchungsbelege) to 8 years with effect from 2025-01-01. The 2025 re-extension to 10 years applies only to banks, insurers, and securities institutions, not to a normal SaaS GmbH such as Finalform. The 8-year period runs from the end of the calendar year in which the invoice was issued (Section 147(4) AO), and overrides any shorter operational period for this category.
A request for erasure under Article 17 GDPR does not override a statutory retention obligation. Where a statutory hold applies, in particular the 8-year obligation for billing records and invoices and the 6-year obligation for business correspondence, the affected data is retained for the statutory period under the Article 17(3)(b) carve-out. During the hold the data is restricted from ordinary use under Article 18 GDPR rather than deleted, and it is deleted once the obligation lapses.
The contract acceptance ledger is class D, not class E. The ledger records which version of the Terms of Service, the Acceptable Use Policy and the Data Processing Agreement each account accepted, and for a pilot partner which version of the Pilot Order Agreement, with a snapshot of the company name declared at signup and the account email that name the partner, together with the time of acceptance, the language the document was read in, and the surface the acceptance was given on. It is erased with the account, as the last step of the account-deletion hook and after the tenant data is wiped, so that an account which still exists always still holds the evidence of what it accepted. No statutory hold reaches it, because the statutory records this policy recognises are held elsewhere: the two class E rows in Section 4 place the 8-year Buchungsbeleg hold for billing records and invoices, and the 6-year Handelsbrief hold for business correspondence and contracts, in Stripe and the external accounting system, outside the Autopage database. The one ledger entry that also evidences a concluded paid contract, the order confirmation, has its statutory twin in that same external place: the Stripe Checkout Session metadata written when the order is placed carries the confirmation timestamp, the version of the confirmation wording, and the remaining fields of the record, so the evidence a statutory hold would reach survives in Stripe's retention class rather than in this database. Keeping the ledger row past account deletion would therefore add nothing the statutory archive does not already hold, and would contradict the immediate and complete deletion this policy and the Data Processing Agreement both promise.
Marketing-consent records. Finalform retains records of marketing consent to be able to demonstrate, under Article 5(2) and Article 7 GDPR, that valid consent existed for any commercial email sent. These records are kept for as long as the marketing relationship is active and for a demonstrability tail after consent is withdrawn, then deleted. The fixed 5-year retention for telephone-advertising consent under Section 7a UWG applies only if Finalform conducts telephone advertising; by default Finalform does not conduct telephone advertising, so Section 7a UWG does not apply and email-marketing consent is governed by the general Article 5(2) and Article 7 demonstrability duty.
Routine deletion. Time-bound deletions in Section 4 run as a scheduled job rather than on an ad hoc basis, so that data does not accumulate past its period by default. The job runs once daily and covers raw visitor events, their session assignments, model-call telemetry, in-app notifications, expired dashboard sessions, and sign-in rate-limit counters. Each run attempts, per category, an evidence record of the cutoff it applied, the number of rows deleted, and whether the category completed or failed, so that the execution of this policy is evidenced rather than asserted; a failed evidence write is reported separately and does not prevent the deletion itself. Deletion is performed in bounded batches, which means a large backlog is cleared over successive runs rather than in a single long-running statement. The one category in Section 4 not yet covered, the dedicated security and access log, goes live before the first signed Data Processing Agreement; until then it is not separately retained, because it does not yet exist.
Derived aggregates lag the purge. Deletion removes the raw rows. Of the two aggregate layers computed from them, variant_metrics is a plain SQL view evaluated at query time and therefore reflects a deletion immediately, while context_variant_stats is a materialised view whose contents are refreshed on the periodic optimisation sweep and not by the purge itself. Between a purge and the next sweep, that materialised view can still hold population-level counts computed from rows that no longer exist. Those counts are identifier-free: they carry no session identifier and cannot be resolved to a visitor. We state this rather than omit it, because a deletion concept that describes only the primary tables would overstate how completely a deletion propagates.
Backups. There are no backups of the production database today. The database platform plan currently in use provides none: its backup entitlement is zero, so no backup schedule can be configured and no backup exists, verified in the provider control plane on 2026-07-30. For this policy that means a deletion has no backup tail: no copy of a deleted record survives in a backup and no restore can reintroduce one. Backups are a committed measure that goes live before the first signed Data Processing Agreement; once they exist they are retained only for a bounded period rather than indefinitely, data deleted from the live system is removed from them as they expire on the backup rotation cycle, any restore re-applies prior deletions, and backups are not selectively restored to retain deleted data.
The absence of backups is a resilience gap, not a deletion gap. It is recorded here because this policy describes where deleted data can survive, and today the answer is nowhere. The availability consequence is stated in the technical and organizational measures annex (Sections 5 and 6).
Review. Finalform reviews this policy and the retention schedule at least annually and on any material change to the engine, the snippet, the sub-processors, or the applicable law, whichever is sooner. The review confirms that each period is still no longer than necessary, that the minimisation measures still hold, and that the scheduled purge jobs are running as intended. The review is the responsibility of the deletion-execution owner named in Section 1.
For visitor interaction data and any other personal data that Finalform processes on behalf of a customer, Finalform acts as a processor and the customer acts as the controller. For that data, deletion or return at the end of the engagement is governed by the Data Processing Agreement (Auftragsverarbeitungsvertrag, Article 28 GDPR), not by this policy alone.
Under the Data Processing Agreement, at the end of the provision of the processing services Finalform deletes or returns the customer's personal data in line with the customer's choice and the agreement, except where Union or German law requires storage of the personal data (Article 28(3)(g) GDPR). The retention periods in Section 4 for class A visitor data describe Finalform's default operational behaviour during the engagement; the controller's documented instructions and the Data Processing Agreement prevail where they differ. The technical and organisational measures that protect this data during retention are set out in the technical and organisational measures annex (TOMs) to the Data Processing Agreement.