Legal
Privacy Policy
Effective date: May 1, 2025 · Last updated: May 1, 2025
This Privacy Policy describes how RetainKit ("we", "us", or "our") collects, uses, and protects information when you use our Service at retainkit.dev and app.retainkit.dev.
1. Information We Collect
Account information. When you sign up we collect your email address and any name or organization details you provide.
Apple App Store Connect credentials. To power the retention callback you upload an Apple .p8 private key along with your Key ID, Issuer ID, and App Bundle ID. These are stored encrypted at rest using AES-256-GCM with a per-organization encryption secret. The plaintext key is only accessed within the runtime path that signs requests to Apple's API.
Subscription transaction identifiers. When Apple calls the RetainKit runtime endpoint, the request contains Apple transaction IDs. We SHA-256-hash these identifiers before logging; the raw transaction ID is only stored in encrypted form for outcome polling and is decrypted just-in-time. We do not store personally identifiable information about your subscribers.
Usage and analytics data. We collect aggregated usage data (offer impression counts, save rates, redemption rates) to power your dashboards. This data is tied to your app and offer configuration, not to individual subscriber identities.
Log data. Our infrastructure (Cloudflare Workers) automatically records standard request logs including IP addresses, request timestamps, HTTP status codes, and user-agent strings. These logs are used for debugging and security monitoring and are retained for a limited period.
2. How We Use Your Information
- To provide the Service — sign Apple promotional offers and return them to the StoreKit API within Apple's response-time budget.
- To poll Apple's Subscription Status API and populate your outcome dashboards.
- To send transactional emails (email verification, password reset, critical service notices).
- To respond to support requests you submit.
- To detect and prevent fraud, abuse, or security incidents.
- To improve the Service based on aggregate usage patterns.
We do not use your data for advertising, and we do not sell your data to third parties.
3. Data Storage and Security
The Service runs on Cloudflare's global network. Your configuration data is stored in Cloudflare D1 (SQLite at the edge) and Cloudflare KV. Apple private keys are encrypted before storage using AES-256-GCM; the encryption key is held in a separate Cloudflare secret and is never stored alongside the ciphertext.
We apply Cloudflare's built-in DDoS protection, WAF, and edge rate-limiting. Access to production infrastructure is limited to authorized personnel.
4. Data Sharing
We share data only in these circumstances:
- Apple. To fulfill the Service we transmit signed promotional offer responses to Apple's StoreKit API on your behalf.
- Cloudflare. Infrastructure provider that processes all requests. See Cloudflare's privacy policy.
- Legal requirements. We may disclose data if required by law, court order, or to protect the rights, property, or safety of RetainKit, our users, or the public.
5. Data Retention
We retain your account data for as long as your account is active. Aggregated outcome metrics are retained indefinitely to power historical dashboards. Raw encrypted transaction identifiers used for outcome polling are deleted after the polling window closes (typically 30 days after an offer is served). Request logs are retained for up to 30 days.
Upon account deletion we will delete or anonymize your personal data within 30 days, except where we are legally required to retain it longer.
6. Your Rights
Depending on your location you may have rights to access, correct, delete, or export your personal data. To exercise any of these rights, email us at [email protected]. We will respond within 30 days.
7. Cookies and Tracking
The Service uses session cookies for authentication. We do not use third-party advertising cookies or fingerprinting. The landing page at retainkit.dev sets no cookies.
8. Children's Privacy
The Service is not directed to children under 13. We do not knowingly collect personal information from children. If you believe we have inadvertently collected such information, contact us and we will delete it promptly.
9. Changes to This Policy
We may update this Privacy Policy from time to time. We will notify you of material changes by email or by a notice in the Service. Continued use after the effective date constitutes acceptance of the updated policy.
10. Contact
Questions or requests regarding this Privacy Policy? Email us at [email protected].