Google Image Charts Alternative: Publication-ready charts from JSON

Google shut down its Image Charts API in March 2019. Seven years later, the need hasn't gone anywhere – emails, Slack bots, PDF reports, and SMS messages still can't run JavaScript. Here's what replaced it.

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=3366CC

Cryptic, 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.

The replacements

Two approaches emerged after the shutdown. Drop-in replacements that mimic the old URL format, and modern APIs that rethink the config from scratch.

QuickChart (drop-in)

The most popular replacement. QuickChart accepts most Google Image Charts URL parameters – swap chart.googleapis.com with quickchart.io and most charts render. It also supports the Chart.js config format, which is more flexible. Open source under AGPL. The output uses Chart.js defaults – functional, not polished.

szum (modern)

No backward compatibility with the Google URL format. Instead, a purpose-built JSON grammar with curated themes that produce editorial-quality charts. The tradeoff: you rewrite your chart config. The payoff: the output looks like it belongs in a publication.

What your charts could look like

A basic quarterly revenue chart – the kind of chart people rendered millions of times with Google Image Charts. No custom styling, just the editorial theme.

The config that generates it:

{
  "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" }]
}

Ten lines of readable JSON. The old Google Image Charts URL for the same chart was ~200 characters of cht=bvg&chd=t:142,168... parameters. QuickChart renders the same data with Chart.js defaults – passable, but generic. See the side-by-side comparison.

Replacement comparison

FeatureQuickChartszum
Google URL compatibleYes (drop-in)No (new format)
Config formatGoogle URL params or Chart.js JSONPurpose-built JSON
Migration effortSwap domain in URLRewrite config (5–15 lines)
Design qualityChart.js defaultsCurated editorial themes
FontsNoto only (Enterprise for custom)1,938+ Google Fonts (Pro)
Output formatsSVG, PNG, WebP, JPG, PDFSVG, PNG
Figma pluginNoYes
MCP serverNoYes
Free tierRate-limited (AGPL)1,337 renders/month
Paid plan$40/month$29/month
LicenseAGPL (free), commercial (paid)Commercial, all tiers
Self-hostingYes (Docker)No

When to use which

Use QuickChart if

  • You have existing Google Image Charts URLs
  • You need the fastest possible migration
  • You need self-hosted deployment
  • You need PDF, WebP, or JPG 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.

Build a chart in the playground. No signup required.

Read the docs

The migration

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=a

szum

{
  "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 cryptic two-letter parameters. 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), szum has a migration tool that converts them automatically.

Using it 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, dark mode, 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.com no 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.com with quickchart.io in your URLs. For better visual output, rewrite your chart config in szum's JSON format – typically 5–15 lines of readable JSON. If you already migrated to Chart.js configs, szum's migration tool converts them automatically.