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.
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).
Additional information
What does this prompt do?
- 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 do I need to use this?
- 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.
How can I customize it?
- 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.
Frequently asked questions
Why write to a Google Sheet instead of using the Warmforge dashboard?
Will this work if I have multiple Warmforge workspaces?
What columns end up in the sheet?
What if a mailbox has no placement test yet?
Can I change the schedule or send it somewhere else?
Related templates
Stop losing your deliverability history to a rolling dashboard.
Connect Warmforge and Google Sheets once, and every morning at 6am you get a fresh row per mailbox in a sheet you can chart forever.