Google Image Charts Alternative: Choose the Right Replacement
Google shut down its Image Charts API in March 2019, but static chart URLs still matter. QuickChart is the closest drop-in replacement. Szum is the design-led option when you can move to a modern JSON config.
Choose the replacement that matches the job
There are two honest answers. Preserve existing Google URL parameters with QuickChart, or rewrite the chart once in Szum to get a smaller config and a designed result across images, Figma, and interactive embeds.
| Feature | QuickChart | Szum |
|---|---|---|
| Best for | Existing Google chart URLs | New integrations |
| First step | Swap chart.googleapis.com for quickchart.io | Rewrite the chart as concise JSON |
| Main advantage | Lowest migration effort | Publication-ready output |
| Main tradeoff | Legacy parameters or Chart.js complexity | Not URL-compatible with Google |
The same job, rebuilt around readable JSON
Google Image Charts encoded the entire chart into a URL. Szum keeps the same server-rendered image model, but replaces abbreviated parameters with fields that say what they do.
The complete config behind this chart:
{
"version": "2026-03-20",
"theme": "editorial",
"title": "Quarterly Revenue",
"subtitle": "FY 2026, in thousands",
"data": [
{ "x": "Q1", "y": 142 },
{ "x": "Q2", "y": 168 },
{ "x": "Q3", "y": 191 },
{ "x": "Q4", "y": 215 }
],
"marks": [{ "type": "barY" }]
}What Google Image Charts was
Google Image Charts turned URL parameters into a PNG. No libraries, no JavaScript, no server-side rendering. You constructed a URL with chart type, data, colors, and labels – and got an image back. It launched in 2007, was deprecated in 2012, and shut down in 2019.
A typical URL looked like this:
https://chart.googleapis.com/chart
?cht=bvg
&chs=400x300
&chd=t:142,168,191,215
&chl=Q1|Q2|Q3|Q4
&chtt=Quarterly+Revenue
&chco=3366CCCryptic, but it worked. Millions of dashboards, reports, and emails depended on it. When Google killed the service, those images went blank overnight.
Why image charts still matter
Google pointed users to Google Charts – a JavaScript library. That solves the problem for web apps. It does nothing for the places where image charts were actually essential:
- Emails – Gmail strips JavaScript. Outlook blocks inline SVG. A hosted PNG in an
<img>tag is the only reliable way to show a chart. - Slack and Discord bots – unfurl a URL, show an image. No JavaScript execution.
- PDF reports – server-side PDF generators need a static image URL, not a client-side rendering library.
- SMS and push notifications – rich media cards accept image URLs.
The need for a URL that returns a chart image is not going away. It is the simplest possible integration: one URL, one image, any surface.
From Google parameters to explicit chart fields
Szum is not a compatibility layer, so migration means translating intent rather than preserving every abbreviated query parameter. The common cases map directly:
| Feature | Google Image Charts | Szum |
|---|---|---|
| Chart type | cht=bvg | marks: [{ type: "barY" }] |
| Dimensions | chs=540x360 | width: 540, height: 360 |
| Data and labels | chd + chl | One flat array of named values |
| Title | chtt | title |
| Color | chco | A curated theme, color scale, or mark fill |
| Axes and ranges | chxt + chxr | x / y with an optional domain |
That covers the charts most teams embedded in emails and reports. Highly customized legacy URLs still need a deliberate rewrite and a visual check; Szum does not pretend every Google option has an exact equivalent.
QuickChart vs Szum: replacement comparison
| Feature | QuickChart | Szum |
|---|---|---|
| Google URL compatible | Yes (drop-in) | No (new format) |
| Config format | Google URL params or Chart.js JSON | Purpose-built JSON |
| Migration effort | Swap domain in URL | Rewrite config (5–15 lines) |
| Design quality | Chart.js defaults | Curated editorial themes |
| Fonts | Noto only (Enterprise for custom) | 1,951 Google Fonts (Creator) |
| Output formats | SVG, PNG, WebP, PDF | SVG, PNG |
| Figma plugin | No | Yes |
| MCP server | No | Yes |
| Free tier | Rate-limited | 500 renders/month |
| Paid plan | $40/month | $29/month |
| License | Public-domain output; AGPL server code | Commercial, all tiers |
| Self-hosting | Yes (Docker) | No |
When to use QuickChart vs Szum
Use QuickChart if
- You have existing Google Image Charts URLs
- You need the fastest possible migration
- You need self-hosted deployment
- You need PDF or WebP output
Use Szum if
- Design quality matters to your brand
- You are building something new
- You want AI-friendly configs for LLMs
- You need Figma or MCP integration
- You want commercial licensing on every tier
See the difference yourself.
500 renders/month on the free plan, with persistent chart URLs for production embeds.
Migrating from Google Image Charts
Szum is not a drop-in replacement – it uses a different config format. But the migration is straightforward because Szum configs are shorter and more readable than what they replace.
Google Image Charts
chart.googleapis.com/chart
?cht=bvg
&chs=540x360
&chd=t:142,168,191,215
&chl=Q1|Q2|Q3|Q4
&chtt=Quarterly+Revenue
&chco=3366CC
&chxt=x,y
&chxr=1,0,250
&chbh=aSzum
{
"version": "2026-03-20",
"theme": "editorial",
"title": "Quarterly Revenue",
"data": [
{ "x": "Q1", "y": 142 },
{ "x": "Q2", "y": 168 },
{ "x": "Q3", "y": 191 },
{ "x": "Q4", "y": 215 }
],
"marks": [{ "type": "barY" }]
}The Google URL encodes everything – chart type, data, labels, axes, bar spacing – into an encoded query string with abbreviated keys. The Szum config says what it means. barY is a vertical bar chart. editorial is a theme that handles typography, colors, and spacing. No chxt, chxr, or chbh to memorize.
If you have Chart.js configs (common when migrating through QuickChart first), rewrite them in the smaller Szum schema by hand or with an agent. Send each rewritten definition through free chart-aware validation before rendering. Structural errors, semantic errors, recoverable warnings, and canonical suggestions remain distinct.
Embedding chart images in emails
The most common Google Image Charts use case was embedding charts in emails and reports. Szum works the same way – a URL that returns an image:
<img
src="https://szum.io/chart?config={...}"
alt="Bar chart of quarterly revenue, rising to $215K in Q4"
width="540"
height="360"
style="display: block; border: 0; width: 100%; max-width: 540px; height: auto;"
/>Set format: "png" for email (PNG has universal client support) and scale: 2 for retina screens. See the full charts in emails guide for client compatibility, image blocking, and best practices.
Frequently asked questions
- Is Google Image Charts still working?
- No. Google shut down the Image Charts API in 2019. Any URL pointing to
chart.googleapis.comno longer returns an image. Google's recommended replacement, Google Charts, is a JavaScript library – it does not generate static images you can embed in emails or reports. - What is the best Google Image Charts replacement?
- It depends on your priority. If you need backward compatibility with existing Google Image Charts URLs, QuickChart is the closest drop-in replacement – swap the domain and most charts render. If design quality matters more than migration convenience, Szum produces publication-ready charts from simple JSON configs with curated themes. Both serve static images via URL, both work in emails and reports.
- Do I need JavaScript to use a chart image API?
- No. Chart image APIs return static PNG or SVG images from a URL. No JavaScript runs on the client – you embed the URL in an
<img>tag. This is what makes them work in emails, Slack messages, PDF reports, and other environments where JavaScript cannot run. - How do I migrate from Google Image Charts?
- You have two paths. For minimal effort, QuickChart accepts most Google Image Charts URL parameters – swap
chart.googleapis.comwithquickchart.ioin your URLs. For better visual output, rewrite your chart config in Szum's readable JSON. If you already migrated to Chart.js configs, the smaller Szum schema is straightforward to rewrite by hand or with an agent. Then use the free validation workflow to check fields, values, scales, and marks before rendering.