Layers

SDK PII Inventory

Every field the Layers SDK can collect. Default vs opt-in. Hashing behavior.

View as Markdown

Always collected (default)

FieldNotes
anonymous_idOpaque UUID assigned by the SDK.
timestampEvent time.
event_idUUID for dedup.
event_namee.g., purchase.
propertiesYour event-specific payload. Audit what you send.
app_idYour Layers app ID.
context.osiOS / Android / Web.
context.osVersione.g., 17.4.
context.appVersionYour app's semver.
context.deviceModeliPhone15,2 or equivalent.
IP (server-side)Resolved to country/region at ingest, then dropped — not persisted.
User agent (web only)Parsed at ingest; raw UA not persisted.

Opt-in (you choose to send)

FieldFormatHow it's sent
user_idYour platform's IDPlaintext — stored as-is.
emailRawNormalized (lower-cased, trimmed) and SHA-256 hashed at ingest before persistence or CAPI forwarding.
phoneRawDigits-only normalization, then SHA-256.
external_idYour IDPlaintext — stored as-is.

Raw email and phone values are never persisted — hashing happens in the ingest process and only the hash is written to sdk_events or forwarded to Meta / TikTok / Apple Search Ads.

Retention

DataRetentionNotes
SDK events400 days52-week lookback for attribution. Reducible on request; floor is 30 days.
Event warehouse2 yearsAggregated analytics.
Hashed PII (email_sha256, phone_sha256)Same as event envelopeTied to the row, not stored separately.
IPNot persistedDropped at ingest after region resolution.
Raw email / phoneNot persistedHashed at ingest.

Deletion

Server-side DELETE removes sdk_events for a matching user_id or anonymous_id. Materialized aggregates are not per-user; they aren't rewritten on individual deletion.

See DSAR.

Access

Engineering access to sdk_events is role-gated and logged.

On this page