TallyCraft is an iPhone app for solo mobile-trade operators — landscapers, cleaners, detailers, and the like. It quietly notices when you stop to work during the day, lets you confirm those stops each evening, and keeps the record of your jobs, what they're worth, and who hasn't paid yet. Think of it as your notebook, automated.
This policy explains exactly what the app collects, why, where it lives, and the choices you have. It covers the TallyCraft iOS app (bundle id com.kevinlam.TallyCraft) and the cloud account that backs it up.
The app is operated by Kevin Lam ("we," "us," "TallyCraft"). If anything here is unclear, email us at support@tallycraft.app — a real person reads it.
Our promise in one line: we use your data only to run the app for you. We do not sell it, we do not use it for advertising, and we do not let anyone track you across apps.
What we collect, and why
We try to collect as little as possible, and only what the app actually needs to do its job. Here is everything.
Your location — to notice when you stop to work
The whole point of the app is that it sees where you pull up and work, so your evening review is one tap instead of a typed log.
While you're using the app (foreground): we read your precise location so we can show you the weather and recognize a stop.
In the background / "Always" (when you turn it on): we record your work stops even when the app is closed. This is the passive-capture "magic" — and you have to allow it for that to work. iOS shows a location-arrow indicator in the status bar when your location is being used, and you can always see which apps recently used your location in Settings → Privacy & Security → Location Services.
Your location history is your own movements — where you, the operator, drove and stopped. We store each detected stop as a coordinate, the time you arrived and left, how confident we are that it was a real work stop, and (where available) the street address. We do this only to build your own work record. We never share or sell it.
You can grant only "While Using," or turn location off entirely, in iOS Settings — see "Your choices" below. The app keeps working with whatever you allow; passive capture just won't run without "Always."
Motion & Activity — to tell a work stop from a red light (optional)
With your permission, we read iOS's Motion & Activity data (the same "are you walking / driving / still" signal your phone already computes). We use it for two things:
To tell a real work stop apart from sitting at a traffic light, so we don't log junk.
To power a "tracking health" warning — if your phone has been moving around all day but our recorder went quiet, we can tell you that tracking may have paused, instead of you finding out later that a day went unrecorded.
This permission is optional. The app works without it — you'll just get slightly less precise stop detection and a less reliable health warning. You can turn it off any time in iOS Settings.
Motion data stays on your device. It is read and used locally only — never uploaded to our servers or stored in your cloud account.
Your account identity — Sign in with Apple
We use Sign in with Apple to create your account. When you sign in, Apple asks whether you want to share your name and email with us — that choice is yours, and you can use Apple's "Hide My Email" to share a private relay address instead of your real one. Apple sends us a secure token that identifies your account; your account and all your records are tied to that identity so they sync to your other devices and so only you can see them.
We do not get your Apple password, and we never see it.
The business records you enter — including your customers' details
This is the data you type in to run your business:
Customers — name (required), and optionally address (and, where the app matched the job to a spot on-site, its approximate map coordinates), phone number, a default service, and a default price.
Jobs — the service, the price, whether it's confirmed, whether it's paid, notes, and reminder history.
Stops — the work stops described above.
Important — these records often include other people's information. A customer's name, phone number, and home address are your customers' personal details, not yours. You are entering them, and you are responsible for having a proper basis to store them (for example, because they're your customer and you do business with them). We store this data on your behalf, as your processor, so the app can power one-tap confirmation, show you what's owed, and let you send a payment reminder. The phone number is used for one thing only: the reminder you choose to send (see "How we use it").
Weather and address lookups sent to Apple
To make the app pleasant and useful, two small lookups go to Apple:
Weather (Apple WeatherKit): we send your current location to Apple's WeatherKit service to get the current conditions and temperature, which power the weather "hero" scene on your main screen. This is a free, cosmetic touch.
Address (Apple MapKit): when we detect a stop, we send that stop's coordinate to Apple's MapKit reverse-geocoding service to turn it into a human-readable street address for your review card. This is convenience only — your records are matched by coordinate and time, not by the address text, so the app still works if the lookup fails (offline, rural areas, etc.).
We don't get anything back about you from these lookups beyond the weather and the address — they're standard Apple device services.
What we do NOT collect
We want to be just as clear about what we don't do:
No analytics or tracking SDKs. The app contains no analytics, ad, crash-reporting, or marketing toolkits. (Our only third-party code library is the one that talks to our own backend.)
No advertising identifiers, no IDFA, no App Tracking Transparency prompt — because we don't track you across other apps or websites.
No data brokers. No selling. No ad targeting.
How we use your information
We use your data only to provide the app to you:
To detect and record your work stops and build your own job/customer records.
To show your evening review, your history, your reports, and what's owed.
To draw the weather scene on your main screen.
To back up your records to your account and sync them across your own devices.
To send a payment reminder through your own iPhone's Messages app — see below.
Reminders go from your phone — we never message anyone for you
When you choose to remind a customer about an unpaid job, TallyCraft prefills your iPhone's built-in Messages app with the text and the customer's number, and you tap Send yourself. The message goes from your own phone number, like any text you send. We do not run any messaging service, we never send messages on your behalf, and the text never passes through our servers.
There is no payment system
TallyCraft records whether a job is paid or unpaid — that's it. We do not process payments and we run no payment rail. You collect however you already do (Zelle, Venmo, Stripe, cash, check). We never touch the money.
Where your data lives, and how it's protected
On your phone: the app keeps a local, offline-first copy of your records (using Apple's SwiftData) so it works with no signal and syncs when you're back online.
In the cloud: your records are backed up to our hosted database, Supabase (PostgreSQL), which is the synced source of truth across your devices. Our cloud is hosted in the United States (AWS us-west-2, Oregon).
Protections we rely on:
Per-user row-level security. Every record is tagged with your account id, and our database enforces a strict "you can only ever read or write your own rows" rule at the database level. By default, no row is visible to anyone but its owner.
Encryption in transit and at rest. Traffic between the app and our cloud is encrypted (HTTPS/TLS), and the data stored in our cloud is encrypted at rest. These protections are provided by the Supabase platform that hosts our database.
We keep the administrative ("master") key to the database out of the app entirely; the app only ever holds a limited key whose access is governed by the per-user rule above.
No system is perfectly secure, but this is the standard, current bar for a consumer app, and we don't cut corners on it.
How long we keep your data
Location data: the app does not store a continuous raw GPS trail. The recorder processes raw location updates on your device into discrete work stops (a coordinate plus arrival/departure time), and only those stops are saved and synced. Our retention goal is to keep no fine-grained movement data beyond what those stop records require — and, as a further safeguard, to age detailed location precision down after about 30 days.
We want to be honest about exactly where this stands: the 30-day reduction is our stated retention practice and the direction we are building toward; we are still finalizing the automated process that performs it on a schedule. Until that automated reduction is fully in place, your stop records are retained as part of your data and are removed when you delete your account (see below). We will update this policy to confirm once the scheduled reduction is live, and we will not claim an automated deletion that we are not yet performing.
Your records: we keep your customers, jobs, and stops for as long as your account is active, so your history is there when you want it.
On deletion: when you delete your account, your records are removed (see below).
Who else touches your data (third parties)
We keep this list short on purpose. We only use processors we actually need to run the app, and each has a single, specific job.
Who
What they do for us
Supabase
Hosts our cloud database and handles sign-in on the backend. This is where your synced records live. Supabase acts as our data processor.
Apple — Sign in with Apple
Authenticates your account (you choose whether to share your name/email; "Hide My Email" is supported).
Apple — WeatherKit
Returns weather for your current location to draw the home-screen scene.
Apple — MapKit
Turns a stop's coordinates into a street address for your review card.
Apple — App Store / StoreKit (In-App Purchase)
Handles your in-app purchases and billing — the Pro subscription and single-report purchases. Apple processes the payment; we receive your purchase/subscription status, not your card details.
We do not:
sell your personal information,
share it for advertising or use it to target ads,
allow cross-app or cross-site tracking, or
use any data brokers.
We may disclose data if we're legally required to (a valid court order, for example), or to protect the safety and rights of people, but that's a last resort, not a routine.
Your choices and your rights
You're in control of your data. Here's how.
Delete your account — free, from inside the app. This is our unconditional guarantee: you can always leave and take your data with you. Deleting your account removes your records from your device and signs you out, and triggers a full server-side deletion of your account and all of its records (account, customers, jobs, and stops) from our cloud. This server-side deletion is live and verified — "delete" means delete everywhere.
Export your recent data — free. You can export your last 30 days of job records (date, customer, service, price, paid status, paid date) as a CSV file anytime, free. To get your full history, upgrade to Pro. If you'd like a complete copy of your data and don't want to subscribe, email us at support@tallycraft.app and we'll send it to you at no charge — we never hold your own data hostage.
Paid archive (Pro). Pro subscribers get the full historical export plus computed tax/audit summaries and reports. We sell the packaging and computation of your data and the convenience of the full archive — never the right to leave with it: the free 30-day export above always remains available, and a full copy is free on request (see above).
Turn permissions off any time. You can change or revoke Location ("Always," "While Using," or off) and Motion & Fitness in iOS Settings → Privacy & Security, or under TallyCraft's own entry in Settings. The app degrades gracefully — turn off "Always" and passive background capture stops, but you can still add and manage jobs by hand; turn off Motion and stop detection is just a bit less precise.
Pause for the off-season. Seasonal operators can switch the app's capture off in the winter and back on in spring from inside the app, with all history preserved. Pausing stops new capture without deleting anything.
If you'd like to ask about the data tied to your account, email support@tallycraft.app and we'll help.
Children
TallyCraft is a tool for working adults running a trade. It is not directed to children, and we do not knowingly collect personal information from anyone under 13 (or the minimum age in your jurisdiction). If you believe a child has provided us information, contact us at support@tallycraft.app and we'll delete it.
State and regional privacy rights
California residents: We do not sell your personal information, and we do not share it for cross-context behavioral advertising, as those terms are used under California law (the CCPA/CPRA). You have the right to know what we collect, to access it, to request deletion, and not to be discriminated against for exercising these rights. You can exercise access and deletion directly in the app (export and delete account), or email support@tallycraft.app.
Other US states and regions: Residents of other states with privacy laws (such as Virginia, Colorado, Connecticut, and others), and individuals in regions like the EU/UK where data-protection rules apply, may have similar rights to access, correct, delete, or export their personal data. The in-app export and delete features cover access, portability, and deletion for everyone; for anything else, email support@tallycraft.app and we'll respond. For data you entered about your own customers, you act as the controller of that information and we act as your processor.
Changes to this policy
If we change this policy, we'll post the updated version at https://tallycraft.app/privacy/ and update the "Effective date" at the top. For meaningful changes — especially anything that would expand what we collect or how we use it — we'll make a reasonable effort to let you know in the app before the change takes effect.