Privacy Policy
1. Overview & scope
This Privacy Policy describes how OctoPulse (“we”, “us”, “app”) handles information when you use the OctoPulse Android application and this website (chartmann1590.github.io/octopulse). It applies to all versions distributed via Google Play and via GitHub Releases (APK).
OctoPulse is a companion for OctoPrint. The app communicates directly between your phone and your OctoPrint server over your local network (or your own VPN/reverse proxy). We do not operate a backend that stores your print files, camera feeds or API keys.
2. What we do not collect
- No print files or G-code content is uploaded to us.
- No camera video leaves your network — streams are rendered directly from OctoPrint to your device.
- No account required — we don’t ask for your name, phone number or OctoPrint password beyond the API key you enter (stored locally).
- No precise location is collected. Network discovery scans your subnet locally; no GPS.
- No selling of data — we do not sell, rent or trade your information.
3. Data we process & why
| Category | Examples | Purpose & legal basis |
|---|---|---|
| Printer config (local only) | Host/IP, port, HTTPS flag, nickname, API key / Application Key | To connect to your OctoPrint. Stored encrypted on device. Basis: contract / legitimate interest (core function). |
| App settings | Poll interval, notification toggles, theme, filament presets | To remember preferences. Local only. |
| Notifications | Print finished / error / milestone prefs | To send local notifications you requested. |
| Diagnostics (Firebase) | Crash traces, performance metrics, device model/OS | To fix bugs. See §5. Basis: legitimate interest. |
| Advertising ID & ad signals | Google Advertising ID (AD_ID), IP (transient), ad interaction | To show and measure ads via AdMob. Consent where required. See §4. |
| Website analytics (if any) | GitHub Pages may log aggregate visits | Basic hosting logs. No custom tracker on site. |
Where EU/UK GDPR applies, we rely on performance of contract and legitimate interests; for ads personalization we rely on consent where required. You can withdraw consent via Android ad settings.
4. Advertising — Google AdMob (contains ads)
4.1 What AdMob uses
Google’s ad SDK may collect and process:
- Google Advertising ID (com.google.android.gms.permission.AD_ID) — a resettable identifier for ads.
- IP address, coarse device info (model, OS version, language, screen), app interaction with ads.
- Ad performance and fraud prevention signals.
This data is processed by Google under Google’s Privacy Policy and How Google uses data when you use our partners’ sites or apps. We do not control Google’s ad personalization beyond the SDK integration.
4.2 How ads appear
- Banners: small anchored banners (e.g., 320×50) at the bottom of some screens. Fixed, never over controls.
- Interstitials: full-screen ads shown at natural breaks (e.g., after adding a printer) — never while printing or during printer control.
- No rewarded / video ads with sound that auto-play.
- Test IDs are used in development (ca-app-pub-3940256099942544~…), production IDs will be configured at release.
4.3 Your choices
- Reset / delete Advertising ID: Android 13+ → Settings → Privacy → Ads → Reset/Delete.
- Opt out of personalized ads: Same screen → “Delete advertising ID” or turn on “Opt out of Ads Personalization” (older Android).
- OctoPulse respects the system opt-out; you will still see ads but they will be less personalized.
- For more, see Google Play — Advertising ID help and adssettings.google.com.
5. Android permissions explained
| Permission | Why needed | Optional? |
|---|---|---|
| INTERNET | Connect to OctoPrint REST API, fetch files, stream camera, load ads & crash reports. | Required |
| ACCESS_NETWORK_STATE, ACCESS_WIFI_STATE | Detect Wi-Fi vs mobile, enable discovery, avoid scans when offline. | Required |
| CHANGE_WIFI_MULTICAST_STATE | mDNS/Bonjour discovery of OctoPrint on local network. | Required for auto-discovery; manual IP still works if denied on some OEMs |
| POST_NOTIFICATIONS | Notify on print completed / error / milestones (if you enable). | Optional — you can deny; alerts just won’t show |
| RECEIVE_BOOT_COMPLETED | Reschedule background poll after reboot (if notifications enabled). | Optional |
| VIBRATE | Haptic feedback for notifications. | Optional |
| AD_ID | Provide Advertising ID to AdMob for ad serving/measurement. | Required for ads; you can reset/delete at system level |
| usesCleartextTraffic=true | Allow HTTP to OctoPrint on your LAN (most OctoPi installs are HTTP). Only for hosts you configure. | — |
We do not request Location, Camera, Microphone, Contacts, Storage broad access or SMS/Phone permissions.
6. Data storage — on your device only
- Encrypted storage: API keys / Application Keys are stored via expo-secure-store (Android Keystore), printers list via AsyncStorage.
- Local only: No sync to our servers. Uninstalling the app removes this data (unless Android backup is enabled — then it’s in your Google Drive backup, not ours).
- Camera snapshots: Rendered in RAM/WebView; not saved unless you explicitly download.
- Logs: We don’t log your OctoPrint requests centrally. On-device logs for discovery/terminal are ephemeral.
7. Third-party SDKs & services
| Service | Provider | Purpose | Privacy |
|---|---|---|---|
| Google Mobile Ads (AdMob) | Google LLC | Monetization via ads | Google Privacy • AdMob |
| Firebase Crashlytics, Performance | Google LLC | Crash & perf diagnostics | Firebase Privacy |
| Expo / React Native | Expo / Meta | App framework | Local only; no Expo Go analytics in standalone build |
| GitHub Pages (website) | GitHub, Inc. | Hosting this site | GitHub Privacy |
You can learn about Firebase data collection and controls in Firebase Data Processing.
8. Google Play Data Safety
For Play Console Data Safety section we declare:
- Data collected: Advertising ID, app interactions (ad taps), diagnostics (crash logs). Committed as not sold, but shared with Google ad/ analytics providers per their SDKs.
- Data not collected: Name, email (unless you voluntarily join waitlist), precise location, contacts, files content.
- Encryption in transit: Yes (HTTPS where OctoPrint allows; on LAN cleartext is device-to-printer inside your network, never to us).
- Data deletion: Use Android Settings → Apps → OctoPulse → Clear data, or uninstall. Contact us to delete any waitlist email.
- This policy is the canonical source; Play Data Safety summary mirrors it.
9. Children’s privacy
OctoPulse is not directed to children under 13. We do not knowingly collect personal information from children. Ad personalization via AdMob is subject to Google’s age policies; if you are a parent and believe your child’s data was processed in error, contact us at hello@octopulse.app for removal.
10. Your rights & choices
- Access / delete on-device data: Settings → Apps → OctoPulse → Storage → Clear data, or remove individual printers in the app.
- Withdraw ad consent: Reset/Delete Advertising ID in Android Settings; disable personalized ads.
- Notifications: Toggle per-printer or globally in OctoPulse → ALERTS; or system notification settings.
- Waitlist email: Email hello@octopulse.app with subject “Delete my waitlist email” and we’ll remove it within 30 days.
- GDPR / CCPA: EU/EEA/UK and California residents may request access/deletion by contacting us. We will respond within 30 days (GDPR) / 45 days (CCPA).
11. Security
We use Android Keystore-backed SecureStore for secrets, don’t transmit your API keys to us, and minimize attack surface (no broad storage permissions). However, local-network HTTP between phone and OctoPrint is not end-to-end encrypted across the internet if you expose OctoPrint publicly — use HTTPS/reverse proxy or VPN if you need remote access.
12. Retention
- On-device printer configs persist until you delete them or uninstall.
- Waitlist emails are kept until Play launch + 6 months, then deleted.
- Firebase crash logs are retained per Google’s default retention (up to ~90 days aggregated).
- AdMob data retention is governed by Google.
13. Changes to this policy
We may update this policy when features or laws change. We’ll bump the “Effective” date and, for material changes, note it in the app and on this page. Continued use after changes means you accept the new policy.
14. Contact & Data Controller
OctoPulse
Contact: hello@octopulse.app
GitHub: github.com/chartmann1590/octopulse/issues
Address: Provided on request for GDPR correspondence.
For ad/privacy questions, include “Privacy” in your subject line.
15. Terms of Use (summary)
OctoPulse is provided “as is” under the MIT License (LICENSE). We’re not liable for print failures, thermal issues or network disruptions. You’re responsible for securing your OctoPrint API key and for complying with your printer’s safety guidelines. Ads are provided by Google; we don’t endorse advertised content.
For full license, see github.com/chartmann1590/octopulse/LICENSE.
Copy the canonical URL: https://chartmann1590.github.io/octopulse/privacy.html — this is the official privacy policy URL to paste in Play Console → Policy → Privacy policy.
This policy does not constitute legal advice. For compliance review, consult qualified counsel. Template version 2026-09-02.