Playbook · n8n
n8n: create a Resend Broadcast draft on a schedule
Schedule Trigger, then Google Sheets, then Resend Create only. Never auto-send.
2026-10-16
Draft only
This is a thin outline of a scheduled draft. It uses Schedule Trigger, Google Sheets, and Resend Broadcast Create. Do not add a Send step.
One-line promise: on a schedule, read one ready row from an issue sheet and create a Resend Broadcast draft only (send false or omitted). STOP: never auto-send. This recipe must not include Resend Broadcast → Send, and must not set send: true. Documented nodes only — Schedule Trigger, Google Sheets, and the official Resend node (Broadcast → Create).
If you only need the API create-draft path without n8n, use Resend Broadcast drafts. You press Send there too.
Who it’s for / not for
| For | Not for |
|---|---|
| People who already have a verified domain, a Segment, and the human Send habit from the Resend playbooks | Anyone who wants n8n to press Send on a schedule — out of scope. STOP |
| Operators mirroring newsletter issue rows into a Google Sheet the workflow can read | Readers who only need the API create-draft path → Resend Broadcast drafts |
| Agent-led ops: bot drafts this outline; human owns n8n credentials, the Sheet, and Resend Send | Invented custom nodes or unofficial community forks — stick to the documented nodes below |
Stack (documented nodes only)
API truth, same as the human-gate playbook: Create Broadcast defaults send to false (draft). send: true, with optional scheduled_at, sends or schedules without a separate send call (create-broadcast, send-with-api). Both are forbidden on this recipe.
Content-queue bridge: markdown under a content queue is not an n8n node. You (or a sync you own) mirror issue rows into a Google Sheet. Suggested columns: status, segment_id, from, subject, html (or html_en / html_zh), optional topic_id, name, reply_to.
| Step | Node (official) | Why |
|---|---|---|
| 1 | Schedule Trigger (docs) | Run weekly / cron. You must save and publish the workflow or the schedule will not fire. |
| 2 | Google Sheets → Get Row(s) (Sheets, sheet ops) | Read one issue-sheet row. Filter example: status = ready_draft. |
| 3 | Resend → Broadcast → Create (n8n Resend, KB, README) | Create the campaign with subject, HTML, and segment. Draft only. |
| 4 (optional) | Google Sheets → Update Row | Write back broadcast_id and set status=draft_created. |
| Forbidden in this recipe | Resend Broadcast → Send (listed on n8n Resend) | Human Send gate — Dashboard, or a deliberate send outside this workflow. |
Bot vs human
| Bot does | Human must do |
|---|---|
| Draft this outline | Own the n8n instance; install the official Resend node; store the Resend API or OAuth2 credential in n8n — never paste keys in chat or git (KB credentials) |
| Suggest the Sheet column map and expressions | Create the Sheet; fill only consented Segment IDs; set the workflow timezone to HKT (Asia/Hong_Kong) |
| Flag STOP before any Send node | Publish the Schedule workflow only after reviewing the Create-as-draft mapping |
| Never add Broadcast → Send to this flow | Open the draft in the Resend Dashboard, test, and Send yourself |
Numbered recipe outline
- Prerequisites. Verified sending domain, Resend API key in n8n credentials, and at least one Segment with opted-in Contacts (Resend bilingual newsletter, Segments + Contacts). Consent and records stay on HK PDPO newsletter consent — that page is not legal advice.
- One sheet, one issue per row. One tab, header row. Only rows with
status=ready_draftare eligible. Put a realsegment_id,from, subject, and HTML. Include{{{RESEND_UNSUBSCRIBE_URL}}}per create-broadcast. - Schedule Trigger. Example: every 1 week, on a weekday and hour inside your review window. Set the workflow or instance timezone so HKT is correct (Schedule Trigger). Save and publish, or the schedule will not run.
- Google Sheets → Get Row(s). Document + sheet. Filters: column
status, valueready_draft. Under Options, set When Filter Has Multiple Matches to Return All Matches only if you want every ready row in one run (sheet ops). - Resend → Broadcast → Create (draft only). Map sheet fields into Create parameters: segment, from, subject, html / text, optional name / reply-to / topic. Do not enable send or schedule-send on this node. Confirm in the node UI that you are not calling Send. The official node also lists Update, Send, Cancel, and Duplicate (n8n Resend, README) — this recipe uses Create only.
- Optional: Update Row. Write
broadcast_idfrom the Create response and setstatus=draft_createdso the next schedule does not recreate the same row. - STOP — human Send gate. Open the draft in the Resend Dashboard, or use an API send outside this workflow after an explicit OK. This recipe must not include Broadcast → Send. Creating with
send: trueis also forbidden here.
Failure modes
- Send node accidentally added — a real list blast. Delete Send and treat it as an incident.
send: trueon Create — same risk (create-broadcast).- Wrong timezone on Schedule — drafts appear at the wrong hour. Fix the workflow or instance timezone (Schedule Trigger).
- Filter returns the wrong rows — check
statusvalues. Use Return All Matches only when that is intentional. - Secrets in the Sheet or chat — API keys never go in cells. Credentials live only in n8n.
- Unverified domain or wrong Segment — verify before the first Dashboard Send.
- Doc gap: exact n8n Resend Create field labels can differ by node version. Confirm against the installed
n8n-nodes-resendUI. Do not invent fields. Audiences are deprecated; use Segments (README). Make.com twin and a Code-node bilingual HTML assembly are deferred.
Human must verify
- Schedule is published. Timezone is
Asia/Hong_Kong(or the zone you chose). - Sheet columns match the Create mapping. Only
ready_draftrows fire. - Resend credential scope is correct. No key in the Sheet.
- The Create node has no Send and no
send: true. - The workflow graph contains no Broadcast → Send node.
- Segment consent is real, and the HTML includes the unsubscribe token.
- You press Send yourself. This recipe stops at the draft.
Newsletter
This flow only creates a draft. Do not auto-send.
Docs cited
- n8n Schedule Trigger · 2026-10-16
- n8n Google Sheets node · 2026-10-16
- n8n Google Sheets — sheet operations · 2026-10-16
- Resend on n8n · 2026-10-16
- Resend n8n knowledge base · 2026-10-16
- n8n-nodes-resend README · 2026-10-16
- Create Broadcast API · 2026-10-16
- Compose and send Broadcasts with the API · 2026-10-16