Last updated: 2026-09-26
Revision status: Dataset E's public boundaries and the OAI-API, ANTH-API, Lane D, JobEd and sign-in records are reconciled with internal ROPA v3.17 and transfer annex v2.9. Kollen has a legitimate-interest basis and a clear instruction not to submit private or sensitive data. ANTH-API is subject to a legal stop until dated provider/account evidence shows that processing outside the EEA is limited to the code- and annex-bound list, currently exactly the United States, with the DPF or SCCs and a country- and recipient-specific TIA; another country requires code and annex review. A fail-closed gate exists in the repository, but production deployment and live readback are unverified and are not asserted here. Zoho Mail has no positive release: new user-initiated inbound enquiries may be received, manually assessed and answered only to the strictly necessary extent after case-specific minimisation and under the matter's documented basis; no AI is used. Proactive or discretionary contact, campaign/relationship-building, automation, bulk processing and new integrations/features/data categories are STOPPED. Lane D is not subject to a blanket stop, but each use must first pass a simple, versioned, flow-specific assessment.
This page is aimed at municipal procurement officers and data protection officers (DPOs) who need to review Skolkoll's data processing prior to contract. For a general overview, see the privacy policy. For a data processing agreement (DPA), see the DPA template.
1. Roles and contact
In P1–P3, the municipality is the data controller and Skolkoll is the data processor for organisation memberships/roles, customer-directed imports and watches, and instruction-bound support/incident material. Skolkoll is separately the controller for C2 identity/access security, its own customer and billing administration, C4 watches requested by an anonymous visitor, and other own purposes in the privacy policy. Stripe/billing records and public-source data are not automatically part of the processor engagement.
Data processor (Skolkoll): Skolspegeln AB
Organisation number: 559359-7288
Contact for data protection enquiries: info@skolspegeln.se
Skolkoll has not appointed a Data Protection Officer (DPO) because the operation does not meet the criteria in GDPR art. 37 (the core activity is not large-scale monitoring of personal data; no special categories of personal data are systematically processed).
2. Processors, subprocessors and other recipients
The table lists providers by their actual role and processing activity. A provider is a Municipal Licence subprocessor only when it processes personal data in that processing chain; Zoho Mail and Zoho Campaigns instead process Skolspegeln's own controller activities. Processor/DPA terms and transfer mechanisms apply where required for the relevant role and processing. Providers used for user-selected social login process their own account and authentication stage under their own terms; country and transfer mechanism are assessed provider by provider and are not reduced to one shared US/SCC scenario.
| Provider | Service | Data category | Region | DPA |
|---|---|---|---|---|
| Google Cloud (Firebase) | Hosting, Firestore, Cloud Functions, Cloud Storage, Authentication, Cloud Logging | User accounts, organisation data, analyticsEvents, billing history, and access-controlled raw public annual-report/ESEF sources with their source-archive metadata. Runtime logs can contain operational user, organisation and request IDs, masked contact values in mapped flows, and runtime/error/stack context. The new journalist-order logging is narrower and code-limited to pseudonymous request/document IDs and minimised error/runtime classification (error type, allowlisted error code and numeric status); no contact details, order content, free text or provider error messages are logged there. | Repository configuration and the approved target specify europe-west1 (Belgium) for Firestore, Cloud Functions and Cloud Storage. An archived production readback dated 2026-09-05 establishes Firestore in europe-west1 and all eight production buckets in EUROPE-WEST1 or the EU multi-region. Firebase Hosting uses a global CDN. Firebase Authentication is covered by the Google Cloud DPA/SCCs/DPF without a separate europe-west1 assertion here. The logging configuration was verified by authenticated readback on 2026-09-05, after the deploy account was granted roles/logging.viewer. Outcome: the application logs were in global and were moved the same day to europe-west1 via a new bucket and a re-pointed _Default sink, with retention unchanged at 30 days. The audit logs (_Required, 400 days) remain in global in a locked bucket, which cannot be moved, deleted or have its retention reduced. No exclusions are configured on any sink, so no redaction occurs in the routing layer, and no CMEK key is set. The FAS-0 deadline of 2026-08-14 passed before the readback was done; it has now been completed and archived. Until then the gap blocked expansion and new log categories. | Google Cloud DPA (SCCs included) |
| Stripe Payments Europe Ltd | Payment processing (card + invoice) | Billing address, email, organisation number, payment metadata. Card details never pass through Skolkoll's servers. | Ireland (EU) primarily; some fraud-detection functions may involve Stripe US under SCC. | Stripe DPA |
| Resend Inc. | Service, transactional, expressly requested watch and technical email (including invitations, invoices, requested reports/exports, watch notifications and security alerts). Firebase Authentication handles its own account-verification and password-reset email. Resend is not used for campaigns, newsletters or trial nurture. | Email address, name, subject, message body (deleted at Resend after 30 days) | United States; transfers are covered by the EU Standard Contractual Clauses (SCCs) | Resend DPA |
| Zoho Corporation / Zoho Mail | Official monitored mailbox info@skolspegeln.se in Zoho One under a dated interim-risk restriction with no positive release. Pending transfer-evidence closure, new user-initiated inbound enquiries — including rights, privacy, incident, Municipal Licence, quote/demo, verification and journalist/direct matters — may be received, manually assessed and answered only to the strictly necessary extent after case-specific content and necessity minimisation. The basis follows the matter: a legal obligation where applicable; Art. 6(1)(b) only where the data subject is personally the prospective contracting party; otherwise documented Art. 6(1)(f) for the narrow read/minimise/respond purpose. Free text is not assumed to be public; Article 9/10 content requires a separately documented basis or no further processing. Content is not sent to AI. Proactive/discretionary contact, campaign or relationship-building, automation, bulk processing and new integrations, features or data categories in Mail are STOPPED. The FAS-0 deadline of 2026-08-14 passed without the evidence being closed. Those stops therefore remain, and the allowed minimised intake continues only while escalation is under way; Zoho Legal's 2026-09-08 response identifies SCC Module 3 for Zoho EU → Zoho India in prose. The account-specific DPA was signed on 2026-09-11, but its Schedule 1 is the article 28 processor clauses and states in its own clause 1(f) that they do not by themselves ensure Chapter V compliance, so the transfer mechanism remains supplier-asserted rather than contracted. Clause 5.1(i) makes EEA storage a contractual term, but Schedule 2 expressly permits Indian access and names India alone for EEA customers, while the supplier's own SOC 1, SOC 2 and ISO location annexes place Austin in the United States in scope for support. Our India assessment must address current law and the United States leg remains unsupported. The mailbox copy follows the same case lifecycle and hard cap as the underlying matter. Export, minimisation and verified deletion remain permitted. This proves neither Chapter V compliance nor tenant-level technical shutdown. | Name, email address, message, voluntary attachments and technical message headers | MX routing points to Zoho EU but is not used alone as proof of tenant region. On 2026-09-08 Zoho Legal stated that data remains in the EU and that India support staff have remote access under SCC Module 3. An account-specific processing agreement was signed on 2026-09-11; the tenant region remains unverified and the Chapter V mechanism supplier-asserted. Our focused India assessment under current law and the United States evidence remain open. | Zoho's published DPA/SCC terms |
| Zoho Corporation / Zoho Campaigns | Designated separate platform for campaigns and newsletters, not part of the site's Resend path. On 29 July 2026 complete open and link-click tracking were observed ON. The next send and every send-capable automation are STOPPED until the owner has used account-specific evidence to exclude unintended automations, verify DPA/SCC incorporation, complete dated unsubscribe and RTBF tests, verify retention/suppression, turn tracking off or document a separate purpose/LEK-ePrivacy/granular consent/withdrawal route, and approve the send manually. The gate is not verified as tenant-level technical enforcement. | Email, name, organisation/locale, consent provenance, list/segment, delivery status, suppression, opens and link clicks. Tracking requires a separate purpose, an assessment under LEK Chapter 9 Section 28/ePrivacy, granular informed consent and equally easy withdrawal unless a strict statutory exception is documented, or dated evidence that it will not operate for the send. | SPF routing points to Zoho's EU sender but is not used alone as proof of tenant region. Zoho publishes information about possible support access and subprocessors outside the EU/EEA. Account-/contract-specific incorporation, tenant region and the transfer assessment have not been verified in this revision and remain supplier-evidence follow-up. | Zoho's published DPA/SCC terms |
| Functional Software, Inc. (Sentry) | Error monitoring in the browser frontend; not Cloud Functions | On ordinary public pages, error messages and stack traces. On the signed-in paid surface (/konto, /en/account) Sentry does not load unless the build explicitly opts in, as of 2026-09-05: SKOLKOLL_SENTRY_ACCOUNT_ENABLED is a fail-closed build gate, and without an explicit truthy value the bootstrap is not rendered there. Removing the variable is a kill switch. The description below therefore covers what would be collected if the gate were opened: events are reduced to event ID, release, coarse account surface, error class and stack position; identity, request/response, URL query, breadcrumbs, DOM/input and arbitrary context are removed. Browser/OS may be processed by the SDK and source IP reaches Sentry's network edge. The separate project setting for IP scrubbing has not passed live readback, so we claim neither that full IP is always removed nor that it is never stored. | The repository CSP permits the German ingest origin ingest.de.sentry.io, but the production DSN, event region, actual storage region and IP-scrubbing setting have not passed live readback; no positive live-region or IP-removal claim is made. SCCs are required for any support by the US team. | Sentry DPA |
| Zoho Corporation / Zoho PageSense | Web analytics, A/B testing, heatmaps/session recording on public pages after consent | Page views, clicks/scrolling, heatmap and session-recording interactions, experiment variant, device and browser info. PageSense is not activated on noindex/account/admin pages and is loaded only after analytics consent. | EU script via cdn-eu.pagesense.io. Zoho publishes standard DPA/SCC terms, but account incorporation, live tenant region/plan and the focused transfer note remain unverified and are quarterly evidence checks | Zoho's published standard GDPR/DPA/SCC terms |
| Google Ireland Ltd / Google LLC — Google Analytics 4 | Code-level STOP. GA4_LEGAL_RELEASE_APPROVED = false prevents the measurement ID from being exposed and the loader from starting; an environment variable cannot open the path by itself. Production deployment and live readback remain pending. | No current transfer from the repository path. A future flow could include network metadata, page views, device information and approximate location. | No current recipient region is asserted. A future release requires a closed recipient/country list and the applicable adequacy decision or SCC/TIA. | Contract role, account/product terms, settings readback, the 14-month target and transfer mechanism are release evidence; there is no positive release. |
| CARTO | Code-level STOP. The direct external tile request has been removed from the repository map code; production deployment and live readback remain pending. | No current transfer from the repository path. A future tile service would receive IP/request metadata and map-tile coordinates. | No current recipient region is asserted. Reopening requires a closed recipient/country list and transfer assessment. | Role, terms, necessity and any Article 28/Chapter V mechanism must be documented before a reviewed code change. |
| Zoho Corporation / Zoho Desk | The separate Desk support surface does not accept new cases. New user-initiated support enquiries are instead received and manually assessed at info@skolspegeln.se under the Zoho Mail restriction. The current journalist connector is a code-level STOP regardless of general tenant, contractual or retention evidence: its contact model lacks order binding and tested matching deletion/minimisation. Journalist orders are not disclosed to Desk and no full-content fallback email exists. | For a future separately approved support flow: minimum necessary name, email address, organisation membership, ticket content/history and voluntary technical attachments. Any future journalist replacement must use an order-bound object without cross-purpose merging. No automated AI analysis, risk classification or private analysis comment is created. | Zoho publishes an EU-hosted Desk endpoint and standard DPA/SCC terms, but account incorporation, live tenant region/plan and the focused transfer note remain unverified; the surface is stopped and is a quarterly evidence check | Zoho's published standard GDPR/DPA/SCC terms |
| Zoho Corporation / Zoho CRM | The current journalist connector is a code-level STOP regardless of general evidence or flags: its global email-deduplicated contact model is not order-bound. No journalist order is disclosed to CRM. A future replacement requires order-bound objects and tested matching deletion/minimisation before the code stop is removed in the same reviewed change. | No current CRM record. For a future approved replacement design: minimum order-bound contact metadata without order free text, Description, cross-purpose merging or later relationship/campaign contact. | Public EU API endpoint via www.zohoapis.eu. Zoho publishes standard DPA/SCC terms, but account incorporation, live tenant region/plan and the focused transfer note remain unverified; the surface is stopped and is a quarterly evidence check | Zoho's published standard GDPR/DPA/SCC terms |
| Anthropic / OpenAI | The user-initiated "Kollen" AI chat, AI-based school-image stylisation after either the form flow's current consent and hash-bound review or a separate rights-cleared import gate without form consent, and internal document extraction (Lane D). Journalist email is not part of the AI flow. See "Internal AI support" below. | Kollen processes the user's chat message and school context; the user is instructed not to submit private or sensitive data. School-image stylisation sends the image file to OpenAI, but not contact details, photographer name, rights-holder name, source links, photo dates or free-text form notes. Lane D processes material from public records after a simple flow-specific assessment. Kollen and Lane D use the providers' data-protection settings appropriate to the current flow; this is not a ZDR claim. Journalist email is not sent automatically to an AI provider. | OpenAI: the United States and individually named countries and mechanisms approved in its scenario. Anthropic: API data is stored in the United States; no other non-EEA country is approved while the provider's Europe, Asia and Australia region statement lacks a complete country list. Kollen requests are therefore subject to a legal STOP until dated provider/account evidence shows that processing outside the EEA is limited to exactly the United States, with the DPF or SCCs and a country- and recipient-specific TIA under transfer annex v2.9. The repository contains a fail-closed gate; production deployment and live readback remain pending. Another country requires code and annex review before a request. | Anthropic DPA · OpenAI DPA |
| Identity providers (Google, Microsoft, GitHub, Facebook/Meta; Apple not yet launched) | User-selected social login (OAuth/OIDC) for Skolspegeln's C2 account security. No extra provider scopes are added. Apple is hidden as a new sign-in option until its production configuration is verified. | Basic identity for sign-in, normally name and email address, from the selected provider | Provider-specific: Google global; Microsoft tenant-dependent; GitHub conservatively United States; Meta global. The actual recipient determines whether adequacy, the DPF or SCCs are used. | Each provider's account terms and privacy notice; the provider is independently responsible for its account/authentication stage. |
| Customer organisation IdP (SAML/OIDC) | Customer-controlled Municipal Licence sign-in (P1), only after an organisation- and provider-specific assessment and technical p1Approved approval | Work email, stable provider identity and the organisation/role claims instructed and approved by the customer | Established per customer and IdP before activation; missing approval blocks discovery, verification, auto-join, enforcement and reauthentication. | The customer's instruction, DPA and provider-specific role/Article 28/transfer evidence are required before activation. |
AI processing of school images
Before a new model request, one of two alternative gates applies. An image from the school-image form requires the current server-validated AI-consent/policy version and a positive editorial review bound to the current image hash, licence/rights attestations and exact optional author URL, confirming the rights basis and no identifiable people. A separate rights-cleared import does not require or claim form consent; it instead requires a distinct positive import review bound to the current image hash and source/licence/rights evidence, together with LIA §7.1 and the applicable Article 14 provenance. The current schoolImageSubmissions.aiEligibilityReview implements only the form gate, so the import route must use a separately recorded reviewed gate before model processing. Missing or mismatched evidence stops new and retry requests; completed processing that satisfied its applicable gate is not regenerated. For a form image, the photographer name and exact review-bound HTTPS link are published only where CC BY 4.0 or CC BY-SA 4.0 requires them. Where the submitter is the photographer, the current v3 review records direct information through the version-bound collection notice. A named third-party photographer must otherwise receive direct information within the Article 14(3) time limits. Article 14(5)(b) may replace direct information only after a dated and signed legal record has been registered expressly for the exact source and publication; the empty server-controlled registry is fail-closed. The tracking ID LIA-SCHOOL-IMAGE-ATTRIBUTION-14.5B-2026-07-30 does not activate the exception: a verified prior attribution source must still be documented for the same source and publication. Legacy school-image-ai-eligibility-v2-author-url-bound evidence may not publish a name or link and must be reviewed again; the chalk image itself does not need regeneration. CC0 collects and publishes no photographer/rights-holder name or person/source link. An optional photo date is used for review only and is not published. Skolkoll runs no separate AI moderation step. Only the image file and a static style instruction are sent to OpenAI — never contact details, photographer name, rights-holder name, source link, photo date or free-text form notes. According to OpenAI Data Controls, checked on 2026-07-29, the image flow's /v1/images/edits endpoint has no application-state retention. Standard abuse-monitoring logs may nevertheless be retained for up to 30 days; image content flagged by the provider's safety systems may be held for manual safety review, and longer retention may occur where required for safety or legal obligations. These are endpoint-specific exceptions, not a ZDR claim.
Internal AI support
Kollen. The chat is activated by the user and processes the question on the basis of legitimate interest (Article 6(1)(f)) under a documented balancing test. The interface instructs the user not to enter private or sensitive information. That instruction is the adopted preventive safeguard; no general technical free-text block is claimed. The instruction is not, however, an Article 14 exception if a user nevertheless submits data about another person. The open notice here and a documented proportionality assessment are used as compensating measures; if Skolkoll becomes concretely aware of the person and has contact details, individual notice is provided within the timing required by Article 14(3), unless an applicable exception is documented. Kollen is not approved for Article 9 or 10 data. If Skolkoll becomes concretely aware that such content was nevertheless submitted, further use of that content in the session stops; it is not reused or content-logged, and any incident/risk assessment is performed without copying the content. The legal basis does not replace the third-country gate: no request may run while Anthropic can route non-EEA processing to an unnamed country.
Document extraction (Lane D, OpenAI). Officially published public documents may be used after a simple, documented and versioned assessment for the current municipality/portal/layout flow. The repository controls preflight the whole document before every model request: private-source markers, personal identity numbers/pupil-identifying contexts and Article 9 or 10 indicators stop the document, while email addresses and phone numbers are removed from the separate provider copy. Classification can produce false negatives and this remains a residual risk. The controls are implemented and tested in the repository, but production deployment and live readback remain pending; no production use is approved on the strength of this text until they are verified. No extracted value is published automatically: candidates enter a human-reviewed queue. The legal basis is legitimate interest (Article 6(1)(f)); neither ZDR nor document-by-document review is a blanket requirement for this bounded public category. Lane D uses /v1/chat/completions with store: false, so no response application state is created for the flow. That does not exclude the provider's other retention paths: prompt caching may retain encrypted KV tensors in GPU-local storage for up to 24 hours, standard abuse-monitoring logs may be retained for up to 30 days, and longer retention may occur where required for safety or legal obligations. The flow is therefore not described as retention-free or ZDR.
Journalist email and other user-initiated direct enquiries. A new inbound matter may be received, manually assessed and answered only to the strictly necessary extent after case-specific content and necessity minimisation under Zoho Mail's dated interim-risk restriction. The basis follows the matter as stated in the provider row above; free text is not assumed public and Article 9/10 content requires a separate basis or no further processing. Message content is not sent to Anthropic, OpenAI or another AI service. Proactive/discretionary contact, campaign/relationship-building, automation, bulk processing and new integrations/features/data categories are STOPPED. The FAS-0 deadline of 2026-08-14 passed without the evidence being closed; only the minimised intake continues, while escalation to a lawful replacement channel is under way.
For P1–P3 Municipal Licence data we use no advertising networks, marketing platforms or social-media pixels. Zoho PageSense may run only after explicit cookie consent from visitors on public, indexable pages. Google Analytics 4 is additionally stopped in code through GA4_LEGAL_RELEASE_APPROVED = false regardless of consent; a future opening requires a reviewed code change and complete release evidence. PageSense tracking is not run for signed-in municipal users. Internal usage statistics are collected through our own anonymous collector in Firebase without personal data.
Notice of subprocessor change
While a Municipal Licence is active, we notify the agreed contact person, DPO and the organisation's administrators by email at least 30 days before adding or replacing a subprocessor. The municipality has the right to object during that period — objections are handled per the Municipal Licence agreement's termination clause. We do not use the new subprocessor for the municipality's personal data before the objection has been handled or the termination period has expired.
3. Retention periods per data category
Periods are measured from the most recent event (e.g. last login, last payment). After the listed time the data is deleted or anonymised.
| Data category | Firestore collection | Retention | Legal basis |
|---|---|---|---|
| User accounts (profile, memberships) | users, organizations/{id}/members | Until deleted by the user. Inactive accounts (24 months without login) receive a reminder and are deleted after 36 months. | P1: the customer's documented instruction for membership/role. C2: legitimate interest (art. 6.1.f) for necessary identity, access and security administration; art. 6.1.b only where the data subject is personally a party to the contract. |
| Organisations + Pro subscriptions | organizations, organizations/{id}/subscriptions | Active for the lifetime of the subscription. Billing history retained for 7 years (Swedish bookkeeping act). | Customer instruction for customer-governed organisation data; Skolkoll's own customer administration uses art. 6.1.b only where the data subject is personally a party to the contract, otherwise documented art. 6.1.f. Art. 6.1.c applies to the specific bookkeeping records. |
| Analytics events (raw) | analyticsEvents | 90 days, then individual events are deleted. Aggregated daily summaries (no personal data) are retained until further notice. | Legitimate interest (art. 6.1.f) — product development. No personal data is stored (sessionId is random, no IP, no user-agent). |
| Widget beacon and abuse triage | widgetAbuseLog | Only anomalous or suspicious widget loads are logged. Entries are written with expiresAt = now + 30 days. A live readback on 2026-07-30 reported widgetAbuseLog.expiresAt as ACTIVE; this proves policy state, not deletion of a particular expired sample. Firestore deletion is asynchronous after expiry. | Legitimate interest (art. 6.1.f) — attribution, rate limiting, abuse and security traceability. Contains embedder origin, widget type, municipality/school slug, anomaly flags and a salted IP hash; no cookies. |
| Legacy mail contacts and campaign records | mailContacts, mailContactEmailClaims, mailLists, mailCampaigns, mailSends, mailWebhookEvents | The first-party campaign system is retired and makes no new sends. The periods are absolute caps and do not themselves supply a legal basis. After the old seven-day link grace, records without a current collection-bound C5 decision are erased; a valid decision causes immediate minimisation. Everything else is erased earlier. The retired uniqueness reservation mailContactEmailClaims is always erased and is not reused as a second suppression copy. Caps: confirmation link 48 hours, unsubscribe link 7 days, unsent inactive draft 90 days, webhook event 30 days, and minimised evidence/suppression 24 calendar months. The repository contains a daily cleanup job and a dry-run-first one-time migration, but production deployment, live inventory and completed erasure have not yet been verified. | Consent was only the basis for the historical newsletter send and processing before withdrawal. After withdrawal or purpose end, minimum evidence/suppression requires a concrete C5 purpose and Art. 6(1)(c) where a specific duty applies, otherwise a documented Art. 6(1)(f) balancing. Technical email and watch notifications use separate systems. |
| Retired trial-nurture markers | trialNurtureSent and former onboarding fields on the organisation record | A one-time post-deployment cleanup removes the collection and the fields trialOnboardingGuideSendingAt, trialOnboardingGuideSentAt and trialOnboardingGuideProgress. The migration requires explicit project confirmation before execution. | The markers do not prove consent or another legal basis for the historical trial sends, and no such basis is asserted retroactively. Current access is limited to necessary retirement, erasure and accountability under art. 6.1.c where a duty applies, otherwise art. 6.1.f. |
| Campaign and newsletter contacts | Zoho Campaigns (external service, not Firestore) | Skolspegeln's governing target is active contact data until withdrawal, unsubscribe or purpose end and no more than 24 months for minimum suppression/consent proof and identifiable recipient reports. A specific existing or threatened claim requires a separate C5 control. The account's actual erasure/RTBF configuration and enforcement of the 24-month target have not been attested in this revision and remain supplier-evidence follow-up; the provider's possible five-year maximum has not been adopted as Skolspegeln's retention period. | Sends and separately approved tracking: consent (art. 6.1.a), plus separate MFL and LEK Chapter 9 Section 28/ePrivacy assessments. Consent is not reused as the basis after withdrawal; minimum proof/suppression relies on art. 6.1.c where GDPR/MFL requires it, otherwise a documented art. 6.1.f balancing to prevent re-contact or defend a claim. |
| Audit log | auditLog | 2 years. Each new entry is written with expiresAt = now + 2 years. A live readback on 2026-07-30 reported auditLog.expiresAt as ACTIVE; this proves policy state, not deletion of a particular expired sample. TTL deletion is asynchronous after expiry. | Legitimate interest (art. 6.1.f) — security, traceability, access-control review and dispute/incident investigation. |
| Pseudonymous account-deletion audit | accountDeletionAudit | At most 12 months through expiresAt, whether the status records completed deletion or a retryable/blocked step. The document ID and account reference are separate domain-separated SHA-256 hashes; the entry contains subjectHash, email hash, status, safe error steps and cleanup counters, but neither raw uid nor raw email address. It is not a continuing account. A live readback on 2026-07-30 reported the policy as ACTIVE, which does not prove asynchronous deletion of a particular expired sample. | Legitimate interest (art. 6.1.f) for minimum evidence of completion or a failed step; art. 5.2 is an accountability principle, not a separate legal basis. |
| API usage quota | apiQuota/{orgId}/months/{YYYY-MM} | 13 months (for billing reconciliation and dispute). | Customer instruction for customer-directed quota handling; Skolkoll's separate quota, billing and dispute control: legitimate interest (art. 6.1.f). Art. 6.1.c applies only where a concrete bookkeeping requirement covers the data. |
| Watchers | watchers, watcherEvents | Active watches are stored until the user ends them, deletes the account or the customer instruction ends. Pending confirmations have a 48-hour token window. On unsubscribe, the email, confirmation/unsubscribe bearer tokens and other direct watch fields are deleted immediately; a minimised closed tombstone with the hash, status and close/expiry clocks may remain only for documented suppression/accountability and at most 24 calendar months, with earlier deletion at purpose end. The daily cleanup job backfills older closed rows, minimises them and purges tombstones when the clock is due; production deployment, first run and live readback are not yet verified. watcherEvents are normally cleaned within 35 days. | C4: consent (art. 6.1.a) for anonymous double opt-in. P2: the customer's documented instruction for organisation-governed Municipal Licence watches. Art. 6.1.b only where the data subject is personally a party to the contract. |
| Commercial lead forms | leadSubmissions | 90 days through purgeAfter. A live readback on 2026-07-30 reported the TTL policy as ACTIVE, which does not prove deletion of an expired sample. The record contains name, email, organisation, phone, message, source/surface, locale, versioned Article 13 notice and UTM fields. The form instructs users not to submit private, sensitive or other people's data. Free text remains only in the access-restricted Firestore record for manual handling and is never sent to CRM Description; no retired marketing-consent field is collected. Z-CRM is STOPPED and creates no new provider record. | Art. 6.1.b only where the data subject is personally the prospective contracting party; otherwise documented legitimate interest (art. 6.1.f) for necessary technical receipt and access-restricted storage, case-specific manual minimisation/response, abuse prevention and operational recovery. AI/content analysis and proactive contact are outside that purpose. Unexpected Article 9/10 or third-party data requires a separate basis/condition or is minimised/deleted. |
| Correction form for published school data | correctionSubmissions | Controller target: email, any name (only for manual or API records), user-agent and free text are erased or anonymised 90 days after the case is closed, and no later than 12 months after receipt; de-identified case data remains. Rights matters (art. 15–21), including manually logged email matters of that kind, instead follow C5's evidence class. No automatic purge is in operation (control gap); state 2026-09-03: no record has been purged. Manually logged email matters sit in the same collection and follow the same target. The record contains school/page, issue type, free text, any link, source link and school-unit code, optional email, locale, user-agent and time of receipt; no IP address in the record. | Documented legitimate interest (art. 6.1.f) for necessary technical receipt, access-restricted storage, case-specific minimisation and the reply the form offers. A report concerning the data subject's own data is handled as a rights request (art. 15–21) with the art. 12.3 period counted from receipt. |
| Municipal Licence demo | demoSessions (intake removed in code 2026-09-07; ceases in production at deployment, storage ongoing) | Delete in full. The scheduled cleanup was removed with the endpoint. The purgeAfter TTL override is retained but does not cover everything: the field was introduced on 2026-08-01 while the demo went live on 2026-05-05, so records from the three intervening months carry no purgeAfter and TTL never touches them. The 30-day field-level redaction of raw IP and user-agent was performed by the job and cannot be done by TTL. The one-time erasure — target 2026-09-21, responsible Sales privacy owner, with a readback showing zero documents — is verified only for the Firestore documents in demoSessions. Production PITR windows, backup exports and the email provider's (R-EMAIL) recipient, message and token metadata fall outside that verification and follow their own schedules. The TTL override is removed only once the readback exists. | Historic basis, unchanged for the records that remain: for a user-initiated lead/demo enquiry, art. 6.1.b applies only where the data subject personally is the prospective contracting party; otherwise a documented art. 6.1.f assessment covers necessary manual receipt, case-specific minimisation, response and abuse prevention for a self-requested B2B demo. That purpose ended with the demo, so no basis remains for further retention and erasure is due under art. 5(1)(e)/17(1)(a). |
| Requested public-data event watch | dataEventSubscriptions | Unconfirmed double-opt-in records are cleaned after about 30 days through confirmExpiresAt; the TTL policy was verified ACTIVE on 2026-07-26. Confirmed watches are retained until unsubscribe. On unsubscribe the entire document must be deleted immediately; no inactive record, tombstone or suppression hash may be retained. A separate backfill must remove older residue from the previous behaviour. The legacy /api/newsletter/** address is a compatibility route: it does not enrol a person in a campaign/newsletter and messages contain only matching public-data events and service links. | Consent (art. 6.1.a) for the expressly requested watch. |
| Journalist data orders | journalist_orders | FAS-0 decision: the Firestore record is deleted once the order is handled plus a recovery window, with a target of 180 days from submission. Each record is written with a purgeAfter field. A live readback on 2026-07-30 reported that exact TTL policy as ACTIVE; this proves the configuration state, not that a particular expired sample has completed Firestore's asynchronous deletion cycle. Orders unresolved after 180 days require documented approval and have a 12-month hard cap. The current Desk/CRM models are stopped in code and create no provider record. A future approved replacement must delete the whole order-bound provider record when the order purpose ends or consent is withdrawn, and always no later than the order hard cap. Longer retention requires a separate future purpose, legal basis and notice. The order free text and a Description field must not be sent to CRM. | Consent (art. 6.1.a) for storing and handling the form order and providing a contact response. Art. 6.1.b applies only if the data subject is personally the prospective contracting party and has requested pre-contractual steps. Legitimate interest (art. 6.1.f) applies only to necessary abuse prevention and operational recovery, not to order handling, the contact response, editorial follow-up or an ongoing relationship. No campaign or newsletter use without separate consent/provenance. |
| School-image submissions and rights data | schoolImageSubmissions | Pending submissions become due for deletion 180 days after upload even after return to review; rejected submissions become due 90 days after the decision. For approved images, the minimum image, licence, attribution, source and review provenance is retained while the image is used or rights claims may reasonably need to be handled. Contact details, photo date, review free text and other intake-only fields become due for minimisation 180 days after approval; legacy CC0 names and links are covered by the same pass. The daily cleanup job performs due deletion or minimisation in the next successful run that reaches the record; queueing or operational failures can delay execution. The photo date is never published for a form image. | For form submissions: consent (art. 6.1.a) only for the submitter's own contact data and selected AI processing, together with the licence agreement. Where CC BY 4.0 or CC BY-SA 4.0 requires attribution, the photographer's name and any exact image-hash/licence/URL-review-bound HTTPS link are processed and published on the basis of legitimate interest (art. 6.1.f) and the applicable Article 14 route. A named third-party photographer must receive direct information within the Article 14(3) time limits; Article 14(5)(b) may replace it only where a dated and signed legal record exists for the exact source/publication. The empty server-controlled registry is fail-closed. CC0 intake and projection contain no person attribution. |
| Queue for public school-image revocation | schoolImageSubmissions.imagePurge with query field imagePurge.dueAt | Queue and retry fields follow the submission/deletion matter's schedule and are minimised after a verified outcome. processing.publicUnrecoverableAt means verified public inaccessibility after deletion of the active generation or an object already absent from the public path; it does not prove physical deletion of every provider byte. non_current_generation may not finalise and instead enters retry/reinventory. Soft delete/provider retention may remain after public inaccessibility. | Art. 6.1.c where a concrete erasure/rights obligation applies; otherwise documented legitimate interest (art. 6.1.f) for safe execution and accountability. |
| Pseudonymised deletion audit for expired pending/rejected school images and immediately deleted people images | imageCleanupAudit | 24 calendar months from the deletion anchor identified by the entry's deletionScope: deletion of the source record for ordinary retention cleanup, or verified image-file deletion for an immediate people-image purge where the image-less source record remains until its ordinary deadline. Each new entry is written with expiresAt = deletedAt + 2 calendar years. If Storage deletion remains, the status is pending_storage; only after the affected files are confirmed deleted is it set to completed with storageCompletedAt, without moving the earlier expiry. The people-image purge audit is best-effort so an audit failure never blocks deletion of the image; durable purge state remains in the source record. A bounded migration that only shortens older expiry values has been prepared, but its production dry run, apply, legacy-status reconciliation and readback have not yet been documented. A live readback on 2026-07-30 reported imageCleanupAudit.expiresAt as ACTIVE; this proves policy state, not that older seven-year expiry values have been shortened or that a particular expired sample has been deleted. The entry is minimised but remains pseudonymous personal data: it contains submissionId, cutoff date, deletion reason, scope, status, deletion/completion timestamps and an optional HMAC-SHA-256 hash of the contact email — not raw contact data, image files, school name or free text. A concrete legal claim is handled in a separate restricted evidence record with its own deadline and does not extend this audit entry. | Legitimate interest (art. 6.1.f) and accountability under GDPR art. 5.2 — being able, for a proportionate normal period, to answer the status of the scope-defined deletion without retaining raw personal data. |
| AI chat conversation | Browser sessionStorage only — never on our server. | Deleted when the browser tab is closed. | Legitimate interest (art. 6.1.f) under a documented balancing test — a user-initiated question service with an instruction not to submit private or sensitive data. |
| AI audit log | ai-audit-log | Each entry is written with expiresAt = now + 90 days. A live readback on 2026-07-30 reported ai-audit-log.expiresAt as ACTIVE; this proves policy state, not deletion of a particular expired sample. TTL deletion is asynchronous after expiry and cannot be guaranteed exactly on day 90. | Legitimate interest (art. 6.1.f) — pseudonymised abuse and security traceability. |
4. Right to erasure — operational flow
You can exercise the right to erasure (GDPR art. 17) in the following ways, sorted from fastest to most manual:
AI audit log — TTL and manual deletion
The AI chat does not permanently store questions or answers on Skolkoll's server. For abuse and security traceability, the server makes at most one asynchronous write attempt to the Firestore collection ai-audit-log per eligible processed Kollen request. The response does not await that write, failures are logged, and storage is therefore not guaranteed. A stored entry contains call type, a keyed and domain-separated HMAC-SHA-256 pseudonym for the IP address truncated to 16 characters, school context as an exact eight-digit school-unit code or null, question and answer length, status, timestamp, and expiresAt.
Normal retention is 90 days: each entry is written with expiresAt = now + 90 days. A live readback on 2026-07-30 reported ai-audit-log.expiresAt as ACTIVE; this proves policy state, not deletion of a particular expired sample. Firestore's TTL mechanism deletes the entry asynchronously after expiresAt; TTL is not an exact deletion timestamp.
To request earlier deletion, email info@skolspegeln.se with the approximate time and any school context for the AI call. We then search server-side for matching entries and manually delete identifiable matches using the Admin SDK. If an entry cannot be matched without collecting additional data, it remains until the TTL retention expires.
School-image submissions — unpublication and deletion
If you have submitted a school image, you can request unpublication, deletion or correction of photographer/rights-holder data by emailing info@skolspegeln.se. Include the school, approximate upload time and the email address used in the form. Rejected submissions become due for deletion 90 days after the decision and are handled by the next successful daily cleanup run that reaches the record. The cleanup flow leaves a minimal, pseudonymised audit entry in imageCleanupAudit. The query field imagePurge.dueAt makes pending matters discoverable. Only verified deletion of the active generation or an object already absent from the public path may set publicUnrecoverableAt; a non-current generation enters retry/reinventory. The timestamp means public inaccessibility, not proof that a soft-delete window, provider retention or every physical byte has ended. For approved/published submissions we perform a manual rights check before deletion, because attribution and rights tracking may need to be retained to handle licence or dispute questions.
Journalist data orders — manual deletion
If you have submitted a no-account data order, you can request deletion or correction by emailing info@skolspegeln.se. Include the approximate time, outlet/newsroom and the email address used in the form. We then search for matching journalist_orders records and manually delete or correct identifiable matches unless there is an ongoing delivery, dispute, regulator request or other legal basis for continued limited retention. The current journalist connectors to Desk/CRM are stopped in code and create no supplier record. If a quarantined legacy Desk/CRM record from earlier operation is actually found, it is included in the same correction or erasure assessment, subject to any applicable basis for limited continued retention. Any future approved replacement must be able to carry out the corresponding correction or deletion within the same order-bound lifecycle.
Self-service — user account
- Sign in to the Skolkoll portal.
- Go to Account settings.
- Click Delete account. Confirm the dialog.
- The account, your memberships, watchers and profile information are deleted immediately from the database.
What is not deleted automatically with the account: billing history is retained for 7 years under Swedish bookkeeping law. Audit-log entries (auditLog) have 2-year retention. accountDeletionAudit uses a hashed document ID and subjectHash and retains email hash, status, safe error steps and cleanup counters for at most 12 months; it contains neither raw uid nor raw email and is not a continuing account. A live readback on 2026-07-30 reported both TTL policies as ACTIVE; this proves policy state, not deletion of an expired sample, and deletion is asynchronous after expiry. Aggregated analytics data already contains no personal data and is unaffected.
Erasure request — Municipal Licence administrator
As a municipal admin you can request erasure of a specific employee from the organisation by emailing info@skolspegeln.se. We acknowledge receipt within 1 working day. Our internal target is to make an individual decision and, if the request is granted, complete the erasure within 14 days. Information on action taken is provided without undue delay and no later than one month after receipt under Article 12(3). Where necessary, the period may be extended by up to two further months, taking account of complexity and the number of requests; we notify you of the extension and reasons within the first month, and the final response may be provided during the extension period.
Removal request — named roles in the review service
Skolkoll no longer publishes head teachers' names as baseline data on school-unit pages, in open data files, APIs/exports or structured data. The same applies to representative names from annual-report data — board members, auditors, authorised signatories and report signers. Person-name fields are removed unconditionally at the public serving boundary (name-free by design). While G5 is open, new or recurring population-wide internal name processing is paused; existing names may be used only for documented data cleanup, rights requests or a concrete, pre-documented editorial case with its own assessment. How to request removal or object to the processing:
- Head teacher: email info@skolspegeln.se with the school's unit code. The baseline display contains no head-teacher name. If a name nevertheless appears on an automated public surface due to an error, include the link; we remove the erroneous publication within 14 days, investigate the failed publication boundary and ensure that the name does not return through the automated synchronisation. A request concerning the non-public processing is handled under section 5.
- Board member, auditor, authorised signatory or report signer: email info@skolspegeln.se with the operator's organisation number and your role. To identify the correct record, we may also need your full name or a source/case reference even when the request concerns non-public processing. The details are used only as far as necessary for identification; your name is never entered in the block or audit evidence. If the request concerns an actual publication, also state where the name is shown (a link or page description). A request can also be registered preventively, as a block should the publication state change. Manual process: we acknowledge receipt within 7 days. Our internal target is to make the individual decision and, if the request is granted, implement it within 14 days. Information on action taken is provided without undue delay and within one month of receipt (GDPR Article 12(3)). Where necessary, the period may be extended by up to two further months; we notify you of the extension and reasons within the first month, and the final response may be provided during the extension period. Here too, a removed record is blocked from returning on future imports.
- The establishment's registered contact address: email info@skolspegeln.se and state the address — it is the identifier, and a block on the address covers every school unit you are responsible for. The address is the contact route the operator itself registered with the National Agency for Education's register for publication, and we reproduce it as registered. Where it takes the form firstname.lastname@ it does, however, identify you as a natural person, and an objection is then assessed individually under section 5. If it is upheld, the address is suppressed across all our surfaces and blocked from returning on future imports. If you have protected personal data, or are exposed to threats or domestic violence, we implement the suppression immediately and assess the case afterwards — we require no evidence and do not ask you to contact anyone else first.
If you instead want to object to the processing as such — which places the burden of proof on us — see section 5.
5. Your right to object (Article 21 GDPR)
This information is provided explicitly and separately from other information, as required by Article 21(4) GDPR.
If Skolkoll processes your personal data in a concrete permitted case on the basis of legitimate interest (Article 6(1)(f)) — including the establishment's registered contact address where it takes the form firstname.lastname@, and necessary handling of existing head-teacher names or company-representative roles within the narrow G5 framework in section 6 — you have the right to object at any time to the processing, on grounds relating to your particular situation. The right to object applies to the processing as such even though the public baseline display is name-free.
Once you have objected, we may no longer process the data unless we can demonstrate compelling legitimate grounds for the processing which override your interests, rights and freedoms. The burden of proof is on us, not on you.
How to object: email info@skolspegeln.se. State your role and identifiers: the address if the objection concerns the establishment's contact address; the school unit code if you are a head teacher; the operator's organisation number and your role if you are a board member, auditor, authorised signatory or report signer. For a non-public record, we may additionally need your full name or a source/case reference to identify the correct record. The name is used only for identification and is never entered in the block or audit evidence. If your name appears on an actual surface, also state where it is shown (a link or page description). Preferably describe the circumstances you rely on. We acknowledge receipt within 7 days, assess the objection individually and in a documented manner, and have an internal target to decide and, if the objection is upheld, implement the measure within 14 days. Information on action taken is provided without undue delay and within one month of receipt (Article 12(3)). Where necessary, the period may be extended by up to two further months; we notify you of the extension and reasons within the first month, and the final response may be provided during the extension period. If we cannot demonstrate compelling legitimate grounds, the processing ceases or is restricted and any actual named publication is removed. The automated baseline display remains name-free regardless.
What we weigh when the objection concerns a contact address. The record remains in the National Agency for Education's public register even if we suppress it, and anyone can retrieve it from there. The effective step is therefore rectification at the source — with the operator, which registered the record, and where relevant with the Agency. If you have already requested that, we weigh it in: it shows that your situation is concrete and ongoing, and it makes suppression on our side a meaningful bridge pending the rectification. But it is not a precondition for us to assess your objection, and not having done it can never on its own carry a refusal. The burden of proof for a refusal rests with us.
What a suppression does not reach. We govern our own publication going forward. The record may remain in copies already retrieved by others, in search-engine caches, in web archives and in the Agency's register. We therefore never promise that a record has been removed from the internet — only that we no longer publish it.
If you are not satisfied with our decision you can complain to the Swedish Data Protection Authority (IMY) — see section 12.
To the extent a given surface is covered by the journalistic exemption (chapter 1, section 7 of the Swedish Data Protection Act), Article 21 does not formally apply — we nevertheless assess every objection under the framework above. Our assessment of the position following the Court of Justice's judgment in case C-199/24 of 9 July 2026 is kept current through ongoing review as new case law or guidance from the Swedish Authority for Privacy Protection emerges, and this page is updated accordingly.
6. Information under Article 14 — named roles in the review service
Personal data obtained from public registers is normally subject to the information duties in Article 14 GDPR. While DPIA gate G5 is open, population-wide processing of named person roles is paused. For the separate access-controlled raw-source archive, source-archive assessment v1.3 has made the Article 14(5)(b) assessment conditional: individual notice to the whole group would require Skolkoll to build the person and contact mapping that data minimisation is intended to avoid. The dedicated archive row below is published safeguard information for this flow. On 26 September 2026, the Swedish and English production notices were verified together with the archive's access, storage and retention controls. Routine archiving is permitted within this boundary after documented activation under the source-archive assessment. Access and retention controls apply continuously; if a start condition is no longer met, new routine writes must stop. If we become concretely aware of an affected person and have a usable contact route, we provide direct notice within the Article 14(3) time limits unless another documented exception applies. Any other new person-role processing requires its own pre-documented Article 85 and Article 14 assessment; otherwise individual notice is provided no later than one month, or earlier at the first contact or disclosure. This page supplements the privacy policy and the publication policy (Swedish: publiceringspolicy).
| Category of personal data | Source | Legal basis | Retention / mirroring logic |
|---|---|---|---|
| Incidental names, professional roles, signatures, business contact details or work address, portrait or short professional biography, and named holdings, remuneration or related-party context already present in unchanged original files of officially published annual reports or ESEF reports. The archive has no OCR/full-text or person index; those data may not be written to derived layers. Material containing Article 9 or 10 data or private material is outside this decision. If such material is actually detected, new writes and further use stop and the material is deleted, unless a separately documented incident or legal condition requires the minimum access-restricted retention. | Bolagsverket/HVD, ESEF registers, and the issuer's or institution's official publication channel | Legitimate interest (Art. 6(1)(f)): enabling verification of provenance and reproducibility and correction of the interpretation of name-free financial data. The narrow necessity and balancing assessment is recorded in source-archive assessment v1.3. Article 14(5)(b) is relied on only for this bounded archive; if we become concretely aware of an affected person and have a usable contact route, direct notice is provided under Article 14(3) unless another documented exception applies. | A 30-day notice precedes access review no later than 12 months, and material is deleted when the purpose ends, normally no later than 24 months after retrieval. The repository contains a daily control whose request window is designed to subtract the live-read soft-delete duration, or a conservative planning fallback when live evidence is unavailable, plus a separate seven-day failure/retry buffer. The control has, since 2026-08-25, been run in production — the first run is complete and the inventory result exists (10,230 objects, 5,115 entries, zero due). What is still not asserted is an executed purge sample: nothing was due at the time of the run, and such a sample cannot be fabricated — it must await a genuinely due entry or a deletion via a rights request. A separate exception must be decided and enforced before the earlier request window. The same calculation applies to the absolute 36-month cap. Request time and the estimated end of the soft-delete window are reported separately; the estimate is not presented as independent proof of physical irrecoverability. The approved recipient and storage target is Google Cloud in G-EU as processor. The production bucket gs://skolkoll-data has, since 2026-08-25, been verified live for the four source-archive prefixes: region EUROPE-WEST1, uniform bucket-level access and zero public principals, checked by the daily retention control. The verification covers the source archive — readback for Firestore and Hosting logs is still pending live evidence. Raw copies must not be disclosed publicly. Rights and the contact route are stated below the table. |
| Head teacher's name, role and school unit. May exist in current non-public material but is not published as baseline data; new or recurring population-wide name processing is paused under G5 | Skolverket's register (open data) | No positive general basis for population-wide name processing is asserted while G5 is open. Necessary data cleanup and rights handling are assessed within their concrete purpose; a separate edited review surface requires its own assessment of journalistic purpose and publication. Name-free change events are outside the name-processing stop. | No positive identifiable population-wide retention exists while G5 is open. headMaster is discarded at the earliest mapper boundary and temporal backfill is name-free. Any future identifiable retention requires a separate positive layer-by-layer decision and a deployed, verified purge consumer enforcing a non-extending purgeAfter; a later observedAt must not move the deadline. Public history and change events are name-free. |
| Representative roles at school operators — board member, auditor, authorised signatory, report signer (name + role + operator). May exist in current non-public material; the names are not published as baseline data and new or recurring population-wide name processing is paused under G5 | Bolagsverket, public annual reports | No positive general basis for population-wide name processing is asserted while G5 is open. Necessary data cleanup and rights handling are assessed within their concrete purpose; a concrete editorial case requires a separate, pre-documented assessment. | No positive identifiable population-wide retention exists while G5 is open. A five-year cap from verified deregistration would be only a future outer limit if G5 is later closed through a separate positive processing and retention decision and a deployed, verified purge consumer enforcing a non-extending purgeAfter; a later observedAt must not move the deadline. The raw-source archive's separate 12-/24-/36-month schedule is not Dataset D/E retention. |
Categories not intentionally extracted or entered into the derived Dataset D/E projection: personal identity numbers, home addresses, private contact details, private finances, family relationships beyond the formal role, signatures, or special categories under Article 9. Signatures and other ordinary incidental personal data in an officially published original file may fall within the bounded archive row above. Article 9 or 10 data and private material may not be used further under archive decision v1.3. On actual detection, new writes and further processing stop and the material is deleted unless a separately documented incident or legal condition requires minimised access-restricted retention.
The data controller for this processing is Skolspegeln AB (org. no. 559359-7288), contact info@skolspegeln.se. (The processor role in section 1 concerns Municipal Licence data; for the review processing Skolkoll is the controller.)
Recipients: the approved recipient and storage target for the raw-source archive is Google Cloud in G-EU as processor. The production bucket gs://skolkoll-data has, since 2026-08-25, been verified live for the four source-archive prefixes: region EUROPE-WEST1, uniform bucket-level access and zero public principals, checked by the daily retention control. The verification covers the source archive — readback for Firestore and Hosting logs is still pending live evidence. Raw copies must not be disclosed publicly. Neither head-teacher names nor representative names from annual-report data are published as baseline data on skolkoll.se, in open data files, APIs/exports or structured data; the serving layer removes the person-name fields unconditionally. Names may appear in a separate editorial review surface only when a concrete review and its own publication assessment warrant it. There is no person search (you cannot search for a person's name) and there are no dedicated person-lookup pages.
The four-point pattern in the Swedish publishing policy applies only after such a separate editorial publication decision: a stated reason, a cited source, minimisation to the necessary name and role, and a removal/correction route. It safeguards that decided publication; it does not authorise names in the automated directory.
Your rights: access (art. 15), rectification (art. 16), erasure (art. 17 — see section 4), restriction (art. 18) and objection (art. 21 — see section 5), plus the right to complain to IMY (section 12). To the extent the processing takes place for journalistic purposes, parts of the GDPR are formally exempted (chapter 1, section 7 of the Swedish Data Protection Act) — Skolkoll nevertheless applies the processes above as documented practice.
The documentation behind this block (legitimate interest assessment and ongoing data protection impact assessment) is working-draft material. This block reflects the position following the Court of Justice's judgment in C-199/24 and is updated through ongoing review as new case law or guidance from the Swedish Authority for Privacy Protection emerges.
7. DPIA-light — risk assessment for Municipal Licence
For Municipal Licence customers we have done a simplified Data Protection Impact Assessment (DPIA-light) per GDPR art. 35. The conclusion that a full DPIA is not mandatory applies to the processing within the Municipal Licence delivery, where the municipality is the data controller and Skolkoll the data processor (see section 1): that processing does not meet high-risk criteria (no large-scale monitoring, no special categories of personal data stored systematically, no automated decision-making with legal effect on individuals). Skolkoll's public review activity, where Skolkoll is the data controller, is assessed separately — a full DPIA for that processing is in progress (2026). Lane-D document extraction preflights the whole document and sends only a contact-minimised provider copy; the residual risk is a classifier false negative. That risk and its mitigations are described in the table below and under Internal AI support.
Identified risks and mitigations
| Risk | Likelihood × Impact | Mitigation |
|---|---|---|
| Unauthorised access to organisation data | Low × Medium | Firebase Auth with MFA support; admin role check on the server side; auditLog for all admin actions. |
| Data leak via third-party service (Firebase, Stripe, Resend or Zoho) | Low × High | EU regions where verified service evidence exists; SCCs for relevant third-country processing; service-specific DPA/TIA and quarterly subprocessor review. Data minimisation and purpose isolation apply: Stripe sees no school data and Resend is limited to service/watch email with 30-day provider retention. Zoho Mail has no positive release: new user-initiated inbound enquiries may be received, manually assessed and answered only to the strictly necessary extent after case-specific minimisation and under the matter's documented basis; no AI is used. Proactive/discretionary contact, campaign/relationship-building, automation, bulk processing and new integrations/features/data categories in Mail are STOPPED. The FAS-0 deadline of 2026-08-14 passed without the account, DPA/SCC and India/United States evidence being closed; only the allowed minimised intake continues, while escalation to a lawful replacement channel is under way. The Mail restriction does not govern Campaigns. Campaigns complete open and link-click tracking were observed ON on 2026-07-29; the next send and every send-capable automation are independently STOPPED at the Z-CAMPAIGNS gate until account-specific automation, DPA/SCC, unsubscribe/RTBF, retention/suppression and tracking evidence is closed and manually approved. No tenant-level technical enforcement or Chapter V compliance is claimed. |
| Unintentional reintroduction or erroneous publication of school-staff names | Medium × Low | Fail-closed name projection for public school pages, open data files, APIs/exports and structured data; automated leakage tests and removal of any erroneous publication within 14 days (section 4). A future named publication requires a separate documented release decision. |
| Vulnerability in the open analytics endpoint | Low × Low | Origin allowlist, distributed rate-limiting, and event size caps. No personal data is collected in analytics. |
| Operational incident — silent scheduled-function failure | Medium × Low | Error-alerting wrapper emails ops on every scheduled-function failure. Manual backfill endpoint exists for critical syncs. |
| A Lane-D preflight false negative allows pupil-identifying or sensitive context to reach OpenAI | Low × Medium | Only public records within an approved, versioned municipality/portal/layout flow are processed. Before provider access, the whole document is blocked on private-source markers, personal identity numbers/pupil-identifying contexts or Article 9/10 indicators; email addresses and phone numbers are removed from the provider copy. The local original is used only for grounding. The OpenAI DPA and applicable transfer mechanism apply. /v1/chat/completions is used with store: false, which according to the provider documentation checked on 2026-07-29 means that no response application state is created but permits prompt caching of encrypted KV tensors in GPU-local storage for up to 24 hours. Standard abuse-monitoring logs may be retained for up to 30 days and safety/legal exceptions may require longer retention. This is minimisation with express exceptions, not ZDR. Classifiers are fallible; candidates are masked, no automatic publication occurs and every candidate passes through a human-reviewed queue. |
8. Personal data breach
In case of a suspected personal data breach:
- Where Skolkoll is the processor in the Municipal Licence P1–P3 chain, we notify the agreed controller without undue delay, with an internal target for an initial fact-based notice within 24 hours, and then provide ongoing updates. The municipality assesses and is responsible for any Article 33 notification and Article 34 communication.
- Where Skolkoll is the controller, we assess the risk and notify IMY without undue delay and, where feasible, within 72 hours after becoming aware when the breach is likely to result in a risk to individuals' rights and freedoms. Where a high risk is likely, we also inform the affected individuals without undue delay under Article 34.
- The incident-response runbook and postmortem process is described in the Municipal Licence agreement annex ("IR runbook").
9. International data transfer
Personal data is processed in the following regions:
- EU/EEA target: repository configuration specifies
europe-west1(Belgium) for Firestore, Cloud Functions and Cloud Storage; an archived production readback dated 2026-09-05 establishes Firestore ineurope-west1and all eight production buckets inEUROPE-WEST1or the EU multi-region. Stripe payments are processed primarily in Ireland. Domain routing for Zoho Mail/Campaigns and configured endpoints for Desk/CRM point to Zoho's EU services, but routing does not prove the Mail/Campaigns tenant's actual account region. Firebase Hosting uses a global CDN and is therefore not covered by the regional-storage target. - USA/third countries: Firebase Hosting and Authentication and supplier access may involve processing outside the EU/EEA. Resend delivers through the United States. Zoho support from India and applicable US subprocessors, Sentry support from the US team, Anthropic/OpenAI calls and social-login providers may also involve third-country processing.
For third-country transfers the following legal mechanisms apply:
- Standard Contractual Clauses (SCCs) — used under EU Commission decision 2021/914 where the relevant provider and account agreement covers the third-country processing. An account-specific data processing agreement was signed with Zoho Corporation B.V. on 2026-09-11; under its clause 10 it supersedes the parties' previous data-protection agreements at account level. That agreement is the article 28(3)-(4) processor clauses, not the Chapter V transfer clauses. For Mail's India leg, Zoho Legal's 2026-09-08 response identifies SCC Module 3 in prose, but the mechanism remains supplier-asserted rather than contracted and the India/United States assessments remain open. For Campaigns, that agreement covers the article 28 incorporation; its Chapter V mechanism remains supplier-asserted rather than contracted, behind a separate pre-send gate. Mail has no positive release.
- EU-US Data Privacy Framework (DPF) — alternative legal basis for DPF-certified providers (Google, Stripe).
Schrems II implications are assessed per provider and scenario in internal transfer annex v2.9. Zoho Mail's account/contract incorporation and focused India/United States assessment were to be closed by FAS-0 no later than 2026-08-14. That deadline passed. Zoho Legal has since identified SCC Module 3 for the India leg in prose. The account-specific DPA was signed on 2026-09-11, but its Schedule 1 is the article 28(3)-(4) standard contractual clauses and states in its own clause 1(f) that they do not by themselves ensure Chapter V compliance, so the transfer mechanism remains supplier-asserted rather than contracted. The assessment under current Indian law and the focused United States assessment remain open: the agreement's Schedule 2 names India alone as the group entity permitted to access EEA customer data, while the supplier's own SOC 1, SOC 2 and ISO location annexes place Austin in the United States in scope for support. The fallback is therefore still the operative state: the dated interim-risk restriction with no positive release remains, and only minimised legally necessary intake occurs while escalation to a lawful replacement channel is under way. Campaigns is the designated platform, but the next send and every send-capable automation are STOPPED until its separate account-specific evidence gate is fully closed and manually approved. Municipal Licence customers may request a relevant extract.
10. Technical and organisational security measures
- Encryption in transit: TLS 1.2+ for all communication; HSTS enabled.
- Encryption at rest: Firestore encrypts all data automatically with Google-managed keys.
- Access control: Role-based access (admin / user); admin token compared via timing-safe-equal; auditLog for all admin API calls.
- Secrets: All API keys and tokens are stored in Google Secret Manager and provided to runtime securely via Firebase Functions secrets binding. They are not present in source code or committed to the repository.
- Rate limiting: Distributed Firestore-backed rate limiter on all public endpoints; analytics pipeline hardened against abuse via origin allowlist and event size caps.
- Validation: Strict schema validation on all user inputs; field-level length caps; metadata type enforcement including array-element validation.
- Monitoring: Cloud Logging for all functions; error alerting via Resend to ops distribution list on scheduled-function failures; planned Cloud Monitoring policy for error rate.
- Backup: Point-in-Time Recovery (PITR) is the target for Firestore and, when enabled, provides point-in-time restore within the window Google Cloud offers (up to 7 days). Actual production PITR status and any scheduled backup exports are not supported by archived readback in this revision. The release gate requires
gcloud firestore databases describeandgcloud firestore backups schedules listrespectively before they may be described as active. Recovery has not been exercised in a controlled disaster-recovery drill — we intend to run such a drill ahead of the first Municipal Licence production deployment.
11. Documents for municipal procurement
- DPA template (data processing agreement) — based on SKR's Swedish standard contract.
- Service Level Agreement (SLA) — uptime commitments, support response times, escalation path, and credit policy.
- ROPA summary (Records of Processing Activities) — public summary of the processing register per GDPR art. 30. Full extract available on request to Municipal Licence customers.
- IR runbook — incident-response process and contact details, delivered as an annex to the Municipal Licence agreement.
- Security appendix — documents the production release gate, stage/production isolation, build integrity and security headers; delivered as an annex to procurement responses. The appendix is approved for use in procurement responses by a documented decision of 8 August 2026. The approval does not extend to the items flagged as open owner input in the security appendix's own hand-over checklist. Since 2026-08-25 the Cybersecurity Act assessment is complete and dated, and a backup authority has been appointed. Still open: support-tier/SLA dependencies, a cold recovery test, and the outstanding TOM and supplier evidence. For the backup authority, note that she is appointed with working access, but the path is unexercised: she has held her own second factor on the service accounts since 2026-08-26, but no recorded and tested out-of-hours channel exists, and access runs through a shared credential vault — so actions are logged under the maintainer's identity and cannot be revoked independently. The security appendix's own hand-over checklist is the authoritative and complete list; the summary here is an extract. None of its items may be presented as commitments.
12. Complaints
If you believe we are processing your personal data unlawfully you have the right to lodge a complaint with the supervisory authority:
Swedish Data Protection Authority (IMY)
Web: imy.se/en
Email: imy@imy.se
Phone: +46 8-657 61 00