Privacy Policy
Effective 12 October 2026. Version 1.1.
This policy explains how Maps & Apps Inc. processes personal information for unmap's public site, account dashboard, APIs, support, and billing. Maps & Apps Inc. is the controller of that information, and is responsible for it under Canada's Personal Information Protection and Electronic Documents Act (PIPEDA) and, for people in Québec, under the Act respecting the protection of personal information in the private sector as amended by Law 25.
Our Privacy Officer, Abraham Poorazizi, is the person accountable for this policy and for the information we hold. Reach him at privacy@unmap.dev or by mail at Maps & Apps Inc., 108 Patterson Dr SW, Calgary, AB T3H 3B2, Canada.
What unmap is
unmap provides maps, geocoding, routing, account management, and billing for developers. The product is built in Canada and runs on Cloudflare infrastructure. Self-serve processing is North American (Cloudflare's ENAM/WNAM regions), not Canada-only. If you need a contractual Canada-only residency guarantee, contact us before using a self-serve plan.
Data we collect
Account data. When you sign in, we store your email address, account id, selected locale, plan, spend cap, Stripe customer or subscription ids when billing is enabled, and optional GitHub id if you connect GitHub.
Authentication data. Magic-link tokens are stored only as SHA-256 hashes. Sessions are stored in KV for 30 days and tied to a secure, HttpOnly cookie. A separate non-HttpOnly unmap_signed_in=1 hint lets the static website show the Dashboard link; it is not used as authority.
API key data. API keys are stored two ways: as a SHA-256 hash, which is what authenticates your requests, and encrypted with AES-256-GCM under a key held in managed secret storage, so you can show a key again from the dashboard. We keep key metadata such as name, environment, created time, account id, plan, and the list of origins the key is allowed to be used from. Deleting a key removes the key and its metadata.
Usage and billing data. We store endpoint-level usage counts by key and day so we can rate-limit, enforce plan allowances, apply spend caps, and bill paid usage. Card numbers never reach us: Stripe collects and stores them, and we see only the identifiers and invoice records Stripe returns.
Request data. The application does not store visitor profiles, device identifiers, or ad-tech tracking data. We do not log the addresses or coordinates in your API requests. Batch geocoding is the one exception, and a deliberate one: a file you upload has to be stored to be processed, and it is deleted on the schedule below. For geocoding, successful responses may be cached at the Cloudflare edge for up to 24 hours. Those cache entries are built without the API key, but the request text or coordinates can be part of the synthetic cache URL used to make repeat queries fast. Routing responses are cached per key for up to one hour. Tile and style assets are cached as static map resources.
Cloudflare may also process network logs and security telemetry as the infrastructure provider.
Operational telemetry
Automatic Cloudflare invocation logs and traces are disabled. unmap records only request method, endpoint category, response status, a coarse error code, and rounded latency for up to seven days. These events do not contain source IP, user-agent, URLs, headers, cookies, API keys, OAuth values, search or route parameters, coordinates, request bodies, or account identifiers. Access is restricted to the account owner except for time-limited incident access.
Why we use it
We use account, key, and usage data to authenticate requests, operate the dashboard, enforce quotas and spend caps, prevent abuse, provide support, send sign-in links, manage billing, and improve service reliability. We do not sell personal information, we do not use API traffic for ad targeting, and we do not use it to train models.
We rely on your consent, given when you create an account, and on the necessity of processing to deliver the service you asked for and to meet our legal and tax obligations. You can withdraw consent by closing your account, though that ends the service.
Quota, spend-cap, and failed-payment blocks are applied automatically by software, without a person reviewing each case. They affect access to the API only, not any other right or entitlement, and you can ask us to review a block at support@unmap.dev.
Sub-processors
We use these providers to run unmap. Each is bound by its own contract and processes personal information on our instructions.
| Provider | What it handles | Where |
|---|---|---|
| Cloudflare | Hosting, Workers, KV, D1, R2, edge caching, DNS and security, sign-in email delivery | North American edge (ENAM/WNAM) |
| Stripe | Checkout, subscriptions, invoices, payment methods, metered usage reporting | United States and global |
| GitHub | Optional OAuth sign-in, if you choose it | United States |
| Simple Analytics | Cookieless page-view counts for the public site | Netherlands |
Some processing therefore happens outside Canada, and personal information held in another country can be subject to that country's laws, including lawful access by its authorities. We will update this table before adding a sub-processor that handles personal information.
Retention
| Data | Kept for |
|---|---|
| Browser session records | 30 days from sign-in |
| Magic-link tokens | 15 minutes, single-use; expired rows deleted a day later |
| GitHub OAuth state | 10 minutes |
| Sign-in rate-limit markers | 60 seconds |
| Operational telemetry | 7 days |
| Uploaded batch files, their parsed chunks, results, and exports | 7 days from job creation |
| Batch job status and counts, without file content | 30 days from job creation |
| Geocoding edge cache | Up to 24 hours |
| Routing edge cache | Up to 1 hour, per key |
| Account record | Life of the account |
| API keys and their metadata | Until you delete the key, or the life of the account |
| Usage counters and billing records | Life of the account, then 7 years, for tax and audit obligations |
| Encrypted control-plane backups | Up to 35 days |
When you delete a key, its usage counts move to your account rather than being deleted with it, so your usage history and billing records stay complete.
Backups are encrypted daily exports of the control plane (accounts, keys, usage) written to a dedicated, access-restricted store and encrypted with a key held offline. Session, OAuth-state, and rate-limit records are excluded from backups entirely, so a restore never resurrects a session you signed out of.
Files you upload for batch geocoding
If you use batch geocoding, the CSV you upload is stored while the job runs. So are the parsed pieces of it, the results, and the files you download at the end. All of it is deleted 7 days after the job was created, and the exact date is shown before you upload and on the job's own page. You can delete a job sooner, which revokes access immediately and removes the files shortly after.
Only the column you map is sent to the geocoding service. The rest of the file is stored, returned to you in the output, and never queried.
These files are held in Cloudflare R2 and the job's metadata in Cloudflare D1, both currently in Cloudflare's western North America region. We do not offer Canadian data residency, and nothing on this page should be read as promising it.
Your rights
Under PIPEDA and, in Québec, under Law 25, you can ask us to:
- give you access to the personal information we hold about you, and tell you how it has been used and who it was disclosed to;
- correct information that is inaccurate or incomplete;
- delete your account and the information tied to it;
- withdraw consent, subject to legal and contractual limits;
- give you your account data in a structured, commonly used technical format (portability, for Québec residents).
Email privacy@unmap.dev. We answer within 30 days. We may need to confirm you control the account's email address before acting.
Account deletion. Ask at privacy@unmap.dev and we will delete your account, sessions, keys, and profile within 30 days, and revoke your keys immediately. Billing and usage records that support issued invoices are kept for the seven-year period in the table above, because tax and audit law requires it; they are not used for anything else.
Complaints. Tell us first. We would rather fix it. If you are not satisfied, you can complain to the Office of the Privacy Commissioner of Canada (priv.gc.ca) or, in Québec, to the Commission d'accès à l'information (cai.gouv.qc.ca).
Security and incidents
Secrets are stored as hashes, encrypted, or in managed secret storage, transport is TLS throughout, dashboard access needs a session cookie we can revoke, and backups are encrypted. No system is perfect. If a breach creates a risk of serious injury, we will notify affected users and the appropriate regulator as PIPEDA and Law 25 require, and keep a register of confidentiality incidents.
Cookies and local storage
unmap uses a secure session cookie for dashboard access and a signed-in hint cookie for static navigation. The theme selector and builder may use browser storage to preserve interface preferences. We do not use advertising cookies. Page views on the public site are counted by Simple Analytics, which sets no cookies, does not collect or store IP addresses, derives a coarse country from the browser's time zone rather than a device identifier, and collects nothing at all when the browser sends Do Not Track.
Children
unmap is a developer tool and is not directed at children. We do not knowingly collect personal information from anyone under 14. If you believe a child has created an account, write to privacy@unmap.dev and we will delete it.
Changes to this policy
We may update this policy as the product changes. Every version carries an effective date and a version number at the top of this page. For material changes we give at least 30 days' notice, by email to your account address or by a notice on unmap.dev, before the new version takes effect.
Contact
Maps & Apps Inc., 108 Patterson Dr SW, Calgary, AB T3H 3B2, Canada. www.mapsnapps.org
Privacy questions, requests, and Privacy Officer contact (Abraham Poorazizi): privacy@unmap.dev. Account and billing help: support@unmap.dev.