What ChartSage Does With Your Chart Image
By The ChartSage Team · October 8, 2026
Sending a screenshot of your chart to a server is a reasonable thing to hesitate over. Screenshots can carry more than price — a broker name, an order panel, a balance in the corner.
So here is the actual path your image takes, step by step, with no marketing language in the way.
Step 1: the image is compressed on your device
Before anything leaves your phone, the app compresses the image locally, in the app process, for one practical reason: a smaller payload is faster to send and cheaper to analyze.
Nothing is uploaded during this step. The compression is a local operation on the bytes you captured or selected.
Step 2: it is sent over TLS to one Firebase callable Function
The compressed bytes are sent inline in a single request to one Firebase callable Cloud Function named analyzeChart, over a TLS-encrypted connection like any HTTPS request.
“Inline” is the important word. The image travels in the request body itself. It is not uploaded to a storage bucket first and then referenced — the more common pattern, and the one that leaves a copy behind.
There is no Cloud Storage bucket in ChartSage. The app never provisions one, never writes to one, and never receives a storage URL back.
Step 3: it is analyzed in memory
The Function holds the image bytes in memory while it works. It routes them to the AI model provider it is configured to use — Gemini 2.5 Flash-Lite at launch — validates the model’s response against a fixed JSON schema, and builds the result.
The image is never written to disk server-side. It exists only in the Function’s memory for the duration of that single request.
Step 4: it is discarded
When the request completes, the Function returns the analysis and the memory holding the image goes away with the invocation. There is no copy retained anywhere on our infrastructure, because there is nowhere for one to be retained.
The Function also does not persist the analysis itself. It computes the result, returns it, and keeps nothing.
Step 5: the result is stored only on your device
The analysis comes back to your phone and is written to the app’s local database. That is the only place your analysis history lives.
This is a deliberate trade-off and it has a real cost: because history is device-only, it does not sync across devices, and it does not survive a reinstall or a factory reset. We chose that over holding your analyses on a server.
| Where it lives | Chart image | Analysis result |
|---|---|---|
| Your device | Yes, local only | Yes, local database |
| Our server, during the request | In memory only | In memory only |
| Our server, after the request | No | No |
| Cloud Storage | No bucket exists | No bucket exists |
What the server does keep
One thing, and it is worth stating plainly.
The server keeps a per-device credit balance. It lives in a single Firestore document keyed to your device’s ANDROID_ID — the identifier Android assigns to the app on your device — and it holds how many free analyses remain and whether the device has an active entitlement. Nothing else.
That document contains no chart images, no analyses, no email address, and no name, because we never collect any of those. It exists so that free usage can be metered fairly and so that abuse can be limited.
ANDROID_ID is a device identifier, which is why it is disclosed in our privacy policy rather than mentioned quietly. Using a device identifier for abuse prevention and metering is permitted, but it should be visible.
There is no account
ChartSage has no sign-in screen. There is no registration, no password, no email, no social login, and no user profile.
That is a structural decision, not a shortcut. If there is no account, there is no user record to breach, no email list to leak, and no credential to steal. The app authorizes requests using Firebase App Check, which attests that a request came from a genuine install of the app rather than from a person’s identity.
No account means no cross-device history. If you reinstall, your local analyses are gone. That is the honest cost of this design.
Where to read the technical detail
Everything above is architecture, not policy language, and it is easier to trust when you can see the mechanics. Our security page covers the transport, the App Check gate, where model provider keys live, and the Firestore rules that deny all client access to that credit document.
If you would rather remove what little exists, delete your data explains how. ChartSage is built so that the honest answer to “what do you have of mine?” stays short.
Educational technical-analysis tool. Not financial advice. Does not guarantee any outcome or profit.
Get a second opinion on your next chart
ChartSage reads the chart and explains its reasoning in plain language.
Get ChartSage on Google Play