# Daily Warmforge deliverability log to Google Sheets

> Every morning at 6am, log yesterday's warmup and inbox placement numbers for every mailbox into a Google Sheet you can chart forever.

- Workflow type: code
- Services: Warmforge, Google Sheets
- Categories: Operations, Marketing
- Published: 2026-07-11

## What it does

- Runs automatically every day at 6am and captures yesterday's deliverability numbers from Warmforge.
- Walks every workspace and every mailbox you have, so no inbox gets left out.
- Appends one row per mailbox to a Google Sheet with the date, workspace, mailbox, warmup sends and replies, spam count, reply rate, and latest inbox placement result.
- Builds a permanent, chartable history so you can track deliverability trends far beyond what the Warmforge dashboard keeps visible.

## What you'll need

- A Warmforge account with an API key from Settings, API.
- A connected Google account with access to the Google Sheet you want to write into.
- A destination spreadsheet with a tab that has the column headers already in row 1.

## Prompt

Build a code workflow that runs on a cron every day at 6am and snapshots yesterday's Warmforge deliverability numbers into a Google Sheet, so we have a chartable long-term history outside the Warmforge dashboard.

Trigger: cron, daily at 06:00 in the user's local timezone. Compute the report date once at the start of the run as yesterday in YYYY-MM-DD (Warmforge uses date strings, not ISO timestamps).

Pipeline (deterministic, no reasoning needed):

1. Call warmforge.List Workspaces to enumerate every workspace the API key can see. Iterate pages until currentPage equals totalPages.

2. For each workspace, call warmforge.List Mailboxes with status=all and paginate through every mailbox. Keep the workspace id and name alongside each mailbox.

3. For each mailbox, call warmforge.Get Warmup Stats with from and to both set to yesterday's YYYY-MM-DD. Pull warmup sends, warmup replies, spam count, and reply rate for that single day. If the mailbox has no stats for that day, emit zeros rather than skipping the row.

4. For each workspace, call warmforge.Get Latest Placement Results for Mailboxes in batches keyed by mailbox address. Map the integer result enum to a human label (Inbox, Spam, Promotions, Pending, Missing) and capture the placement test id. Mailboxes with no placement test get Missing and a blank id.

5. Assemble one row per mailbox with these columns in this exact order: date, workspace, mailbox address, status, warmup sends, warmup replies, spam count, reply rate, latest placement result, placement test id.

6. Append all rows in a single google-sheets.Append Values call to a spreadsheet and tab the user configures (default range like Deliverability!A:J), with valueInputOption=USER_ENTERED so numbers and dates are parsed correctly. Assume the header row already exists in row 1.

Design goals: same schema lands every morning so downstream Sheets charts and Looker Studio dashboards stay stable. No AI reasoning steps. Handle Warmforge 429s with backoff. URL-encode the @ in mailbox addresses when they appear in path segments. Log a short run summary at the end: number of workspaces, mailboxes, and rows appended.

Inputs to expose as workflow config: the Google Sheet spreadsheet id, the target tab name (default Deliverability), and an optional list of workspace ids to include (empty means all).

## How to customize

- Change the run time or timezone if 6am does not fit your team's morning.
- Point it at a different spreadsheet or tab, or split each workspace into its own tab.
- Add or drop columns, for example a heat score column or filtering to only warm mailboxes.

## FAQ

### Why write to a Google Sheet instead of using the Warmforge dashboard?

The Warmforge dashboard only shows a rolling window of recent data. Appending one row per mailbox per day into a Sheet gives you an unlimited history you can chart, pivot, or push into Looker Studio.

### Will this work if I have multiple Warmforge workspaces?

Yes. It automatically walks every workspace your API key can see, then every mailbox inside each workspace, and writes one row per mailbox per day.

### What columns end up in the sheet?

Date, workspace, mailbox address, status, warmup sends, warmup replies, spam count, reply rate, latest placement result (Inbox, Spam, Promotions, Pending, or Missing), and the placement test id.

### What if a mailbox has no placement test yet?

The placement columns are left blank or marked Missing for that row. The rest of the warmup numbers still land, so you never get a gap in the daily log.

### Can I change the schedule or send it somewhere else?

Yes. After you create the workflow you can change the time, the destination spreadsheet, the tab, or add filters like only including warm mailboxes.

Use this prompt in General Input: https://www.generalinput.com/prompts/daily-warmforge-deliverability-log-to-google-sheets