Executive summary
This privacy audit confirms that the Synheart Behavioral SDK adheres to its privacy-first design principles. The SDK collects ZERO personally identifiable information (PII), ZERO text content, and ZERO screen coordinates. All collected data consists solely of timing-based behavioral metrics.Audit Findings
| Category | Status | Details |
|---|---|---|
| PII Collection | ✅ PASS | No PII collected |
| Text Content | ✅ PASS | No text content captured |
| Screen Coordinates | ✅ PASS | No location data collected |
| Biometric Data | ✅ PASS | No biometric data |
| Device Identifiers | ✅ PASS | Session IDs only (ephemeral) |
| Network Activity | ✅ PASS | No network requests |
| Storage | ✅ PASS | In-memory only, no persistence |
| Permissions | ✅ PASS | No mandatory permissions for core capture; optional permissions for notification / call observation only |
Detailed Audit
1. Data Collection Analysis
1.1 Tap Gesture Collection
Files Audited:lib/src/behavior_gesture_detector.dartandroid/src/main/java/ai/synheart/behavior/GestureCollector.ktios/Classes/GestureCollector.swift
- ✅ Tap duration (time between tap down and tap up in milliseconds)
- ✅ Long press detection (taps longer than 500ms)
- ✅ Tap timing patterns
- ❌ No tap coordinates (X, Y positions)
- ❌ No text content
- ❌ No field names or identifiers
- ❌ No clipboard content (only counts of copy / paste / cut events)
- ❌ No keystroke content (typing events carry timing metrics only — speed, cadence, gap ratio, backspace count — never the characters typed)
1.2 Scroll Dynamics Collection
Files Audited:android/src/main/java/ai/synheart/behavior/GestureCollector.ktios/Classes/GestureCollector.swift
- ✅ Scroll velocity (pixels per second)
- ✅ Scroll acceleration (change in velocity)
- ✅ Scroll jitter (variance in velocity)
- ✅ Scroll stop events (timing only)
- ❌ No scroll position coordinates
- ❌ No screen content
- ❌ No viewport size
- ❌ No URL or content identifiers
1.3 Gesture Activity Collection
Files Audited:android/src/main/java/ai/synheart/behavior/GestureCollector.ktios/Classes/GestureCollector.swift
- ✅ Tap rate (taps per second)
- ✅ Long press count
- ✅ Drag velocity (magnitude only)
- ✅ Gesture timing
- ❌ No tap coordinates (X, Y positions)
- ❌ No touch pressure data
- ❌ No finger size/shape
- ❌ No UI element identifiers
1.4 App Lifecycle & Attention Signals
Files Audited:android/src/main/java/ai/synheart/behavior/AttentionSignalCollector.ktios/Classes/AttentionSignalCollector.swift
- ✅ Foreground/background state transitions
- ✅ Foreground duration (time in milliseconds)
- ✅ App switch count
- ✅ Idle gap detection (timing only)
- ❌ No app names or identifiers
- ❌ No package names of other apps
- ❌ No notification content
- ❌ No system state information
2. Data Storage & Transmission
2.1 In-Memory Storage Only
Files Audited:- All collector classes (
GestureCollector,AttentionSignalCollector, etc.)
- ✅ All data stored in memory only (Lists, Maps, Arrays)
- ✅ No file system writes
- ✅ No database storage
- ✅ No SharedPreferences/UserDefaults usage
- ✅ No cloud synchronization
2.2 Network Transmission
Files Audited:- All SDK files
- ✅ No network API calls
- ✅ No HTTP/HTTPS requests
- ✅ No socket connections
- ✅ No external service dependencies
- ✅ All processing is local
3. Platform Permissions Analysis
3.1 Android Permissions
File Audited:android/src/main/AndroidManifest.xml
Declared Permissions: None
Implicit Permissions Used:
- None (Activity lifecycle callbacks are standard, no permission needed)
- ❌ INTERNET
- ❌ READ_EXTERNAL_STORAGE
- ❌ WRITE_EXTERNAL_STORAGE
- ❌ ACCESS_FINE_LOCATION
- ❌ CAMERA
- ❌ RECORD_AUDIO
- ❌ READ_CONTACTS
POST_NOTIFICATIONS / BIND_NOTIFICATION_LISTENER_SERVICE on Android, UNUserNotificationCenter on iOS) and call observation (READ_PHONE_STATE on Android, CXCallObserver on iOS) — the host app declares these only if it enables those signals.
3.2 iOS Permissions
File Audited:ios/Classes/Info.plist (would be in host app)
Required Permissions: None
Not Required:
- ❌ NSLocationWhenInUseUsageDescription
- ❌ NSCameraUsageDescription
- ❌ NSMicrophoneUsageDescription
- ❌ NSContactsUsageDescription
- ❌ NSPhotoLibraryUsageDescription
4. Session Identifier Analysis
Files Audited:lib/src/synheart_behavior.dartandroid/src/main/java/ai/synheart/behavior/BehaviorSDK.ktios/Classes/BehaviorSDK.swift
- ✅ Ephemeral (generated per session)
- ✅ Time-based, not device-based
- ✅ No device identifiers (IMEI, MAC address, etc.)
- ✅ Not linked to user identity
- ✅ Can be customized by developer
- Session IDs are NOT persistent device identifiers
- They CANNOT be used to track users across sessions
- They are LOCAL to the app instance
5. Third-Party Dependencies
Files Audited:pubspec.yaml, Android build.gradle, iOS Podfile
Flutter Dependencies:
- Android: None (only standard Android SDK)
- iOS: None (only standard iOS frameworks)
6. Compliance Assessment
6.1 GDPR Compliance (EU)
| Requirement | Status | Notes |
|---|---|---|
| Lawful Basis | ✅ PASS | Legitimate interest (app functionality) |
| Data Minimization | ✅ PASS | Only timing metrics collected |
| Purpose Limitation | ✅ PASS | Data used only for behavioral analysis |
| Storage Limitation | ✅ PASS | In-memory only, automatic cleanup |
| Right to Erasure | ✅ PASS | Data cleared on session end/app close |
| Data Portability | ✅ PASS | Data available via getCurrentStats() |
| Privacy by Design | ✅ PASS | Privacy-first architecture |
6.2 CCPA principles (California)
| Principle | Design alignment |
|---|---|
| Personal information | None collected by the SDK |
| Sale of data | SDK does not transmit or sell data |
| Right to know | This page documents what is collected |
| Right to delete | Data is in-memory and cleared on session end |
| Opt-out | Each signal type can be disabled via BehaviorConfig |
6.3 COPPA principles (children’s privacy)
The SDK collects no PII and emits no child-specific data. Whether COPPA applies depends on how the host app uses the SDK and the user population it serves; consult counsel for your specific deployment.6.4 iOS App Tracking Transparency (ATT)
The SDK does not perform cross-app or cross-website tracking, does not collect device identifiers, and does not share data with ad-network brokers. Whether your host app needs to present an ATT prompt depends on the rest of the app’s behavior, not on this SDK alone.6.5 Android Privacy Sandbox
The SDK does not use advertising IDs, does not perform cross-app tracking, processes data locally, and does not share data with third parties. Privacy Sandbox restrictions therefore do not apply to the SDK’s collection paths.7. Privacy Risks & Mitigation
Identified Risks
| Risk | Severity | Mitigation | Status |
|---|---|---|---|
| Behavioral fingerprinting | LOW | No cross-session tracking, ephemeral IDs | ✅ Mitigated |
| Memory inspection | LOW | In-memory data cleared on session end | ✅ Mitigated |
| Event replay attacks | LOW | No authentication, events are timestamped | ✅ Mitigated |
8. Recommendations
Immediate Actions
- ✅ Update Privacy Policy: Document SDK data collection clearly
- ✅ User Transparency: Inform users about behavioral signal collection
- ✅ Consent Mechanism: Provide opt-in/opt-out configuration
- ⚠️ Privacy Documentation: Include in app store descriptions
Best Practices for Implementation
Privacy Notice Template
9. Security Considerations
Data in Transit
✅ N/A - No network transmissionData at Rest
✅ In-memory only - No persistent storageData Access Control
✅ App-local - Data accessible only to host appEncryption
⚠️ Not required - No sensitive data, in-memory only10. Testing & Validation
Tests performed
- ✅ Code inspection — all collection paths in
lib/, the iOSMotionSignalCollector.swift, and the AndroidBehaviorSDK.ktwere reviewed manually for PII / text / screen content collection.
Pending dynamic verification
The static review covers what the code says it does. The following runtime checks are intended to confirm what the binaries actually do in production builds; they have not been completed yet:- Runtime memory inspection to verify no PII reaches in-process buffers.
- Network capture (Wireshark / Charles Proxy) to verify zero outbound activity from the SDK module.
- Device storage inspection after SDK use to verify no persistent storage is created.
Recommended testing
- Network Monitoring: Use Wireshark to confirm zero network activity
- Storage Inspection: Check device storage after SDK use
- Memory Dumps: Analyze memory to confirm no text content
- Permissions Test: Verify no runtime permission requests
Summary
Per the static review:- No PII — no personally identifiable information is captured.
- No content — no text, images, microphone audio, or screen content.
- Local processing — all computation happens on-device; the SDK makes no outbound network calls.
- Ephemeral storage — data lives in process memory and is cleared on session end.
- No special permissions — basic gesture / interaction signals require no Android or iOS runtime permissions; notification and call observation are opt-in and gated by the host’s permission prompts.
- Designed around GDPR / CCPA / COPPA principles — see §6.
- ✅ Children’s apps (COPPA-compliant)
Appendix: Privacy Checklist
- No text content captured
- No keystroke content (typing events carry timing metrics only — speed, cadence, gap ratio, backspace count — never characters)
- No screen coordinates collected
- No biometric data
- No location data
- No camera/microphone access
- No contacts access
- No file system access
- No network requests
- No persistent storage
- No device identifiers
- No advertising IDs
- No cross-app tracking
- Ephemeral session IDs only
- In-memory data only
- Automatic data cleanup
- User control via configuration
- GDPR compliant
- CCPA compliant
- COPPA compliant
- ATT not required
- Privacy Sandbox compatible
Report Version: 1.0 Last Updated: 2026-05-05 Next Audit: Recommended after major version changes