Create a Chart from Google Sheets and Post it to Slack

6 min read

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:

  1. Open your Google Sheet and select the chart
  2. Click the three-dot menu on the chart → Download → PNG image
  3. 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

  1. In your Google Sheet, go to Extensions → Apps Script
  2. Create a new function that exports the chart and posts it to a Slack webhook
  3. 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 image block 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

A Google Sheets chart posted to Slack with AI analysis and context

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)

  1. Go to chartcastr.com and sign up
  2. Click New Source → Google Sheets
  3. Paste your Google Sheet URL and authorise read access
  4. Select the data range or pick an existing chart in the sheet
  5. Click New Connection → Slack
  6. Choose the channel and set a delivery schedule
  7. 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

AI follow-up analysis in a Slack thread

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 ScriptChartcastr
Auth maintenanceManual token rotationHandled automatically
Slack API updatesBreaks silentlyAlways current
AI contextNot possibleBuilt in
Error alertingNoneEmail on failure
Multiple channelsSeparate functions per channelSelect channels per connection
Schedule managementTrigger UI in Apps ScriptClean 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

Frequently Asked Questions

Was this post helpful?

Google SheetsSlackAI Summaries

Turn your data into automated team updates.

Connect a data source, create charts, and deliver AI-powered insights to Slack or email — in minutes.

No card required. Setup in 2 minutes.

Chartcastr