← Back to Blog

Data Tables and Charts in Substack: A Complete Guide for Newsletter Writers

Data & Visualization

Data-driven newsletters are some of the most valuable content on Substack. Readers subscribe specifically for analysis, insights, and numbers they can’t find elsewhere. But presenting data well in Substack is harder than it should be.

Substack’s editor wasn’t designed for data-heavy content. There’s no native table tool, no chart builder, and no spreadsheet integration. Writers who want to include structured data need workarounds — and some workarounds are dramatically better than others.

This guide covers every approach to presenting tables and charts in Substack, from native options to external tools, with practical advice on what works best.

The Core Problem: Substack and Structured Data

Substack’s editor is optimized for prose. It handles paragraphs, headings, images, embeds, links, and blockquotes well. What it doesn’t handle:

  • Tables: no native table creation tool
  • Charts: no built-in charting capability
  • Spreadsheet embeds: no Google Sheets or Excel integration
  • Interactive visualizations: no support for embedded JavaScript visualizations

This means every table and chart in your Substack newsletter requires a creative solution. The good news: several approaches work well, and the best ones are easier than you’d expect.

Approach 1: Image-Based Tables

The most reliable method for tables in Substack is converting your table to an image and embedding it.

Why Images Work

  • Render identically in email and on the web
  • Full control over formatting, colors, and layout
  • No email client compatibility issues
  • Look professional and polished

How to Create Table Images

Method 1: Screenshot from a spreadsheet

  1. Build your table in Google Sheets, Excel, or Numbers
  2. Format it with headers, borders, and colors
  3. Take a screenshot of the table area
  4. Upload the screenshot to your Substack post

This works but produces inconsistent quality. Screenshots vary by screen resolution, and you need to crop carefully.

Method 2: Design tool

  1. Create the table in Figma, Canva, or a similar tool
  2. Export as PNG at 2x resolution for retina displays
  3. Upload to Substack

Higher quality but time-consuming for frequent updates.

Method 3: Markdown-to-image conversion

If you write in markdown, tools like DownStack can convert your markdown tables directly to hosted images. You write the table in markdown syntax:

| Metric    | Q1 2025 | Q2 2025 | Q3 2025 |
|-----------|---------|---------|---------|
| Revenue   | $2.1M   | $2.4M   | $2.8M   |
| Users     | 45,000  | 52,000  | 61,000  |
| Churn     | 4.2%    | 3.8%    | 3.5%    |

The tool renders it as a clean, formatted image and hosts it. You paste the result into Substack. No screenshots, no design tools, no manual formatting.

Image Table Best Practices

  • Resolution: export at 2x for sharp display on retina screens
  • Width: keep tables under 600px wide for email compatibility
  • Alt text: add descriptive alt text for accessibility (“Q1-Q3 2025 revenue and user growth metrics”)
  • Font size: minimum 14px for readability on mobile
  • Colors: use sufficient contrast between text and background
  • File size: optimize PNGs to keep email load times fast

Approach 2: HTML Tables (Limited)

Substack’s editor doesn’t support HTML input, but there’s a workaround: some writers paste tables from Google Docs or Word, which Substack’s editor sometimes preserves as formatted tables.

How It Works

  1. Create a table in Google Docs
  2. Format it with borders and shading
  3. Copy the table
  4. Paste into Substack’s editor

The Problems

  • Inconsistent rendering: sometimes the table formatting survives the paste, sometimes it doesn’t
  • Email rendering: even if the table looks correct in the web editor, email clients may strip the formatting
  • No editing: once pasted, you can’t easily edit the table structure in Substack
  • Mobile issues: HTML tables in email often break on small screens

This approach is fragile and unreliable. It can work for simple two-column tables, but anything complex is risky.

Approach 3: Text-Based Tables

For simple data, you can format tables using plain text with consistent spacing.

Using Monospace Formatting

Metric      Q1      Q2      Q3
Revenue     $2.1M   $2.4M   $2.8M
Users       45K     52K     61K
Churn       4.2%    3.8%    3.5%

Format this as a code block in Substack (using the code block feature) to preserve spacing.

Pros

  • Always renders correctly (it’s just text)
  • Works in every email client
  • Easy to create and update

Cons

  • Looks basic and unprofessional for polished publications
  • No colors, borders, or visual hierarchy
  • Difficult to read with many columns
  • Doesn’t scale well for large datasets

Text-based tables work for quick, informal data sharing but aren’t suitable for publications where presentation quality matters.

Approach 4: Embedded Charts

For charts and graphs, you have several options:

Static Chart Images

Create your chart in any tool and export as an image:

  • Google Sheets: create chart → right-click → “Save image as”
  • Excel: create chart → right-click → “Save as Picture”
  • Datawrapper: create chart → export PNG
  • Flourish: create visualization → export static image
  • Python (matplotlib/seaborn): save figure with plt.savefig()
  • R (ggplot2): save with ggsave()

Static chart images are the most reliable approach. They look the same everywhere.

Datawrapper Embeds

Datawrapper is particularly well-suited for newsletter charts because it offers:

  • Clean, minimalist chart styles
  • Responsive designs that work on mobile
  • Export to static PNG for email reliability
  • Embed codes for web versions

Many successful data newsletters (like some financial and political analysis publications) use Datawrapper for their charts.

Flourish Embeds

Flourish creates interactive visualizations. You can embed them in Substack’s web version using the URL embed feature. However, they won’t render in email — subscribers will see a link instead.

For this reason, if you use interactive embeds, always include a static image fallback for email readers.

Best Practices for Data Presentation in Newsletters

Design for Email First

Email is where most of your readers consume your content. Design your data presentations for email constraints:

  • Maximum width: 600px — most email clients cap content width here
  • Static images over interactive embeds — interactive elements don’t work in email
  • High contrast colors — email rendering can slightly alter colors
  • Large enough text — readers may be on phones with small screens

Label Everything

Every table and chart should include:

  • A descriptive title above the visualization
  • Source attribution below (even if it’s your own analysis)
  • Units and time periods clearly labeled
  • A brief caption explaining what the data shows

Don’t make readers guess what they’re looking at.

Keep Tables Focused

The most common mistake with newsletter tables is including too much data. A 15-column, 30-row spreadsheet dump is overwhelming on a phone screen.

Guidelines:

  • 5-7 columns maximum for email readability
  • 10-15 rows maximum before the table becomes unwieldy
  • Highlight the key row or column that supports your argument
  • Split large datasets into multiple focused tables

Use Consistent Formatting

If you publish data regularly, establish conventions:

  • Same color scheme for all charts
  • Same font and style for all tables
  • Same source citation format
  • Same placement (e.g., tables always follow the analysis paragraph, not precede it)

Consistency makes your publication feel professional and helps readers parse data quickly across multiple posts.

Provide Context, Not Just Numbers

A table of numbers without context is noise. Always pair data with interpretation:

Weak: [table showing quarterly revenue]

Strong: “Revenue grew 33% over three quarters, accelerating from 14% Q1-Q2 growth to 17% Q2-Q3 growth. The acceleration suggests the pricing change in March is compounding.” [table showing quarterly revenue]

The text gives meaning to the numbers. The table provides evidence for the text.

Building a Data Newsletter Workflow

If data is central to your newsletter, invest in a repeatable workflow:

Weekly Data Newsletter Workflow

  1. Collect data — pull from your sources (APIs, spreadsheets, databases)
  2. Analyze — do your analysis in your preferred tool (Excel, Python, R, etc.)
  3. Draft in markdown — write your analysis with markdown table syntax for quick iteration
  4. Convert tables to images — use DownStack or your preferred tool to generate clean table images
  5. Create charts — export from your charting tool as static PNGs
  6. Compose in Substack — paste your text, insert images, add captions
  7. Preview and test — send a test email to check rendering across clients
  8. Publish — send to subscribers

Tool Recommendations

NeedRecommended Tool
Simple tablesDownStack (markdown → image)
Complex chartsDatawrapper or Google Sheets
Statistical visualizationsPython + matplotlib
Interactive dashboards (web only)Flourish
Quick screenshotsCleanShot X or ShareX

Common Mistakes

Mistake 1: Relying on Interactive Embeds

Interactive charts and widgets don’t render in email. Your email subscribers — often the majority of your audience — will see a broken embed or a plain link. Always have a static image fallback.

Mistake 2: Embedding Huge Images

A 2MB chart image slows email loading and may get clipped by Gmail (which truncates emails over ~102KB). Optimize your images:

  • Use PNG for charts and tables (sharp lines, small file size)
  • Compress with tools like TinyPNG or ImageOptim
  • Keep total email size under 80KB if possible (excluding images loaded externally)

Mistake 3: No Mobile Testing

Over 60% of email opens happen on mobile devices. A table that looks great on desktop may be unreadable on a phone. Always preview on mobile before publishing.

Mistake 4: Forgetting Alt Text

Image-based tables are invisible to screen readers. Add descriptive alt text that summarizes the data for accessibility. This also helps when images fail to load (corporate email filters sometimes block external images).

Mistake 5: Data Without Narrative

A newsletter isn’t a spreadsheet. Every data point should serve a narrative purpose. If you include a table, explain what it means. If you include a chart, tell readers what to notice. Data is evidence for your argument, not the argument itself.

The Markdown Writer’s Advantage

Writers who draft in markdown have a natural advantage for data-heavy newsletters. Markdown table syntax is fast to write and easy to iterate on:

| Company | Revenue | Growth |
|---------|---------|--------|
| Alpha   | $4.2M   | +18%   |
| Beta    | $3.1M   | +12%   |
| Gamma   | $2.8M   | +25%   |

Editing a markdown table is as simple as changing text. No clicking through menus, no drag-and-drop formatting, no broken layouts.

With DownStack, you write your entire post — including tables — in markdown, and the tables are automatically converted to cleanly formatted, hosted images ready for Substack. The text becomes Substack-ready rich text; the tables become embedded images. It’s the fastest workflow for data-heavy newsletters.

Key Takeaways

  • Substack has no native table or chart tools — you need workarounds
  • Image-based tables are the most reliable approach (consistent in email and web)
  • Markdown-to-image tools like DownStack streamline the table creation workflow
  • Static chart images are safer than interactive embeds for email delivery
  • Design for email first: 600px max width, high contrast, large text
  • Keep tables focused: 5-7 columns, 10-15 rows maximum
  • Always provide context — data without narrative is just noise
  • Establish a consistent visual style for your data presentations
  • Test on mobile before every publish
  • Add alt text to all image-based tables and charts for accessibility