Privacy
Last updated: 2 November 2026
ChartPNG turns a chart config into a PNG. This page lists what the service stores while it does that.ChartPNG is run by Oscar Gallego, who is responsible for this data (the data controller). Questions or requests: hola@chartpng.dev.
What we store
For each chart you request, we add to a few counters:
- An id for you: your API key id if you pay, otherwise a salted SHA-256 hash of your IP address, cut to 16 characters. Our counters and logs never hold the IP address itself.
- The number of renders per id, and the number of renders per day.
- Renders requested from our own landing page demo, counted apart and without an id.
- The host name of the page that embedded the image, when your browser sends a Referer header (for example
example.com, never the full address). - Clicks on the "Get Pro" button, per day and per id.
- The first and last time each id was seen, how many distinct ids requested a chart each day (an approximate count that cannot be read back into ids), how many charts of each type were drawn, and how many requests failed and why.
These counters tell us whether anyone uses the service. They have no expiry and stay until we delete them. They hold no chart data and no names.
Logs
Each render also writes one JSON line to our runtime logs: the plan (free or paid), the key id, the id above, the chart type and the image size. Vercel keeps runtime logs for about one day on the plan we use. Vercel's logs also record the requested path and its query string, so a chart sent by GET appears there for that day.
Your chart data is in the URL
With GET, the chart config is part of a public URL. Anyone who has the URL can open it, and our CDN may cache the image for up to a year. Do not send confidential data by GET. Use POST from your server with your key in the Authorization: Bearer header instead: those responses are marked private, no-store and are not cached by the CDN.
Why we hold it
Counters and logs: our legitimate interest in running the service, spotting abuse and knowing whether it is used. Your email and payment: needed to deliver and bill the Pro plan. Emails you send us are kept while the subscription or the support thread lasts.
Cookies and analytics
The public pages set no cookies. They load Vercel Web Analytics from this same domain, which counts page views, referrers, countries and device types without cookies and without storing your IP address. The only cookie is the sign-in cookie of our private admin page, which only the operator uses.
Who processes data for us
- Vercel: hosting, CDN, firewall and page-view analytics. Vercel receives your IP address to deliver the image and to apply rate limits and block abuse, under its own retention. Our functions run in its US East region.
- Upstash: the Redis database that holds the counters.
- Polar: merchant of record for Pro payments. Card details go to Polar and its payment processor, and we never see them. Polar issues your API key and shares it with us together with the email you paid with, so the API can recognise your key; we keep both while your subscription is active.
- ImprovMX: forwards mail sent to hola@chartpng.dev to our mailbox.
- Our mailbox provider (named on request): holds the emails you send us and our replies.
Your requests
Write to hola@chartpng.dev to ask what we hold about you or to have it deleted. Counters keyed by a hashed IP are pseudonymous: we cannot read an IP back from them, but we hold the salt, so we can recompute the id for an IP address you give us. Send us that IP address or your key id and we will delete the matching counters. Per-day totals and referer host counts are aggregates and cannot be split by person. If you think we handle your data wrongly, you can complain to your data protection authority.
Changes
If this changes, we update the date above and tell paying customers by email.
Back to ChartPNG · Docs · Changelog · Terms