appscript.dev
Blog Sheets Gmail

How I run a newsletter entirely from a spreadsheet

Northwind newsletter: subscribers, sending, and analytics in one place — no Mailchimp.

By Awadesh Madhogaria · Published Aug 13, 2025

Northwind sends one newsletter a month to about 800 people. For years that ran through a paid email tool we logged into roughly twelve times a year.

A monthly send to a modest list does not need a marketing platform. The paid tools are genuinely good, but they are built for people sending weekly, segmenting heavily, and running automated flows — and we do none of that. We send once a month, to one list, with one message. So we were paying for capability we never used, and re-learning the interface every time because we logged in so rarely.

What a monthly newsletter actually needs is a list, a way to send, and a rough sense of whether anyone opened it. All three fit comfortably in a spreadsheet, so that is where Northwind’s newsletter lives now.

How it works

The whole newsletter is three tabs: Subscribers, one row per person with an active/unsubscribed flag; Issues, one row per issue with a subject line and a Doc URL for the body; and Sends, a log with timestamps and open counts. Writing the issue happens in a normal Google Doc — the Sheet just points at it.

A script runs on the 1st of each month and does the send:

  1. It finds the next unsent issue in the Issues tab.
  2. It loads that issue’s Doc and converts the content to HTML.
  3. It sends to every active subscriber, paced to stay inside the daily quota.
  4. It logs each send — recipient and timestamp — in the Sends tab.

Pacing matters here: 800 emails is fine within Gmail’s limits, but the script spreads the send rather than firing it all in one burst. Tracking then runs off a tiny open-tracking pixel in each email — when a recipient’s mail client loads it, that counts as an open and increments the count in the Sends log. The pixel and logging approach is the one from Build a newsletter sender with open tracking. It is not perfect — privacy features block some pixels — but it gives a reliable enough trend month to month.

The trade-offs I accepted

This is a deliberately plain setup, and I chose to live without the things a marketing platform sells. There are no fancy drag-and-drop templates, because the Doc styling is enough. There is no subscriber segmentation, because everyone gets the same issue. And there are no automated drip flows, because there is only ever one scheduled send. For 800 subscribers and one issue a month, none of that is missed — though if the list were ten times bigger, or we sent weekly, the calculation would change.

Was it worth it

Plainly, yes:

  • No monthly subscription for a tool we opened twelve times a year.
  • Subscribers, content, sending, and analytics all in one place.
  • Writing an issue is just writing a Doc and adding a row.

Match the tool to the cadence. A monthly newsletter to a modest list is not a marketing operation — it is a list, a send, and a send log, and a spreadsheet holds all three without a subscription.