Who operates the app
Slow Turtle operates PullLedger: Espresso Log and is responsible for the app's handling of personal information described here. For privacy questions or requests, email cmoonjun11@gmail.com.
This policy covers the PullLedger Android app and its support and privacy pages. PullLedger does not require an account, sign-in, email address or subscription to keep a journal.
Local journal and settings
The app stores the following in its private storage on your device:
- Beans and saved shots
- Bean names, roasters, roast dates, notes and archive status; dose, yield, extraction time, grinder settings, taste tags, ratings, notes, next changes, and record identifiers and timestamps.
- Your unfinished draft
- One local draft helps you return to an interrupted entry. It is separate from a saved shot. Recent typing may be lost after an abrupt force-stop or device failure before the draft is written.
- Device preferences
- Theme, analytics choice and its consent revision and time, last selected bean, the backup notice state, and last successful export time.
- Advertising bookkeeping
- Local shot and session identifiers prevent repeat advertising opportunities. These identifiers are kept separately from journal records and are not included in custom analytics events or JSON backups.
PullLedger does not upload journal entries or drafts to a server. We do not include bean names, roast dates, grinder settings, weights, times, taste notes, ratings, free text, record identifiers or backup contents in advertising requests or our custom analytics events. These local records are not sold or shared with advertisers by the app.
The app does not request access to your precise location, contacts, camera, photos, microphone or Bluetooth devices. Selecting a backup file uses Android's system file picker rather than broad storage access. Advertising and optional analytics can use the network as described below.
Manual backups and deleting records
You can export your beans and saved shots to a plain, unencrypted JSON file in a location you select. Drafts, theme, advertising consent, analytics choices and SDK identifiers are excluded. PullLedger does not upload the file itself. If you select a cloud-backed folder in the system picker, that provider may upload or process the file under its own terms and privacy policy.
Importing a validated backup replaces the current journal after you review and confirm. It is not a merge. Import removes the previous unfinished draft and preserves your theme, analytics choice and advertising consent. An empty backup replaces the journal with no records.
PullLedger excludes its records, settings and SDK state from Android's automatic app backup and device-transfer backup rules. Do not rely on reinstalling the app or changing devices to restore your journal. Uninstalling, clearing app storage, losing the device or a device failure can remove records permanently unless you have a usable manual backup.
In Settings โ Backup & data, you can delete all journal data from this device after confirmation. Individual bean or shot deletion is also available; deleting a bean deletes its shots. Related local draft and advertising-bookkeeping references are cleaned up. Deleting journal data does not delete exported files, your theme or privacy choices, correspondence you sent, or information already received by Google. Manage exported files separately wherever you saved them.
Google advertising and your choices
PullLedger includes Google Mobile Ads SDK 25.5.0 for a banner on an eligible, newly saved shot summary. The app does not send journal contents as ad targeting. Google's advertising SDK independently processes information for delivering and measuring ads, service analytics and fraud prevention, including:
- Your IP address, which can be used to estimate a general area.
- Product and advertising interactions, such as app launches, taps and video views.
- App and SDK diagnostics, such as startup performance, hangs and energy use.
- Device and account-related identifiers, including Android advertising ID, app set ID and, where applicable, identifiers associated with accounts signed in on the device.
Google states that this SDK's transmitted user data is protected with TLS encryption. Actual advertising processing depends on applicable choices, device settings and the type of ad request. Limited ads may use different identifiers and processing. See Google's Mobile Ads data disclosure and Google's privacy policy.
Consent and regional privacy messages
Google's User Messaging Platform (UMP) manages applicable regional advertising choices. PullLedger refreshes consent information at launch and uses UMP's current permission to decide whether it may request an ad. Where required, a privacy message is presented at a safe moment; you can continue logging if an ad or consent request fails.
UMP manages the consent state separately from your journal. Those advertising choices are excluded from manual JSON backups and are not replaced when you restore journal records. PullLedger does not synchronize consent choices with other apps.
Open Settings โ Privacy & advertising to manage advertising choices when UMP indicates that options are required, or retry a failed consent update. Available options depend on your region and current SDK state. Declining personalized ads does not necessarily prevent all permitted limited or non-personalized ads. If UMP does not allow ad requests, PullLedger makes no banner request.
Advertising choices are separate from optional usage analytics. Turning analytics off does not turn off otherwise permitted AdMob requests or their advertising measurement. You can also use Android's advertising-ID controls to reset or delete the advertising ID where supported by your device.
Optional usage analytics
Usage analytics is off by default. When it is available in your build, you can read the explanation and choose Agree and enable analytics. Choosing not to enable it does not limit logging, comparison, backups or deletion. If analytics is unavailable in a build, the app keeps it off and says so.
After explicit opt-in, Google Analytics for Firebase processes app and device information, an SDK app-instance identifier, automatic SDK events and fixed feature-use events. Our custom events describe sessions, successful bean or shot creation, shot saves or edits, completed backup operations, fixed operation and error codes, and actual advertising callbacks. Their parameters are limited to the app, version, screen and the relevant fixed category. They do not include your journal values, free text, files, file paths, record dates or record identifiers.
Firebase may also generate automatic app and advertising-measurement events. Our custom-event list does not describe every automatic SDK field. PullLedger does not set an analytics user ID, link your journal to an account, or enable analytics-based advertising personalization.
The app reads its saved analytics choice before manually initializing Firebase Analytics. Automatic Firebase initialization is disabled, and analytics advertising-storage and personalization permissions remain denied. Events from before opt-in are not stored for later custom-event transmission.
You can turn usage analytics off in Settings or Privacy & advertising. This immediately blocks PullLedger's custom usage events. The app also attempts to stop Firebase Analytics collection, reset its local SDK data and save your OFF choice. When these controls succeed, Firebase is instructed to stop collection and reset local data. If an SDK control or settings write fails, the app identifies the unconfirmed step and offers a retry. Retry before restarting: a failed settings write can leave the previous choice saved. These controls do not immediately erase information already sent to Google's servers.
Deleting all journal data also attempts to reset pending local Firebase analytics data while retaining your analytics choice. A separate local reset marker is saved before deletion so an interrupted cleanup can be retried before restoring analytics collection. A failure to save that marker can leave the previous choice available after restart; the app reports the failure separately from successful journal deletion. Google's handling of information already received is subject to its policies and applicable service settings. Read Firebase's privacy and security information.
Support messages
If you contact cmoonjun11@gmail.com, we receive your email address and whatever you choose to send. We use that information to answer your request and investigate the issue.
The app opens your mail app with the app name, app version and Android version for you to review. It does not send mail automatically or attach your journal, backup file or notes. The website's email link also opens your chosen mail handler; you decide whether to send. Your email provider processes messages under its own policies.
Please describe the steps that caused the issue and include the app and Android versions. Do not send passwords, authentication codes, private keys or a full journal backup. If a screenshot is useful, remove private notes and personal information first.
This support and privacy website
These pages are static documents. They contain no advertising or analytics scripts, tracking pixels, embedded third-party content, external fonts or submission forms. They do not set their own tracking cookies or request your journal data.
The website's hosting service, Google Firebase Hosting, receives technical requests needed to deliver and protect the pages. Request or security logs may include IP address, requested URL, access time, browser or device information and response details. Hosting logs are separate from the app's optional analytics setting. See Firebase's privacy and security information.
Following an external link opens another provider's site, where that provider's privacy policy applies.
Retention and service providers
Local journal records remain on the device until you edit or delete them, replace them through an import, or remove the app's storage. Exported backups remain where you save them until you or that storage provider removes them. Privacy preferences and local SDK state are held separately from journal data.
Support correspondence is kept as needed to handle the request, maintain service security and meet applicable legal obligations. Contact us if you want us to review or delete correspondence.
Google receives advertising data and, only when you opt in, optional analytics data for the purposes described above. Google, the hosting provider and email or file-storage providers may process information in countries other than your own. Their retention, security measures and applicable privacy controls are described in their policies and service settings. Clearing your journal does not set a deletion deadline for provider-held information.
Security and its limits
Journal data is kept in the app's private Android storage. Its protection also depends on your device lock, operating-system security, device access and the places where you keep backups. Manual JSON exports are not encrypted by PullLedger. Use storage you trust and avoid sharing a backup publicly.
Google Mobile Ads uses TLS for its transmitted user data. No storage or network service can be guaranteed completely secure. Please email us if you believe the app has a security or privacy problem, without including secrets or your complete journal.
Children
PullLedger is designed for adult home baristas and is not directed to children. If you believe a child has sent us personal information through support, contact us so that we can review and address it. The app's intended audience does not remove any privacy rights that apply to a user.
Your choices and privacy requests
You can access and edit your journal in the app, export it, delete individual records, or delete all journal data. You can manage advertising choices where available and withdraw optional analytics consent in Settings. You control any previously exported files separately.
You can contact Slow Turtle at cmoonjun11@gmail.com to ask about personal-information handling, access, correction, deletion or other rights that apply where you live. We may need enough information to verify and respond to a request. We do not have a server copy of your local journal and cannot recover it through your email address. There is no app account to close.
For information held by Google or a storage or email provider, its privacy controls and request channels may also be relevant. We can explain the app's role and the available choices without promising that an app toggle deletes every provider-held record.
Changes to this policy
We may update this policy when app features, providers or privacy practices change. The effective date above identifies this version. Material changes that require a new choice or consent will be presented through the appropriate app flow.
For help with the app, visit PullLedger support.