Create a Chart from Google Sheets and Post it to Slack
Step-by-step guide to creating charts from Google Sheets data and posting them to Slack — manual, Apps Script, and fully automated with Chartcastr.
Create a Chart from Google Sheets and Post it to Slack
Getting a Google Sheets chart into Slack sounds simple. In practice, it involves more steps than most people expect — especially if you want it to happen automatically on a schedule.
This guide covers every approach, from the one-off manual copy to fully automated no-code delivery.
The Key Limitation: Slack Only Shows Images
Before you go looking for a way to embed an interactive Google Sheets chart in Slack — it doesn't exist.
Slack does not support:
- Live chart embeds from Google Sheets
- Interactive charts of any kind (no zooming, no tooltips, no filters)
- iframes or HTML widgets
- Google Charts or any JavaScript-based visualisation
What Slack does support is displaying image files (PNG, JPG, GIF) inline in the channel. When a BI tool or integration "sends a chart to Slack," what it's actually doing is rendering that chart as a PNG and uploading it via the Slack API.
This is actually good news — it means the problem is well-defined. You need to get a pixel-accurate image of your chart into a Slack channel at a regular time. Everything below is a different way to solve that.
Option 1: Manual — Download and Paste
The most direct path:
- Open your Google Sheet and select the chart
- Click the three-dot menu on the chart → Download → PNG image
- Drag the file into your Slack channel
When to use this: One-off chart shares, ad hoc requests, or when someone asks "can you drop that in #marketing?"
Why it doesn't scale: It takes ~3 minutes per chart. For daily or weekly recurring reports across multiple channels, that adds up to hours per month — and it always falls on whoever remembers to do it. See Why You Shouldn't Screenshot Google Sheets Charts for the full cost breakdown.
Option 2: Google Apps Script + Slack Webhook
Apps Script can automate the export and posting on a timer. It's free and runs entirely within Google's ecosystem.
Setup steps
- In your Google Sheet, go to Extensions → Apps Script
- Create a new function that exports the chart and posts it to a Slack webhook
- Set up a time-based trigger to run it on your schedule
function sendWeeklyChartToSlack() {
const ss = SpreadsheetApp.getActiveSpreadsheet()
const sheet = ss.getSheetByName('Dashboard')
const charts = sheet.getCharts()
if (charts.length === 0) {
console.log('No charts found on sheet')
return
}
// Export chart as PNG blob
const chartBlob = charts[0].getAs('image/png').setName('weekly-chart.png')
// Save temporarily to Drive to get a shareable URL
const tempFile = DriveApp.createFile(chartBlob)
tempFile.setSharing(
DriveApp.Access.ANYONE_WITH_LINK,
DriveApp.Permission.VIEW,
)
const imageUrl = `https://drive.google.com/uc?id=${tempFile.getId()}`
// Post to Slack via incoming webhook
const webhookUrl =
PropertiesService.getScriptProperties().getProperty('SLACK_WEBHOOK_URL')
UrlFetchApp.fetch(webhookUrl, {
method: 'post',
contentType: 'application/json',
payload: JSON.stringify({
text: `*Weekly Sales Update* — ${new Date().toLocaleDateString()}`,
blocks: [
{
type: 'section',
text: { type: 'mrkdwn', text: '*Weekly Sales Update*' },
},
{
type: 'image',
image_url: imageUrl,
alt_text: 'Weekly sales chart',
},
],
}),
})
// Clean up temp file after a delay (or schedule separately)
Utilities.sleep(5000)
tempFile.setTrashed(true)
}
Set up a trigger
In Apps Script: Triggers (clock icon) → Add Trigger → Time-driven → Week timer → Monday 8–9am
Why teams end up abandoning this
- Google Drive share links require the file to remain accessible — if it gets trashed too early the image is blank in Slack
- Slack's Block Kit
imageblock requires a publicly accessible URL, which creates a security grey area - If the chart moves position in the sheet,
charts[0]breaks silently - Auth tokens expire; script quotas get hit on free accounts
- Nobody is "on call" when it breaks on a Monday morning
For the full picture on why Apps Script falls short for this use case, see Why Google Sheets App Scripts Are Too Complicated for Sending Data to Slack.
Option 3: Chartcastr — Automated, No Code

Chartcastr is built specifically for this workflow. It connects to your Google Sheet, renders the chart from your data on each run, and posts it to Slack with an AI-written summary.
Setup (about 2 minutes)
- Go to chartcastr.com and sign up
- Click New Source → Google Sheets
- Paste your Google Sheet URL and authorise read access
- Select the data range or pick an existing chart in the sheet
- Click New Connection → Slack
- Choose the channel and set a delivery schedule
- Done
What gets posted
Each Chartcastr delivery includes:
- The chart image — high-resolution, rendered fresh from the latest data
- An AI summary — what changed this week, what's trending, what to watch
- A thread — where your team can ask follow-up questions answered by the same AI

The AI summary is generated from the actual data on each run — not a static template. It reads differently every week because the data is different every week.
What Chartcastr handles that Apps Script doesn't
| Apps Script | Chartcastr | |
|---|---|---|
| Auth maintenance | Manual token rotation | Handled automatically |
| Slack API updates | Breaks silently | Always current |
| AI context | Not possible | Built in |
| Error alerting | None | Email on failure |
| Multiple channels | Separate functions per channel | Select channels per connection |
| Schedule management | Trigger UI in Apps Script | Clean schedule UI |
Which Option Should You Use?
- One-off share: Download PNG and paste — it's the fastest
- Weekly recurring, you're technical: Apps Script works, but budget time for maintenance
- Weekly recurring, you want it to just work: Chartcastr
- Multiple charts, multiple channels: Chartcastr — managing multiple Apps Script triggers becomes a mess fast
Related Posts
- Create a Chart from a Data Source and Embed it in Slack — the broader guide covering BigQuery and CSV sources too
- Connect Your Google Sheets Charts to Slack Automatically
- Why Google Sheets App Scripts Are Too Complicated for Sending Data to Slack
- Why You Shouldn't Screenshot Google Sheets Charts
- Top 10 Ways to Send Automated Data Pulses to Slack