PageSourceSearch

https://www.tracklified.com/privacy

html tracklified.com collected 2026-10-02 01:46:33 UTC 55,249 bytes, 95 lines download raw bytes

1<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/38lglt9yp6wbl.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/0qi5e_qgbcfo7.js"/>
1<script src="/_next/static/chunks/2jpxaq1l72p02.js" async=""></script>
1<script src="/_next/static/chunks/2uq7a3vmj5me6.js" async=""></script>
1<script src="/_next/static/chunks/2c8eaoe-8eeim.js" async=""></script>
1<script src="/_next/static/chunks/30cwmeux_9n9f.js" async=""></script>
1<script src="/_next/static/chunks/16_cxj4_6jj8c.js" async=""></script>
1<script src="/_next/static/chunks/turbopack-2nk2j3e22jdx8.js" async=""></script>
1<script src="/_next/static/chunks/1y6e6xmjaj3yu.js" async=""></script>
1<script src="/_next/static/chunks/1pbuplbg382o7.js" async=""></script>
1<link rel="preload" href="https://api.fontshare.com/v2/css?f[]=satoshi@400,500,600,700&amp;display=swap" as="style"/><link rel="preload" href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&amp;display=swap" as="style"/><link rel="preload" href="https://www.googletagmanager.com/gtag/js?id=G-8VBLBNL95N" as="script"/><title>Tracklified - Receipt Management</title><meta name="description" content="Smart receipt management and expense tracking. Upload, organize, and analyze your receipts with AI-powered insights."/><meta name="keywords" content="receipts,expense tracking,receipt management,HSA,FSA,expense reports"/><link rel="shortcut icon" href="/favicon.png?v=20260414b" type="image/png"/><link rel="icon" href="/favicon.ico?favicon.3i_nh3hsb1rja.ico" sizes="64x64" type="image/x-icon"/><link rel="icon" href="/favicon.png?v=20260414b" type="image/png" sizes="32x32"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous"/>
1<script>// Synchronous first-touch UTM/click-ID capture. Loaded in <head> before any
2// paint or link click so there is no hydration/useEffect race. Shared between
3// the Next.js app (src/app/layout.tsx) and the static marketing landing page
4// (public/landing/index.html).
5//
6// First-touch window: 30 days. Storage: localStorage, cookie fallback.
7// Reader (src/lib/attribution.ts) expires stale entries on read.
8(function () {
9  try {
10    var STORAGE_KEY = "tracklified_attribution";
11    var COOKIE_NAME = "tracklified_attribution";
12    var TTL_MS = 30 * 24 * 60 * 60 * 1000;
13
14    var params = new URL(window.location.href).searchParams;
15    var fresh = {
16      gclid: params.get("gclid") || undefined,
17      fbclid: params.get("fbclid") || undefined,
18      source: params.get("utm_source") || undefined,
19      medium: params.get("utm_medium") || undefined,
20      campaign: params.get("utm_campaign") || undefined,
21      term: params.get("utm_term") || undefined,
22      content: params.get("utm_content") || undefined,
23    };
24
25    var hasAny = false;
26    for (var k in fresh) {
27      if (fresh[k]) { hasAny = true; break; }
28    }
29    if (!hasAny) return;
30
31    function cookieGet(name) {
32      var m = document.cookie.match(new RegExp("(?:^|; )" + name + "=([^;]*)"));
33      if (!m) return null;
34      try { return decodeURIComponent(m[1]); } catch (e) { return null; }
35    }
36    function cookieSet(name, value, maxAgeSec) {
37      // Domain=.tracklified.com so the record crosses subdomains: the gclid is
38      // captured on www (where ads land) but read on app (where signup runs).
39      // A host-only cookie dies at that boundary. Omit Domain on other hosts
40      // (localhost, previews) — browsers reject non-matching Domain attributes.
41      var domain = /(^|\.)tracklified\.com$/.test(window.location.hostname)
42        ? "; Domain=.tracklified.com"
43        : "";
44      document.cookie =
45        name + "=" + encodeURIComponent(value) +
46        "; Max-Age=" + maxAgeSec + "; Path=/; SameSite=Lax" + domain;
47    }
48
49    // Check BOTH stores for a non-expired first-touch record. The cookie is
50    // only written when localStorage fails, so a stale/corrupt localStorage
51    // value must not mask a still-valid cookie record on the overwrite check.
52    function isFreshValid(raw) {
53      if (!raw) return false;
54      try {
55        var p = JSON.parse(raw);
56        if (!p || !p.capturedAt) return false;
57        var age = Date.now() - new Date(p.capturedAt).getTime();
58        return isFinite(age) && age >= 0 && age < TTL_MS;
59      } catch (e) { return false; }
60    }
61
62    var lsRaw = null;
63    try { lsRaw = window.localStorage.getItem(STORAGE_KEY); } catch (e) {}
64    var cookieRaw = cookieGet(COOKIE_NAME);
65    if (isFreshValid(lsRaw) || isFreshValid(cookieRaw)) {
66      // Migrate records captured before the Domain=.tracklified.com change:
67      // a valid host-only cookie (or localStorage-only record) is invisible
68      // to the app subdomain. Re-writing is idempotent — same name/path, the
69      // domain cookie replaces or shadows the legacy one. Max-Age is the
70      // REMAINING first-touch lifetime, never a fresh 30 days — extending it
71      // would let a stale gclid outlive the attribution window.
72      var existing = isFreshValid(cookieRaw) ? cookieRaw : lsRaw;
73      var remainingSec = 60;
74      try {
75        var capMs = new Date(JSON.parse(existing).capturedAt).getTime();
76        remainingSec = Math.max(60, Math.floor((capMs + TTL_MS - Date.now()) / 1000));
77      } catch (e) {}
78      cookieSet(COOKIE_NAME, existing, remainingSec);
79      return;
80    }
81
82    fresh.referrer = document.referrer || undefined;
83    fresh.capturedAt = new Date().toISOString();
84    var serialized = JSON.stringify(fresh);
85
86    try {
87      window.localStorage.setItem(STORAGE_KEY, serialized);
88    } catch (e) {}
89    // ALWAYS write the cookie (not just as a localStorage fallback): the
90    // server reads it at user creation to persist signup attribution on the
91    // User row (src/lib/auth.ts). localStorage is invisible to the server.
92    cookieSet(COOKIE_NAME, serialized, Math.floor(TTL_MS / 1000));
93  } catch (e) {}
94})();
95</script>
95<link href="https://api.fontshare.com/v2/css?f[]=satoshi@400,500,600,700&amp;display=swap" rel="stylesheet"/><link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&amp;display=swap" rel="stylesheet"/>
95<script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script>
95</head><body class="font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><div class="min-h-screen bg-background text-foreground"><header class="paper-rule bg-background/90"><div class="mx-auto flex h-20 max-w-4xl items-center justify-between px-6"><a class="flex items-center gap-3" href="/"><img alt="Tracklified" loading="lazy" width="120" height="43" decoding="async" data-nimg="1" class="h-7 w-auto" style="color:transparent" srcSet="/_next/image?url=%2Ftracklified-wordmark.png&amp;w=128&amp;q=75 1x, /_next/image?url=%2Ftracklified-wordmark.png&amp;w=256&amp;q=75 2x" src="/_next/image?url=%2Ftracklified-wordmark.png&amp;w=256&amp;q=75"/><span class="text-sm text-muted-foreground">Privacy</span></a><a class="text-sm text-muted-foreground transition-colors hover:text-foreground" href="/terms">Terms</a></div></header><main class="mx-auto max-w-4xl px-6 py-12"><div class="paper-panel rounded-lg p-8 lg:p-10"><p class="kicker">Effective August 1, 2026</p><h1 class="mt-4 text-4xl">Privacy Policy</h1><p class="mt-4 max-w-3xl text-sm leading-7 text-muted-foreground">This Privacy Policy explains what Tracklified collects, how receipt and integration data is used, and how you can disconnect Google integrations or request deletion of your data.</p><section class="mt-10 space-y-4 border-t border-border pt-8"><h2 class="text-2xl">Information We Collect</h2><ul class="space-y-3 text-sm leading-7 text-muted-foreground"><li>Account information from your login provider, such as your email address and profile name.</li><li>Receipt files, receipt images, extracted merchant/date/total/item fields, labels, sync status, and duplicate-group metadata.</li><li>Integration credentials and sync metadata, including Google OAuth access and refresh tokens, token expiry timestamps, and last-sync state.</li><li>Operational logs, notification records, and security telemetry — including IP addresses, browser user-agent strings, and page URLs — used to operate, rate-limit, and protect the service.</li><li>If you enable receipt scanning in the mobile app, Tracklified periodically checks your device photo library for new images and runs on-device text recognition to detect receipts. Detected receipts are always presented for your review and approval before being uploaded to your account.</li><li>If you install the browser extension, it automatically reads transaction details — merchant names, amounts, and dates — from supported banking and credit-card websites listed in the extension permissions to match them against your stored receipts. You can also request a scan on any page you are viewing. Transaction data is processed in memory and not persisted on Tracklified servers. The extension stores your login session in your browser&#x27;s local storage to communicate with your Tracklified account.</li><li>If you connect Tracklified to an OpenAI client such as ChatGPT or Codex, Tracklified receives the tool parameters needed to answer your request, such as search terms, date ranges, or transaction merchant/date/amount details. It returns responsive receipt metadata, images, line items, spending summaries, or match results. The Tracklified workspace, when available and explicitly authorized, also processes receipt uploads, corrections, review actions, labels, and selected-record exports that you request. Workspace write audits record action names, changed field names, and record counts. Earlier read-only OpenAI grants do not authorize workspace writes and must be replaced by a new workspace authorization.</li><li>The browser extension can also extract receipt emails from Gmail when you explicitly choose to save an email as a receipt. This reads the email subject, sender, date, and body content from the page you are viewing.</li><li>If you choose to report a site for improved support via the browser extension, an anonymized snapshot of the page structure is sent to Tracklified. All personal information — amounts, dates, and other text — is replaced with placeholders before transmission.</li></ul></section><section class="mt-10 space-y-6 border-t border-border pt-8"><h2 class="text-2xl">Google API Data</h2><p class="text-sm leading-7 text-muted-foreground">If you connect Gmail, Google Drive, or Google Photos, Tracklified requests only the read-only scopes below and uses the resulting data to import receipts into your account.</p><div class="grid gap-4"><div class="rounded-xl border border-border bg-secondary/40 p-5"><h3 class="text-lg">Gmail</h3><p class="mt-2 text-sm leading-7 text-muted-foreground">Tracklified scans your mailbox for messages that look like receipts, reads message headers and bodies, and downloads receipt-like image or PDF attachments to create receipt records in your account.</p><div class="mt-4 space-y-2"><code class="block break-all rounded-lg border border-border bg-card px-3 py-2 text-xs text-muted-foreground">https://www.googleapis.com/auth/gmail.readonly</code></div></div><div class="rounded-xl border border-border bg-secondary/40 p-5"><h3 class="text-lg">Google Drive</h3><p class="mt-2 text-sm leading-7 text-muted-foreground">Tracklified lists Drive file metadata for images and PDFs, lets you select receipt files, and downloads only the files you choose to import.</p><div class="mt-4 space-y-2"><code class="block break-all rounded-lg border border-border bg-card px-3 py-2 text-xs text-muted-foreground">https://www.googleapis.com/auth/drive.file</code></div></div><div class="rounded-xl border border-border bg-secondary/40 p-5"><h3 class="text-lg">Google Photos</h3><p class="mt-2 text-sm leading-7 text-muted-foreground">Tracklified creates a Photos Picker session, receives the media items you select, and downloads them for receipt extraction.</p><div class="mt-4 space-y-2"><code class="block break-all rounded-lg border border-border bg-card px-3 py-2 text-xs text-muted-foreground">https://www.googleapis.com/auth/photospicker.mediaitems.readonly</code></div></div></div><div class="rounded-xl border border-border bg-card p-5"><h3 class="text-lg">Google Limited Use</h3><p class="mt-2 text-sm leading-7 text-muted-foreground">Tracklified&#x27;s use and transfer of information received from Google APIs to any other app adheres to the<!-- --> <a href="https://developers.google.com/terms/api-services-user-data-policy" target="_blank" rel="noopener noreferrer" class="text-accent hover:underline">
95Google API Services User Data Policy</a>, including the Limited Use requirements.</p></div></section><section class="mt-10 space-y-4 border-t border-border pt-8"><h2 class="text-2xl">How We Use Your Data</h2><ul class="space-y-3 text-sm leading-7 text-muted-foreground"><li>To authenticate your account and keep your session active.</li><li>To import receipt images, PDFs, and receipt emails from the integrations you connect.</li><li>To extract structured fields such as merchant name, date, totals, line items, and category labels.</li><li>To detect duplicates, generate export files, and show sync/upload notifications.</li><li>To match bank and credit-card transactions against your receipts via the browser extension.</li><li>To detect and upload receipts from your device photo library when background scanning is enabled in the mobile app.</li><li>To provide customer support and troubleshoot account, sync, billing, and receipt-processing issues you report.</li><li>To secure the service, prevent abuse, debug errors, and comply with legal obligations.</li></ul></section><section class="mt-10 space-y-4 border-t border-border pt-8"><h2 class="text-2xl">Automatic and Background Processing</h2><ul class="space-y-3 text-sm leading-7 text-muted-foreground"><li>When Gmail is connected, Tracklified automatically checks for new receipt-like emails when you open the dashboard (throttled to once every 30 minutes). A server-side process also handles emails forwarded to your dedicated Tracklified address on a recurring schedule.</li><li>If you enable receipt scanning in the mobile app, a background task runs periodically to check for new photos. Text recognition runs entirely on your device. Detected receipts are presented for your review and approval before being uploaded. You can disable scanning at any time in the app settings.</li><li>The browser extension automatically reads transaction pages on supported banking and credit-card websites to match charges against your receipts. Transaction data is sent to Tracklified for matching but is not stored beyond the request. The extension automatically activates on sites listed in its permissions and can scan other pages at your request.</li></ul></section><section class="mt-10 space-y-4 border-t border-border pt-8"><h2 class="text-2xl">Sharing and Subprocessors</h2><ul class="space-y-3 text-sm leading-7 text-muted-foreground"><li>We do not sell your personal information or Google user data.</li><li>We do not use Google user data to serve ads.</li><li>We do not use Google user data to train generalized or non-user-specific AI/ML models.</li><li>When you use the OpenAI connection, OpenAI receives the Tracklified data needed to answer the request you made there. OpenAI is the client you chose for that disclosure, and its own terms and privacy policy govern its handling of the data in your chats.</li><li>If you authorize a Tracklified connection to Meta Muse, Meta receives the receipt records, images, line items, labels, and spending summaries requested through that read-only connection. Tracklified processes search terms, date ranges, receipt IDs, and other tool parameters to answer those requests for the connected account. Meta&#x27;s terms and privacy policy govern its handling of the data it receives. You can ask [email protected] to revoke the Muse authorization; revocation does not erase information already returned to Meta.</li><li>We only transfer Google user data to service providers as needed to provide user-facing Tracklified features, comply with law, or protect the service.</li><li>Human access to Google user data is restricted to cases where you explicitly ask for support, where access is required for security/abuse investigation, or where required by law.</li></ul><div class="mt-6 grid gap-3"><div class="rounded-xl border border-border bg-secondary/30 p-4 text-sm leading-6"><p class="font-medium text-foreground">AI processing providers</p><p class="mt-1 text-muted-foreground">Receipt extraction, receipt email parsing, and receipt-email classification.</p></div><div class="rounded-xl border border-border bg-secondary/30 p-4 text-sm leading-6"><p class="font-medium text-foreground">Cloud hosting and storage providers</p><p class="mt-1 text-muted-foreground">Storage and delivery of receipt files, generated image variants, application data, and operational infrastru
95cture.</p></div><div class="rounded-xl border border-border bg-secondary/30 p-4 text-sm leading-6"><p class="font-medium text-foreground">Authentication providers</p><p class="mt-1 text-muted-foreground">User authentication and account session management.</p></div><div class="rounded-xl border border-border bg-secondary/30 p-4 text-sm leading-6"><p class="font-medium text-foreground">Payment processors</p><p class="mt-1 text-muted-foreground">Subscription billing and payment processing.</p></div><div class="rounded-xl border border-border bg-secondary/30 p-4 text-sm leading-6"><p class="font-medium text-foreground">On-device ML frameworks</p><p class="mt-1 text-muted-foreground">The mobile app uses on-device text recognition (Google ML Kit) for initial receipt detection and classification. This screening step happens entirely on your device. Once you approve a receipt for upload, it is processed server-side using AI services listed above.</p></div></div></section><section class="mt-10 space-y-4 border-t border-border pt-8"><h2 class="text-2xl">Security and Retention</h2><p class="text-sm leading-7 text-muted-foreground">Google OAuth tokens are stored with your integration record and encrypted at rest. Receipt files are stored with our cloud storage provider, and receipt metadata is stored in Tracklified&#x27;s application database. We retain this information while your account is active or as needed to provide the service, comply with legal obligations, resolve disputes, and enforce our agreements.</p><p class="text-sm leading-7 text-muted-foreground">Access to customer data is limited to authorized personnel and only when reasonably necessary to provide support, maintain and secure the service, investigate abuse or incidents, comply with law, or with your consent.</p></section><section class="mt-10 space-y-4 border-t border-border pt-8"><h2 class="text-2xl">Your Choices and Deletion</h2><ul class="space-y-3 text-sm leading-7 text-muted-foreground"><li>You can disconnect Gmail, Drive, or Photos from the Integrations page; this revokes your Google tokens and stops future syncs. You can also revoke access directly from your Google Account security settings.</li><li>You can delete receipts from your dashboard; associated stored receipt images are deleted from cloud storage as part of that flow.</li><li>You can disable background photo scanning at any time in the mobile app settings.</li><li>You can uninstall or disable the browser extension to stop transaction matching on banking sites.</li><li>You can remove the Tracklified connection in ChatGPT or Codex to stop future OpenAI tool requests. You can also ask [email protected] to revoke the authorization on Tracklified&#x27;s side.</li><li>You can delete your entire account from the Settings page. This permanently removes all receipts, images, integrations, and your user record. You can also request deletion by emailing [email protected].</li></ul></section><section class="mt-10 space-y-4 border-t border-border pt-8"><h2 class="text-2xl">Children&#x27;s Privacy</h2><p class="text-sm leading-7 text-muted-foreground">Tracklified is not directed at children under the age of 13. We do not knowingly collect personal information from children under 13. If we become aware that we have collected personal information from a child under 13, we will take steps to delete that information promptly. If you believe a child under 13 has provided us with personal information, please contact us at<!-- --> <a href="mailto:[email protected]" class="text-accent hover:underline">[email protected]</a>.</p></section><section class="mt-10 space-y-4 border-t border-border pt-8"><h2 class="text-2xl">Contact</h2><p class="text-sm leading-7 text-muted-foreground">Questions or deletion requests:<!-- --> <a href="mailto:[email protected]" class="text-accent hover:underline">[email protected]</a></p></section></div></main></div><!--$--><!--/$-->
95<script src="/_next/static/chunks/0qi5e_qgbcfo7.js" id="_R_" async=""></script>
95<script>(self.__next_f=self.__next_f||[]).push([0])</script>
95<script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\nd:I[168027,[\"/_next/static/chunks/1y6e6xmjaj3yu.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/38lglt9yp6wbl.css\",\"style\"]\n2:T102b,// Synchronous first-touch UTM/click-ID capture. Loaded in \u003chead\u003e before any\n// paint or link click so there is no hydration/useEffect race. Shared between\n// the Next.js app (src/app/layout.tsx) and the static marketing landing page\n// (public/landing/index.html).\n//\n// First-touch window: 30 days. Storage: localStorage, cookie fallback.\n// Reader (src/lib/attribution.ts) expires stale entries on read.\n(function () {\n  try {\n    var STORAGE_KEY = \"tracklified_attribution\";\n    var COOKIE_NAME = \"tracklified_attribution\";\n    var TTL_MS = 30 * 24 * 60 * 60 * 1000;\n\n    var params = new URL(window.location.href).searchParams;\n    var fresh = {\n      gclid: params.get(\"gclid\") || undefined,\n      fbclid: params.get(\"fbclid\") || undefined,\n      source: params.get(\"utm_source\") || undefined,\n      medium: params.get(\"utm_medium\") || undefined,\n      campaign: params.get(\"utm_campaign\") || undefined,\n      term: params.get(\"utm_term\") || undefined,\n      content: params.get(\"utm_content\") || undefined,\n    };\n\n    var hasAny = false;\n    for (var k in fresh) {\n      if (fresh[k]) { hasAny = true; break; }\n    }\n    if (!hasAny) return;\n\n    function cookieGet(name) {\n      var m = document.cookie.match(new RegExp(\"(?:^|; )\" + name + \"=([^;]*)\"));\n      if (!m) return null;\n      try { return decodeURIComponent(m[1]); } catch (e) { return null; }\n    }\n    function cookieSet(name, value, maxAgeSec) {\n      // Domain=.tracklified.com so the record crosses subdomains: the gclid is\n      // captured on www (where ads land) but read on app (where signup runs).\n      // A host-only cookie dies at that boundary. Omit Domain on other hosts\n      // (localhost, previews) — browsers reject non-matching Domain attributes.\n      var domain = /(^|\\.)tracklified\\.com$/.test(window.location.hostname)\n        ? \"; Domain=.tracklified.com\"\n        : \"\";\n      document.cookie =\n        name + \"=\" + encodeURIComponent(value) +\n        \"; Max-Age=\" + maxAgeSec + \"; Path=/; SameSite=Lax\" + domain;\n    }\n\n    // Check BOTH stores for a non-expired first-touch record. The cookie is\n    // only written when localStorage fails, so a stale/corrupt localStorage\n    // value must not mask a still-valid cookie record on the overwrite check.\n    function isFreshValid(raw) {\n      if (!raw) return false;\n      try {\n        var p = JSON.parse(raw);\n        if (!p || !p.capturedAt) return false;\n        var age = Date.now() - new Date(p.capturedAt).getTime();\n        return isFinite(age) \u0026\u0026 age \u003e= 0 \u0026\u0026 age \u003c TTL_MS;\n      } catch (e) { return false; }\n    }\n\n    var lsRaw = null;\n    try { lsRaw = window.localStorage.getItem(STORAGE_KEY); } catch (e) {}\n    var cookieRaw = cookieGet(COOKIE_NAME);\n    if (isFreshValid(lsRaw) || isFreshValid(cookieRaw)) {\n      // Migrate records captured before the Domain=.tracklified.com change:\n      // a valid host-only cookie (or localStorage-only record) is invisible\n      // to the app subdomain. Re-writing is idempotent — same name/path, the\n      // domain cookie replaces or shadows the legacy one. Max-Age is the\n      // REMAINING first-touch lifetime, never a fresh 30 days — extending it\n      // would let a stale gclid outlive the attribution window.\n      var existing = isFreshValid(cookieRaw) ? cookieRaw : lsRaw;\n      var remainingSec = 60;\n      try {\n        var capMs = new Date(JSON.parse(existing).capturedAt).getTime();\n        remainingSec = Math.max(60, Math.floor((capMs + TTL_MS - Date.now()) / 1000));\n      } catch (e) {}\n      cookieSet(COOKIE_NAME, existing, remainingSec);\n      return;\n    }\n\n    fresh.referrer = document.referrer || undefined;\n    fresh.capturedAt = new Date().toISOString();\n    var serialized = JSON.stringify(fresh);\n\n    try {\n      window.localStorage.setItem(STORAGE_KEY, serialized);\n    } catch (e) {}\n    // ALWAYS write the cookie (not just as a localStorage fallback): the\n    // server reads it at user creation to persist signup attribution on the\n    // User row (sr
95c/lib/auth.ts). localStorage is invisible to the server.\n    cookieSet(COOKIE_NAME, serialized, Math.floor(TTL_MS / 1000));\n  } catch (e) {}\n})();\nb:X\n0:{\"P\":null,\"c\":[\"\",\"privacy\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"privacy\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4096]},\"$undefined\",\"$undefined\",4096]},\"$undefined\",\"$undefined\",4112],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/38lglt9yp6wbl.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/1y6e6xmjaj3yu.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"$2\"}}],\"$L3\",\"$L4\",\"$L5\",\"$L6\"]}],\"$L7\",\"$L8\"]}]]}],{\"children\":[\"$L9\",{\"children\":[\"$La\",{},null,false,null]},null,false,\"$b\"]},null,false,null],\"$Lc\",false]],\"m\":\"$undefined\",\"G\":[\"$d\",[\"$Le\"]],\"S\":false,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"-egeDV4gP0pbla9Q1ZTuK\"}\nf:I[861057,[\"/_next/static/chunks/1y6e6xmjaj3yu.js\"],\"ClientTelemetry\"]\n10:I[339756,[\"/_next/static/chunks/1y6e6xmjaj3yu.js\"],\"default\"]\n11:I[837457,[\"/_next/static/chunks/1y6e6xmjaj3yu.js\"],\"default\"]\n12:I[654576,[\"/_next/static/chunks/1y6e6xmjaj3yu.js\"],\"GoogleAnalytics\"]\n13:I[522016,[\"/_next/static/chunks/1y6e6xmjaj3yu.js\",\"/_next/static/chunks/1pbuplbg382o7.js\"],\"\"]\n14:I[605500,[\"/_next/static/chunks/1y6e6xmjaj3yu.js\",\"/_next/static/chunks/1pbuplbg382o7.js\"],\"Image\"]\n22:I[897367,[\"/_next/static/chunks/1y6e6xmjaj3yu.js\"],\"ViewportBoundary\"]\n24:I[897367,[\"/_next/static/chunks/1y6e6xmjaj3yu.js\"],\"MetadataBoundary\"]\n25:\"$Sreact.suspense\"\n:HL[\"https://api.fontshare.com/v2/css?f[]=satoshi@400,500,600,700\u0026display=swap\",\"style\"]\n:HL[\"https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600\u0026display=swap\",\"style\"]\n3:[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.googleapis.com\"}]\n4:[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.gstatic.com\",\"crossOrigin\":\"anonymous\"}]\n5:[\"$\",\"link\",null,{\"href\":\"https://api.fontshare.com/v2/css?f[]=satoshi@400,500,600,700\u0026display=swap\",\"rel\":\"stylesheet\"}]\n6:[\"$\",\"link\",null,{\"href\":\"https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600\u0026display=swap\",\"rel\":\"stylesheet\"}]\n7:[\"$\",\"body\",null,{\"className\":\"font-sans antialiased\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"$Lf\",null,{}],[\"$\",\"$L10\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L11\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\"
95:\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\n8:[\"$\",\"$L12\",null,{\"gaId\":\"G-8VBLBNL95N\"}]\n9:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L10\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L11\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\na:[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"div\",null,{\"className\":\"min-h-screen bg-background text-foreground\",\"children\":[[\"$\",\"header\",null,{\"className\":\"paper-rule bg-background/90\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto flex h-20 max-w-4xl items-center justify-between px-6\",\"children\":[[\"$\",\"$L13\",null,{\"href\":\"/\",\"className\":\"flex items-center gap-3\",\"children\":[[\"$\",\"$L14\",null,{\"src\":\"/tracklified-wordmark.png\",\"alt\":\"Tracklified\",\"width\":120,\"height\":43,\"className\":\"h-7 w-auto\"}],[\"$\",\"span\",null,{\"className\":\"text-sm text-muted-foreground\",\"children\":\"Privacy\"}]]}],[\"$\",\"$L13\",null,{\"href\":\"/terms\",\"className\":\"text-sm text-muted-foreground transition-colors hover:text-foreground\",\"children\":\"Terms\"}]]}]}],[\"$\",\"main\",null,{\"className\":\"mx-auto max-w-4xl px-6 py-12\",\"children\":[\"$\",\"div\",null,{\"className\":\"paper-panel rounded-lg p-8 lg:p-10\",\"children\":[[\"$\",\"p\",null,{\"className\":\"kicker\",\"children\":\"Effective August 1, 2026\"}],[\"$\",\"h1\",null,{\"className\":\"mt-4 text-4xl\",\"children\":\"Privacy Policy\"}],[\"$\",\"p\",null,{\"className\":\"mt-4 max-w-3xl text-sm leading-7 text-muted-foreground\",\"children\":\"This Privacy Policy explains what Tracklified collects, how receipt and integration data is used, and how you can disconnect Google integrations or request deletion of your data.\"}],[\"$\",\"section\",null,{\"className\":\"mt-10 space-y-4 border-t border-border pt-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl\",\"children\":\"Information We Collect\"}],[\"$\",\"ul\",null,{\"className\":\"space-y-3 text-sm leading-7 text-muted-foreground\",\"children\":[[\"$\",\"li\",\"Account information from your login provider, such as your email address and profile name.\",{\"children\":\"Account information from your login provider, such as your email address and profile name.\"}],[\"$\",\"li\",\"Receipt files, receipt images, extracted merchant/date/total/item fields, labels, sync status, and duplicate-group metadata.\",{\"children\":\"Receipt files, receipt images, extracted merchant/date/total/item fields, labels, sync status, and duplicate-group metadata.\"}],[\"$\",\"li\",\"Integration credentials and sync metadata, including Google OAuth access and refresh tokens, token expiry timestamps, and last-sync state.\",{\"children\":\"Integration credentials and sync metadata, including Google OAuth access and refresh tokens, token expiry timestamps, and last-sync state.\"}],[\"$\",\"li\",\"Operational logs, notification records, and security telemetry — including IP addresses, browser user-agent strings, and page URLs — used to operate, rate-limit, and protect the service.\",{\"children\":\"Operational logs, notification records, and security telemetry — including IP addresses, browser user-agent strings, and page URLs — used to operate, rate-limit, and protect the service.\"}],[\"$\",\"li\",\"If you enable receipt scanning in the mobile app, Tracklified periodically checks your device photo library for new images and runs on-device text recognition to detect receipts. Detected receipts are always presented for your review and approval before being uploaded to your account.\",{\"children\":\"If you enable receipt scanning in the mobile app, Tracklified periodically checks your device photo library for new images and runs on-device text recognition to detect receipts. Detected receipts are always presented for your review and approval before being uploaded to your account.\"}],[\"$\",\"li\",\"If you install the browser extension, it automatically reads transaction details — merchant names, amounts, and dates — from supported banking and credit-card websites listed in the extension permissions to match them against your stored receipts. You can also request a scan on any page you are viewing. Transaction data is processed in memory and not persisted on Tracklified servers. The extension stores your login session in your browser's local storage to communicate with your Tracklified account.\",{\"children\":\"If you install the browser extension, it automatically reads transaction details — merchant names, amounts, and dates — from supported banking and credit-card websites listed in the extension permissions to match them against your stored receipts. You can also request a scan on any page you are viewing. Transaction data is processed in memory and not persisted on Tracklified servers. The extension stores your login session in your browser's local storage to communicate with your Tracklified account.\"}],\"$L15\",\"$L16\",\"$L17\"]}]]}],\"$L18\",\"$L19\",\"$L1a\",\"$L1b\",\"$L1c\",\"$L1d\",\"$L1e\",\"$L1f\"]}]}]]}],[\"$L20\"],\"$L21\"]}]\nc:[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L22\",null,{\"children\":\"$L23\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L24\",null,{\"children\":[\"$\",\"$25\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L26\"}]}]}],null]}]\ne:[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/38lglt9yp6wbl.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n2b:I[897367,[\"/_next/static/chunks/1y6e6xmjaj3yu.js\"],\"OutletBoundary\"]\nb:C\n15:[\"$\",\"li\",\"If you connect Tracklified to an OpenAI client such as ChatGPT or Codex, Tracklified receives the tool parameters needed to answer your request, such as search terms, date ranges, or transaction merchant/date/amount details. It returns responsive receipt metadata, images, line items, spending summaries, or match results. The Tracklified workspace, when available and explicitly authorized, also processes receipt uploads, corrections, review actions, labels, and selected-record exports that you request. Workspace write audits record action names, changed field names, and record counts. Earlier read-only OpenAI grants do not authorize workspace writes and must be replaced by a new workspace authorization.\",{\"children\":\"If you connect Tracklified to an OpenAI client such as ChatGPT or Codex, Tracklified receives the tool parameters needed to answer your request, such as search terms, date ranges, or transaction merchant/date/amount details. It returns responsive receipt metadata, images, line items, spending summaries, or match results. The Tracklified workspace, when available and explicitly authorized, also processes receipt uploads, corrections, review actions, labels, and selected-record exports that you request. Workspace write audits record action names, changed field names, and record counts. Earlier read-only OpenAI grants do not authorize workspace writes and must be replaced by a new workspace authorization.\"}]\n16:[\"$\",\"li\",\"The browser extension can also extract receipt emails from Gmail when you explicitly choose to save an email as a receipt. This reads the email subject, sender, date, and body content from the page you are viewing.\",{\"children\":\"The browser extension can also extract receipt emails from Gmail when you explicitly choose to save an email as a receipt. This reads the email subject, sender, date, and body content from the page you are viewing.\"}]\n17:[\"$\",\"li\",\"If you choose to report a site for improved support via the browser extension, an anonymized snapshot of the page structure is sent to Tracklified. All personal information — amounts, dates, and other text — is replaced with placeholders before transmission.\",{\"children\":\"If you choose to report a site for improved support via the browser extension, an anonymized snapshot of the page structure is sent to Tracklified. All personal information — amounts, dates, and other text — is replaced with placeholders before transmission.\"}]\n18:[\"$\",\"section\",null,{\"className\":\"mt-10 space-y-6 border-t border-border pt-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl\",\"children\":\"Google API Data\"}],[\"$\",\"p\",null,{\"className\":\"text-sm leading-7 text-muted-foreground\",\"children\":\"If you connect Gmail, Google Drive, or Google Photos, Tracklified requests only the read-only scopes below and uses the resulting data to import receipts into your account.\"}],[\"$\",\"div\",null,{\"className\":\"grid gap-4\",\"children\":[[\"$\",\"div\",\"Gmail\",{\"className\":\"rounded-xl border border-border bg-secondary/40 p-5\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-lg\",\"children\":\"Gmail\"}],[\"$\",\"p\",null,{\"className\":\"mt-2 text-sm leading-7 text-muted-foreground\",\"children\":\"Tracklified scans your mailbox for messages that look like receipts, reads message headers and bodies, and downloads receipt-like image or PDF attachments to create receipt records in your account.\"}],[\"$\",\"div\",null,{\"className\":\"mt-4 space-y-2\",\"children\":[[\"$\",\"code\",\"https://www.googleapis.com/auth/gmail.readonly\",{\"className\":\"block break-all rounded-lg border border-border bg-card px-3 py-2 text-xs text-muted-foreground\",\"children\":\"https://www.googleapis.com/auth/gmail.readonly\"}]]}]]}],[\"$\",\"div\",\"Google Drive\",{\"className\":\"rounded-xl border border-border bg-secondary/40 p-5\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-lg\",\"children\":\"Google Drive\"}],[\"$\",\"p\",null,{\"className\":\"mt-2 text-sm leading-7 text-muted-foreground\",\"children\":\"Tracklified lists Drive file metadata for images and PDFs, lets you select receipt files, and downloads only the files you choose to import.\"}],[\"$\",\"div\",null,{\"className\":\"mt-4 space-y-2\",\"children\":[[\"$\",\"code\",\"https://www.googleapis.com/auth/drive.file\",{\"className\":\"block break-all rounded-lg border border-border bg-card px-3 py-2 text-xs text-muted-foreground\",\"children\":\"https://www.googleapis.com/auth/drive.file\"}]]}]]}],[\"$\",\"div\",\"Google Photos\",{\"className\":\"rounded-xl border border-border bg-secondary/40 p-5\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-lg\",\"children\":\"Google Photos\"}],[\"$\",\"p\",null,{\"className\":\"mt-2 text-sm leading-7 text-muted-foreground\",\"children\":\"Tracklified creates a Photos Picker session, receives the media items you select, and downloads them for receipt extraction.\"}],[\"$\",\"div\",null,{\"className\":\"mt-4 space-y-2\",\"children\":[[\"$\",\"code\",\"https://www.googleapis.com/auth/photospicker.mediaitems.readonly\",{\"className\":\"block break-all rounded-lg border border-border bg-card px-3 py-2 text-xs text-muted-foreground\",\"children\":\"https://www.googleapis.com/auth/photospicker.mediaitems.readonly\"}]]}]]}]]}],[\"$\",\"div\",null,{\"className\":\"rounded-xl border border-border bg-card p-5\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-lg\",\"children\":\"Google Limited Use\"}],[\"$\",\"p\",null,{\"className\":\"mt-2 text-sm leading-7 text-muted-foreground\",\"children\":[\"Tracklified's use and transfer of information received from Google APIs to any other app adheres to the\",\" \",[\"$\",\"a\",null,{\"href\":\"https://developers.google.com/terms/api-services-user-data-policy\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"text-accent hover:underline\",\"children\":\"Google API Services 
95User Data Policy\"}],\", including the Limited Use requirements.\"]}]]}]]}]\n19:[\"$\",\"section\",null,{\"className\":\"mt-10 space-y-4 border-t border-border pt-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl\",\"children\":\"How We Use Your Data\"}],[\"$\",\"ul\",null,{\"className\":\"space-y-3 text-sm leading-7 text-muted-foreground\",\"children\":[[\"$\",\"li\",null,{\"children\":\"To authenticate your account and keep your session active.\"}],[\"$\",\"li\",null,{\"children\":\"To import receipt images, PDFs, and receipt emails from the integrations you connect.\"}],[\"$\",\"li\",null,{\"children\":\"To extract structured fields such as merchant name, date, totals, line items, and category labels.\"}],[\"$\",\"li\",null,{\"children\":\"To detect duplicates, generate export files, and show sync/upload notifications.\"}],[\"$\",\"li\",null,{\"children\":\"To match bank and credit-card transactions against your receipts via the browser extension.\"}],[\"$\",\"li\",null,{\"children\":\"To detect and upload receipts from your device photo library when background scanning is enabled in the mobile app.\"}],[\"$\",\"li\",null,{\"children\":\"To provide customer support and troubleshoot account, sync, billing, and receipt-processing issues you report.\"}],[\"$\",\"li\",null,{\"children\":\"To secure the service, prevent abuse, debug errors, and comply with legal obligations.\"}]]}]]}]\n1a:[\"$\",\"section\",null,{\"className\":\"mt-10 space-y-4 border-t border-border pt-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl\",\"children\":\"Automatic and Background Processing\"}],[\"$\",\"ul\",null,{\"className\":\"space-y-3 text-sm leading-7 text-muted-foreground\",\"children\":[[\"$\",\"li\",null,{\"children\":\"When Gmail is connected, Tracklified automatically checks for new receipt-like emails when you open the dashboard (throttled to once every 30 minutes). A server-side process also handles emails forwarded to your dedicated Tracklified address on a recurring schedule.\"}],[\"$\",\"li\",null,{\"children\":\"If you enable receipt scanning in the mobile app, a background task runs periodically to check for new photos. Text recognition runs entirely on your device. Detected receipts are presented for your review and approval before being uploaded. You can disable scanning at any time in the app settings.\"}],[\"$\",\"li\",null,{\"children\":\"The browser extension automatically reads transaction pages on supported banking and credit-card websites to match charges against your receipts. Transaction data is sent to Tracklified for matching but is not stored beyond the request. The extension automatically activates on sites listed in its permissions and can scan other pages at your request.\"}]]}]]}]\n1b:[\"$\",\"section\",null,{\"className\":\"mt-10 space-y-4 border-t border-border pt-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl\",\"children\":\"Sharing and Subprocessors\"}],[\"$\",\"ul\",null,{\"className\":\"space-y-3 text-sm leading-7 text-muted-foreground\",\"children\":[[\"$\",\"li\",\"We do not sell your personal information or Google user data.\",{\"children\":\"We do not sell your personal information or Google user data.\"}],[\"$\",\"li\",\"We do not use Google user data to serve ads.\",{\"children\":\"We do not use Google user data to serve ads.\"}],[\"$\",\"li\",\"We do not use Google user data to train generalized or non-user-specific AI/ML models.\",{\"children\":\"We do not use Google user data to train generalized or non-user-specific AI/ML models.\"}],[\"$\",\"li\",\"When you use the OpenAI connection, OpenAI receives the Tracklified data needed to answer the request you made there. OpenAI is the client you chose for that disclosure, and its own terms and privacy policy govern its handling of the data in your chats.\",{\"children\":\"When you use the OpenAI connection, OpenAI receives the Tracklified data needed to answer the request you made there. OpenAI is the client you chose for that disclosure, and its own terms and privacy policy govern its handling of the data in your chats.\"}],[\"$\",\"li\",\"If you authorize a Tracklified connection to Meta Muse, Meta receives the receipt records, images, line items, labels, and spending summaries requested through that read-only connection. Tracklified processes search terms, date ranges, receipt IDs, and other tool parameters to answer those requests for the connected account. Meta's terms and privacy policy govern its handling of the data it receives. You can ask [email protected] to revoke the Muse authorization; revocation does not erase information already returned to Meta.\",{\"children\":\"If you authorize a Tracklified connection to Meta Muse, Meta receives the receipt records, images, line items, labels, and spending summaries requested through that read-only connection. Tracklified processes search terms, date ranges, receipt IDs, and other tool parameters to answer those requests for the connected account. Meta's terms and privacy policy govern its handling of the data it receives. You can ask [email protected] to revoke the Muse authorization; revocation does not erase information already returned to Meta.\"}],[\"$\",\"li\",\"We only transfer Google user data to service providers as needed to provide user-facing Tracklified features, comply with law, or protect the service.\",{\"children\":\"We only transfer Google user data to service providers as needed to provide user-facing Tracklified features, comply with law, or protect the service.\"}],[\"$\",\"li\",\"Human access to Google user data is restricted to cases where you explicitly ask for support, where access is required for security/abuse investigation, or where required by law.\",{\"children\":\"Human access to Google user data is restricted to cases where you explicitly ask for support, where access is required for security/abuse investigation, or where required by law.\"}]]}],[\"$\",\"div\",null,{\"className\":\"mt-6 grid gap-3\",\"children\":[[\"$\",\"div\",\"AI processing providers\",{\"className\":\"rounded-xl border border-border bg-secondary/30 p-4 text-sm leading-6\",\"children\":[[\"$\",\"p\",null,{\"className\":\"font-medium text-foreground\",\"children\":\"AI processing providers\"}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-muted-foreground\",\"children\":\"Receipt extraction, receipt email parsing, and receipt-email classification.\"}]]}],\"$L27\",\"$L28\",\"$L29\",\"$L2a\"]}]]}]\n1c:[\"$\",\"section\",null,{\"className\":\"mt-10 space-y-4 border-t border-border pt-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl\",\"children\":\"Security and Retention\"}],[\"$\",\"p\",null,{\"className\":\"text-sm leading-7 text-muted-foreground\",\"children\":\"Google OAuth tokens are stored with your integration record and encrypted at rest. Receipt files are stored with our cloud storage provider, and receipt metadata is stored in Tracklified's application database. We retain this information while your account is active or as needed to provide the service, comply with legal obligations, resolve disputes, and enforce our agreements.\"}],[\"$\",\"p\",null,{\"className\":\"text-sm leading-7 text-muted-foreground\",\"children\":\"Access to customer data is limited to authorized personnel and only when reasonably necessary to provide support, maintain and secure the service, investigate abuse or incidents, comply with law, or with your consent.\"}]]}]\n1d:[\"$\",\"section\",null,{\"className\":\"mt-10 space-y-4 border-t border-border pt-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl\",\"children\":\"Your Choices and Deletion\"}],[\"$\",\"ul\",null,{\"className\":\"space-y-3 text-sm leading-7 text-muted-foreground\",\"children\":[[\"$\",\"li\",null,{\"children\":\"You can disconnect Gmail, Drive, or Photos from the Integrations page; this revokes your Google tokens and stops future syncs. You can also revoke access directly from your Google Account security settings.\"}],[\"$\",\"li\",null,{\"children\":\"You can delete receipts from your dashboard; associated stored receipt images are deleted from cloud storage as part of that flow.\"}],[\"$\",\"li\",null,{\"children\":\"You can disable background photo scanning at any time in the mobile app settings.\"}],[\"$\",\"li\",null,{\"children\":\"You can uninstall or disable the browser extension to stop transaction matching on banking sites.\"}],[\"$\",\"li\",null,{\"children\":\"You can remove the Tracklified connection in ChatGPT or Codex to stop future OpenAI tool requests. You can also ask [email protected] to revoke the authorization on Tracklified's side.\"}],[\"$\",\"li\",null,{\"children\":\"You can delete your entire account from the Settings page. This permanently removes all receipts, images, integrations, and your user record. You can also request deleti
95on by emailing [email protected].\"}]]}]]}]\n1e:[\"$\",\"section\",null,{\"className\":\"mt-10 space-y-4 border-t border-border pt-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl\",\"children\":\"Children's Privacy\"}],[\"$\",\"p\",null,{\"className\":\"text-sm leading-7 text-muted-foreground\",\"children\":[\"Tracklified is not directed at children under the age of 13. We do not knowingly collect personal information from children under 13. If we become aware that we have collected personal information from a child under 13, we will take steps to delete that information promptly. If you believe a child under 13 has provided us with personal information, please contact us at\",\" \",[\"$\",\"a\",null,{\"href\":\"mailto:[email protected]\",\"className\":\"text-accent hover:underline\",\"children\":\"[email protected]\"}],\".\"]}]]}]\n1f:[\"$\",\"section\",null,{\"className\":\"mt-10 space-y-4 border-t border-border pt-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl\",\"children\":\"Contact\"}],[\"$\",\"p\",null,{\"className\":\"text-sm leading-7 text-muted-foreground\",\"children\":[\"Questions or deletion requests:\",\" \",[\"$\",\"a\",null,{\"href\":\"mailto:[email protected]\",\"className\":\"text-accent hover:underline\",\"children\":\"[email protected]\"}]]}]]}]\n20:[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/1pbuplbg382o7.js\",\"async\":true,\"nonce\":\"$undefined\"}]\n21:[\"$\",\"$L2b\",null,{\"children\":[\"$\",\"$25\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@2c\"}]}]\n27:[\"$\",\"div\",\"Cloud hosting and storage providers\",{\"className\":\"rounded-xl border border-border bg-secondary/30 p-4 text-sm leading-6\",\"children\":[[\"$\",\"p\",null,{\"className\":\"font-medium text-foreground\",\"children\":\"Cloud hosting and storage providers\"}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-muted-foreground\",\"children\":\"Storage and delivery of receipt files, generated image variants, application data, and operational infrastructure.\"}]]}]\n28:[\"$\",\"div\",\"Authentication providers\",{\"className\":\"rounded-xl border border-border bg-secondary/30 p-4 text-sm leading-6\",\"children\":[[\"$\",\"p\",null,{\"className\":\"font-medium text-foreground\",\"children\":\"Authentication providers\"}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-muted-foreground\",\"children\":\"User authentication and account session management.\"}]]}]\n29:[\"$\",\"div\",\"Payment processors\",{\"className\":\"rounded-xl border border-border bg-secondary/30 p-4 text-sm leading-6\",\"children\":[[\"$\",\"p\",null,{\"className\":\"font-medium text-foreground\",\"children\":\"Payment processors\"}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-muted-foreground\",\"children\":\"Subscription billing and payment processing.\"}]]}]\n2a:[\"$\",\"div\",\"On-device ML frameworks\",{\"className\":\"rounded-xl border border-border bg-secondary/30 p-4 text-sm leading-6\",\"children\":[[\"$\",\"p\",null,{\"className\":\"font-medium text-foreground\",\"children\":\"On-device ML frameworks\"}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-muted-foreground\",\"children\":\"The mobile app uses on-device text recognition (Google ML Kit) for initial receipt detection and classification. This screening step happens entirely on your device. Once you approve a receipt for upload, it is processed server-side using AI services listed above.\"}]]}]\n23:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n2d:I[27201,[\"/_next/static/chunks/1y6e6xmjaj3yu.js\"],\"IconMark\"]\n26:[[\"$\",\"title\",\"0\",{\"children\":\"Tracklified - Receipt Management\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Smart receipt management and expense tracking. Upload, organize, and analyze your receipts with AI-powered insights.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"keywords\",\"content\":\"receipts,expense tracking,receipt management,HSA,FSA,expense reports\"}],[\"$\",\"link\",\"3\",{\"rel\":\"shortcut icon\",\"href\":\"/favicon.png?v=20260414b\",\"type\":\"image/png\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.3i_nh3hsb1rja.ico\",\"sizes\":\"64x64\",\"type\":\"image/x-icon\"}],[\"$\",\"link\",\"5\",{\"rel\":\"icon\",\"href\":\"/favicon.png?v=20260414b\",\"type\":\"image/png\",\"sizes\":\"32x32\"}],[\"$\",\"$L2d\",\"6\",{}]]\n2c:null\n"])</script>
95</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.