Privacy policy
Last updated 19 October 2026
The short version
- Your statements are not uploaded. Digital PDFs, their passwords and the transactions in them are processed by code running in your browser. They never reach our servers, unless you choose to send one to us.
- Sending us something is always your choice. The contact form and the "Send us this statement" button are the only ways a file leaves your browser. Statements you send are seen only by our team and deleted after 30 days. Details.
- No account is needed. We do not ask for your name, email or phone number to use the converter or the free tools.
- No cookies. We don't set any, so there is no cookie banner. We don't use advertising or third-party trackers, and we don't sell data.
- If something breaks, we get an anonymous error report (like "the Excel export crashed in our code at line 241"), never your file or its contents. What an error report contains.
- We count anonymous usage events (like "a conversion succeeded, SBI format, 48 rows, balance check passed") so we can see what works and fix what doesn't. Exactly what is counted.
What is stored on your device
To make the tools work, your browser's local storage (not a cookie) keeps:
- your ledger rules (for example "SWIGGY → Staff Welfare");
- a random anonymous ID and a count of pages converted this month, used for the free monthly allowance. This ID is never sent to us;
- your light/dark theme choice and, if you set it, your choice to turn off usage counting.
This stays on your device. You can delete it any time by clearing site data for khatasheet.com in your browser settings.
Anonymous usage counts
When you use the site, your browser sends a small message to our own server (/api/event) for a handful of events. Each message is counted on its own: there is no cookie, no user or session ID, and nothing that links one event to another or to you. Our server accepts only the fields below, checks every value against a fixed list or a strict format, and drops anything else.
| Field | What is recorded |
|---|---|
| Event name | page_view, convert_start, convert_success, convert_fail, export, tool_use, feedback, contact_submit, statement_share (the last two only count that a message or statement was sent, not what was in it) |
| Page | The path only, for example /tools/gst-calculator. Never the query string. |
| Referring site | Page views only: the host name of the site that linked to us (for example google.com), never the full address. |
| Device class | mobile, tablet or desktop, worked out from the window width. Not your browser or device model. |
| Country | A two-letter country code that Cloudflare derives at the edge. Your IP address itself is not stored by us. |
| Source | Whether a conversion used your own file or one of our synthetic samples. |
| Bank format | The format menu setting (for example "auto") and the format detected (for example "sbi" or "generic"). |
| Size | Number of pages and rows converted. |
| Balance check | Passed or failed, whether the closing balance matched, whether the opening balance was printed or derived, the number of mismatched rows and issues. |
| Timing | How long the conversion took, in milliseconds. |
| Corrections | How many cells you edited before exporting or giving feedback (a count, not the values). |
| Export type | xlsx, csv, tally or masters. |
| Tool used | Which free tool was used (counted once per page visit). |
| Error category | A fixed label such as password_required, no_rows, scanned or not_pdf. Never the error message or file details. |
| Feedback | Only if you click it: thumbs up or down and an optional note (max 500 characters). Digit sequences and e-mail addresses are removed from the note before it is stored. |
Never recorded: your file or its name, passwords, transactions, narrations, amounts, balances, account numbers, names, your IP address, your browser's user-agent string, or any identifier. The time of each event is stored.
The counts are stored in our Cloudflare account (Workers Analytics Engine and/or a D1 database) and used only to produce aggregate figures such as "how many statements were converted this month and how many passed the balance check". Requests from known bots are ignored. Visitors with Global Privacy Control or Do Not Track switched on are not counted.
Counting on this browser: checking…
Saved in this browser's local storage. You can see every message we send in your browser's developer tools (Network tab, filter "event").
Anonymous error reports
If the site hits a bug while you use it (for example the converter crashes on an unusual statement layout, or an export fails), your browser sends a short error report to our own server (/api/error) so we can find and fix it. Like the usage counts it has no cookie, no user or session ID, and the "Turn off counting" switch above (or Global Privacy Control / Do Not Track) turns error reports off too.
An error report contains only: the type of error (for example "TypeError"), a short error message with every number, e-mail address, web address and quoted text removed, the place in our own code where it happened (file, line and column), the page path, the app version, the bank format and step (for example "sbi", "export"), your browser family and main version and operating system (for example "Chrome 141, Windows", worked out on our server; your browser's user-agent string itself is not stored), and your country code.
Never included: your file, its name, its text, any transaction, narration, amount, balance, account number or name, passwords, your IP address, or the full web address. At most ten reports are sent per page visit, and the same error is sent only once.
What our hosting provider sees
Our website is served by a content delivery network (Cloudflare). Like any website, it receives technical request data such as your IP address, browser type and the pages requested, for security and to deliver the site. This does not include the contents of your files, because those are never sent.
Optional AI features
Some optional features, when switched on, need a server: AI ledger suggestions and OCR for scanned statements. They only run after you click the button and confirm.
- AI ledger suggestions send only the narration text of the rows (no amounts, balances, account numbers or files).
- OCR sends the scanned file you choose for that one request.
- This data is passed to our AI provider (Google Gemini API, paid tier) to produce the answer. We do not store it. Our provider processes it under its API terms, which state that paid-tier data is not used to improve its products.
Feedback
If you use the "Was this conversion accurate?" buttons, we store your rating and optional note as described above.
Messages and files you choose to send us
There are two ways to send us something. Both only happen when you press send yourself.
- The contact form: your message, topic, and, if you fill them in, your name, your e-mail address and up to 3 attachments (PDF, PNG, JPG, CSV or XLSX, 10 MB in total).
- "Send us this statement": when a conversion fails, the balance check finds problems, or you report a problem, the converter offers to send that one PDF to us. Before anything is sent, a window shows exactly what will be sent, why, who sees it and when it is deleted, and you must tick a box confirming you are allowed to share it (it is yours, or you have the account holder's permission). Together with the PDF we receive the bank format, the check result (for example "no transactions found", or the number of mismatched rows), and your optional e-mail and note. If the PDF was password protected, your browser sends an unlocked copy so we can open it. Your password is never sent.
Why: to answer you and to fix bank formats that don't convert correctly. Nothing else. We never sell or share these files, never use them for marketing and never use them to train AI models.
Who sees it: only the KhataSheet team. Submissions are stored privately in our Cloudflare account (a D1 database) and a notification of new messages goes to our team mailbox (Gmail). Where we keep a statement as a test case to stop the bug coming back, we first replace every name, account number, narration and amount with made-up data; the real file is not kept.
How long: statements you send, and all attachments, are deleted automatically after 30 days. Contact messages (the text and your e-mail address) are kept for up to 12 months so we can follow up, then deleted. You can ask us to delete anything sooner through the contact form, quoting the reference number you were shown.
Spam protection: to stop abuse we limit how many messages can be sent from one connection. For this we keep a one-way, salted code derived from your IP address and the date, which cannot be turned back into the IP address and is deleted after 24 hours. We also count, anonymously, that a message or statement was sent (contact_submit, statement_share), without its content.
Payments
KhataSheet is free during launch and takes no payments. If paid plans are introduced, payments will be handled by a regulated payment gateway, and this policy will be updated before that happens.
Your rights
Because we do not hold your statement data or any identifier, there is usually nothing for us to access, correct or delete. For any privacy question or request under the Digital Personal Data Protection Act, 2023, use the contact form. If you sent us a message or a statement, quote its reference number and we will delete it.
Changes
If we change how data is handled, we will update this page and the date above. Material changes will be shown on the site.