Skip to main content
Grain is cookieless by default. Without consent it identifies a visitor with an ID that rotates every day, and it stores nothing in the browser. This page holds every privacy fact of the product: the consent modes of the Grain Tag and Analytics Web, the data Grain keeps, the rights of your users, the processors, and the dashboard controls.

What Grain stores

Grain keeps an ephemeral session ID in memory until a visitor grants consent. The data Grain collects depends on the consent state: Grain strips query parameters from the page path before consent. A query string can carry personal data. Every event carries a _consent_status property with the value granted or pending, so the dashboard can separate the two states. Consent also gates the automatic properties, for example the referrer, the page title, and the UTM parameters. Read Automatic tracking. Read Automatic properties. Each SDK has a consentMode configuration value. The default mode of both SDKs needs no consent banner. The TypeScript types of the published packages win over this page when they disagree.

Grain Tag

The instance exposes three consent calls: The categories are necessary, analytics, functional, and marketing.

Analytics Web

The waitForConsent configuration value applies to GDPR_STRICT only. When it is true, the SDK holds events in a queue until the user grants consent, then sends them. onConsentChange(listener) and offConsentChange(listener) subscribe to changes of the state. The SDK stores the consent preference itself in localStorage. This storage holds the preference only, not a tracking identifier.

IP anonymization

IP masking removes the last octet of the address before storage:
Enable it in the dashboard under Privacy Settings.

Data retention

Grain deletes events after the retention period. You can export the data of a user before Grain deletes it.

User rights

The privacy endpoints take the tenant alias in the path and the API key in the X-API-Key header. Read Authentication.

Access (GDPR Article 15)

The export returns JSON with every event, every property, and the consent history of the user.

Erasure (GDPR Article 17)

Anonymization

Anonymization replaces the user ID with a random UUID. The aggregated analytics stay intact.
The dashboard offers the same three operations under User Data Tools. Under CCPA, these endpoints cover the right to know, the right to delete, and the right to opt out.

Data residency

Grain stores all analytics and configuration data in EU data centers by default. Xreos, the company behind Grain, is based in the US. A US (East) region in Virginia is planned. Region selection will be part of tenant creation.

Processors

Grain gives 30 days of notice before a change to this list. Enterprise customers can object to a new subprocessor.

Certifications

Security measures

Incident response

Dashboard privacy controls

The privacy settings are at https://grainql.com/dashboard/privacy: Read Install Grain for the code that installs the SDK and the consent calls.