GDPR-compliant data processing terms for enterprise customers.
If you need a countersigned or PDF copy of the DPA, contact legal@grainql.com.
This Data Processing Addendum ("DPA") forms part of the agreement between Cybentis Oy (Business ID 3593125-1), doing business as GrainQL ("Processor", "we", "us"), and the customer using the Services ("Controller", "Customer"). It applies to the extent GrainQL processes Personal Data on the Customer's behalf in connection with the Services.
This DPA supplements the GrainQL Terms of Service and Privacy Policy. If there is a conflict between this DPA and the Terms with respect to Customer Personal Data processing, this DPA controls.
The parties agree that, for Customer Personal Data processed through the Services on the Customer's behalf, the Customer acts as Controller (or Processor, as applicable) and GrainQL acts as Processor (or Subprocessor, as applicable).
GrainQL may separately act as an independent controller for account administration, billing, fraud prevention, security, product communications, and compliance obligations relating to the Customer's own GrainQL account.
GrainQL provides privacy-focused analytics, reporting, heatmaps, page snapshots, APIs, data export tooling, support workflows, and AI-assisted analytics features. Processing may include collection, organization, storage, querying, retrieval, analysis, export, deletion, and anonymization of Customer Personal Data.
When the Customer uses Neo, GrainQL's AI assistant, user prompts, the query results needed to answer them and tool results are sent to AI model providers through OpenRouter, by API only. Conversations (messages, tool results and answers) are stored in Supabase in Frankfurt, Germany, so they can be continued, and the Customer can delete them in the dashboard. GrainQL does not use Customer Personal Data to train AI models.
The duration of processing is the term of the parties' agreement plus any time required to complete exports, deletion workflows, backup rotation, or legally required retention.
GrainQL will process Customer Personal Data only on the Customer's documented instructions, including as set out in the agreement, the Customer's product configuration, and the Customer's use of the Services, unless otherwise required by applicable law.
GrainQL will ensure that personnel authorized to process Customer Personal Data are bound by appropriate confidentiality obligations.
GrainQL maintains technical and organizational measures designed to protect Customer Personal Data, including:
GrainQL will notify the Customer without undue delay, and in any event no later than 48 hours, after becoming aware of a Personal Data breach affecting Customer Personal Data. The notification will include, to the extent reasonably available:
GrainQL will cooperate with the Customer and take reasonable steps to assist in the investigation, mitigation, and remediation of each such breach. GrainQL will provide ongoing updates as additional information becomes available.
GrainQL will make available to the Customer, on request, information necessary to demonstrate compliance with this DPA and applicable data protection law.
The Customer (or a qualified third-party auditor appointed by the Customer and bound by appropriate confidentiality obligations) may conduct an audit of GrainQL's processing activities covered by this DPA, subject to the following conditions:
Where GrainQL has obtained relevant third-party certifications or audit reports (e.g., SOC 2), GrainQL may provide these in lieu of a physical audit, provided they reasonably address the Customer's audit objectives.
Taking into account the nature of processing and the information available to GrainQL, GrainQL will provide reasonable assistance to the Customer in:
The Customer grants GrainQL general authorization to use subprocessors and infrastructure providers to deliver the Services. GrainQL remains responsible for its subprocessors' processing to the extent required by applicable law. GrainQL will impose data protection obligations on each subprocessor that are no less protective than those in this DPA.
GrainQL will provide the Customer with at least 30 days' prior notice before adding or replacing a subprocessor that processes Customer Personal Data. The notice will identify the new subprocessor, its purpose, and its location.
The Customer may object to a new subprocessor by notifying GrainQL in writing within the 30-day notice period, providing reasonable grounds related to data protection. GrainQL will make commercially reasonable efforts to address the objection, which may include offering an alternative configuration. If GrainQL cannot reasonably accommodate the objection, either party may terminate the affected Services upon written notice without penalty.
Analytics events are stored on servers in Helsinki, Finland, and their backups stay in Helsinki. Other database backups and page snapshots are stored in Cloudflare R2. AI conversation data is stored in Supabase in Frankfurt, Germany.
Some processing takes place outside the EEA, the UK and Switzerland, as Annex II shows. This includes some dashboard hosting, AI model inference for Neo, website analysis during setup, support chat, logging and error tracking.
Where GrainQL transfers Customer Personal Data to a jurisdiction that does not provide an adequate level of protection, GrainQL will use the European Commission's Standard Contractual Clauses (2021 version):
Supplementary measures include:
Taking into account the nature of the processing, GrainQL will provide reasonable assistance to help the Customer respond to requests relating to access, deletion, correction, restriction, portability, or objection, using the tools and workflows available in the Services.
Upon termination of the Services or on the Customer's documented instruction, GrainQL will delete, anonymize, or return Customer Personal Data in accordance with the parties' agreement, applicable law, and the configuration of the Services.
Analytics events are kept for up to 2 years. Backups are kept for up to 14 days. Retention limits by plan, and the retention setting in the Customer's workspace, are not yet enforced automatically. Until they are, GrainQL deletes data on the Customer's documented instruction, sent to privacy@grainql.com, within 30 days.
Following account termination, and on the Customer's request:
| Category | Description |
|---|---|
| Data subjects | End users of the Customer's websites or applications, and Customer personnel using GrainQL |
| Personal data | Pseudonymous identifiers, event data, page URLs, referrers, browser / device / OS data, timezone, location derived from IP or request headers, consent records, support context, and account / billing contact data |
| AI conversation data | User prompts, AI responses, aggregated analytics context, tool call results, digests, memories, findings, and reports generated through Neo |
| Special cases | Heatmap and page snapshot data when those features are enabled (may inadvertently capture PII visible on screen — GrainQL provides masking and exclusion tools); any identifiers or custom properties the Customer chooses to send through the SDK or APIs |
| Provider | Purpose | Data | Location |
|---|---|---|---|
| Hetzner | Servers for our APIs and databases, and event database backups | Analytics events, workspace and account data | Helsinki, Finland |
| Cloudflare | Network edge, TLS, DDoS protection, tag delivery, short links, the Shopify app, page snapshots and database backups | Visitor requests in transit, page snapshots, backups | Global edge |
| Vercel | Hosting for grainql.com and the dashboard | Dashboard sessions and requests in transit | Paris, Frankfurt, Washington, San Francisco and Hong Kong |
| Supabase | Neo conversations, memories, digests and reports | Chat messages and the answers Neo gives | Frankfurt, Germany |
| Provider | Purpose | Data | Location |
|---|---|---|---|
| OpenRouter | Routes Neo requests to the model that answers them | Your question and the analytics results Neo works with | United States |
| Google (Gemini) | Models for Neo's Fast and Smart modes, through OpenRouter | Your question and the analytics results Neo works with | United States |
| Anthropic (Claude) | Model for Neo's Max mode and fallback, through OpenRouter | Your question and the analytics results Neo works with | United States |
| Groq | Autocomplete in the report editor | The report text you are writing | United States |
| OpenAI | Reads your public pages during setup | Content of your public website | United States |
| Browserbase | Cloud browser that opens your public pages for setup and audits | Content of your public website | United States |
| E2B | Sandbox where Neo runs calculations on query results | Aggregated query results | United States |
| Provider | Purpose | Data | Location |
|---|---|---|---|
| Auth0 (Okta) | Sign-in and identity | Name, email address, sign-in history | European Union |
| Stripe | Card payments and invoices | Billing details. We never see full card numbers. | United States and EU |
| Shopify | Billing and data for stores that use the GrainQL Shopify app | Store details and order totals | Global |
| AppSumo | Lifetime deal licences | Email address and licence key | United States |
| Customer.io | Product and account emails | Email address and product events | European Union |
| Resend | Team invite emails | The invited person's email address | United States |
| Provider | Purpose | Data | Location |
|---|---|---|---|
| Featurebase | Support chat | Messages, and the name and email address you give | European Union |
| Slack | Internal alerts, including new privacy and support requests | Name, email address and request details | United States |
| Better Stack | Application logs and error tracking | Server logs, which can include request details | United States |
| New Relic | Server monitoring | Metrics and logs of failed requests, which include IP addresses | European Union |
This DPA is governed by the laws of Finland. Any dispute arising out of or in connection with this DPA will be subject to the courts of Helsinki, Finland, unless mandatory law requires otherwise.
Cybentis Oy
PL 157, 00101, Helsinki, Finland
legal@grainql.com