Coordination Zero OSby Audra Carpenter
Home/ Playbooks/ Content Studio/ Substack Notes
Content Studio Playbook

Substack Notes

The fastest content type in the system. A Note stands alone or generates from a parent article. It never becomes a parent itself.

Core setup: Sections 00-03 Advanced: Sections 04-05 60-90 min to build ~90 min to schedule a month
00
Overview One place to log in and run everything.

Substack Notes are the smallest unit of content you will publish and the one you will publish most often. Five a day is the volume that moves reach on Substack, and five a day manually is a grind that ends most people's consistency within two weeks. This playbook builds the pipeline that removes the grind: every Note you write or generate lives in one record system, moves through one set of statuses, and schedules itself to Substack without you opening the platform.

A Note is a short form record. It can be a standalone thought you wrote in the moment, or it can be generated from a parent, meaning your published Substack article or blog post feeds the AI and a batch of Notes comes out the other side. A Note has no children. It is the end of the line, which is exactly why it ships fast.

One place to log in and run everything. That is the whole argument of a business operating system, and Notes are where you feel it first. Hand-written Notes and AI-generated Notes land in the same records, carry the same statuses, and get picked up by the same scheduler. You stop hopping between a notes app, a spreadsheet, and the Substack composer. You think once, batch once, and the system runs the week.

Prerequisites

Your Brand record should be complete. Every generation workflow reads from it. A Substack Notes Style Guide is strongly recommended if you plan to use the AI path. It is the difference between output that sounds like you and output that sounds like everyone else's assistant.

What this builds

By the end of this playbook you will have a complete Note pipeline: capture Notes by hand, generate them from prompts and parent articles, review and flag your best outputs, and schedule the whole batch to your Substack drafts queue. Write as many as you want in one sitting. A full month of Notes in about 90 minutes is a realistic pace once the system is in place.

Section map
  • The Note Record: anatomy and status lifecycle
  • Write Your Own Notes: the manual path, no prompt required
  • Prompts: what they are, why you build them, two you can copy
  • Generate Notes With AI: the workflow, source paths, and training the AI on your best work
  • Schedule the Batch: the five-node automation, start to finish
Copy the logic

What follows is the system I run inside Coordination Zero OS. You're not going to copy my build, you're going to copy the logic. It comes down to three pieces: a Notes table inside the database where you're building your business OS, a generation workflow, and a scheduler automation. The tools are interchangeable. The pattern is not. Every section shows you what my version does so you can build yours in Airtable, Notion, Sheets, Supabase, or whatever you already run.

01
The Note Record The record every Note lives in, whether you wrote it or the AI did.

Before you write or generate anything, understand the record itself. Every Note in your system is one record with the same fields, the same tabs, and the same lifecycle. This is what makes the pipeline work: the scheduler does not care how a Note was created. It only cares about the record.

Minimum viable build

One table added to your existing base or workspace. Required columns: Note Body (long text), Status (single select: Draft, Queued, Scheduled, Sent, Reuse, Archived), Scheduled Date (date and time), Brand or Publication (single select or link). Optional: Title, Content Type, Performance Notes, Source Prompt. One view filtered to Status = Queued sorted by Scheduled Date. That view is your queue. Airtable, Notion, Sheets, or Supabase all handle this.

Bonus: Add a calendar view on the Scheduled Date field. Airtable and Notion both do this in two clicks, and most tools with a date field offer it. This is the view that turns your queue into a week you can see: every scheduled Note sitting on its day, gaps visible before they become missed days.

Anatomy of the record
TitleRequired

An internal label. This is for you and your queue view, not the reader. Notes publish body-only.

Note BodyRequired

The Note itself, exactly as it will publish. Basic formatting available: bold, italic, lists, line breaks.

StatusRequired

Where this Note sits in your workflow. Full lifecycle below.

BrandRequired

Which brand this Note belongs to. Every record ties to a Brand, which is how multi-publication operators keep queues separated.

Scheduled DateWhen scheduling

Date and time this Note publishes. Optional until you are ready to schedule.

Record tabs
ImagesOptional

Attachments for supporting visuals or source assets.

TasksOptional

Track review, edit, approval, and scheduling work without separating the task from the content.

CommentsOptional

Use for team review, approval notes, edit notes, or future reuse ideas.

AI AssistantOptional

Keep generation and refinement work connected to the final record.

Team workflow note

Comments and Tasks matter most for teams: sign-off requests and edit notes live on the record, not in a Slack thread somewhere.

  • Draft: Written or generated, not ready to move. The default landing spot.
  • Queued: Approved and waiting for a time slot. For teams, this is the sign-off gate.
  • Scheduled: Has a date and time, the automation will pick it up.
  • Sent: Published to Substack. Done.
  • Reuse: The status most systems do not have. Evergreen Notes that performed move here instead of dying in Sent.
  • Archived: Retired. Off-brand, outdated, or superseded. Kept for record, out of every working view.
Why status flexibility matters

There is no forced pipeline here. A solo operator writes a Note and schedules it in one motion. A team parks Notes in Draft or Queued until someone signs off. Same record, different workflow, your call. The statuses describe your process instead of dictating it.

The Reuse status

Most content dies the moment it publishes. The Reuse status is a deliberate exception: your best evergreen Notes cycle back into rotation instead of being rewritten from scratch. Over six months this becomes a library of proven material that cuts your batching time every single week.

Coming soon: the performance layer. Reuse gets smarter when you can see which Notes earned replies, restacks, comments, or subscribers. Once that workflow is working, this status becomes less about what you liked and more about what the audience proved was worth seeing again.

02
Write Your Own Notes The manual path. No prompt, no AI, just capture and schedule.

Not every Note needs generating. Some of your best Notes are thoughts you had in the moment, and the fastest thing you can do with a thought is write it down. This section is the manual path: you write the Note, the system stores and schedules it. If you never touch the AI path, this section alone gives you a cleaner queue than the Substack composer: your week is visible on a calendar instead of buried inside scheduled draft cards you have to open one by one.

Because the goal is one system. A Note typed into your phone's notes app is a Note you have to find, copy, and paste later. A Note captured here is already in the pipeline: visible in your queue, tied to a Brand, one status change away from scheduled. The scheduler treats it exactly like an AI-generated Note. One login, one queue, one week visible at a glance.

BrandRequired

Which brand this Note is for. If you run multiple publications or manage client brands, this keeps every queue separated from day one.

StatusRequired

Where this Note enters your workflow. Writing ahead without a slot in mind: leave it in Draft. Ready to publish at a set time: set it to Scheduled and the automation picks it up.

Full NoteRequired

The Note itself, written exactly as it will publish. Substack Notes are short form. Think LinkedIn post length, not article length.

Scheduled DateOptional

Set it now if you know the slot, or leave it blank and assign times when you batch schedule.

The batching method

Batching is the habit that makes volume sustainable. One sitting, once a week or once a month, write everything at once.

Step 01
Block the time
Ninety minutes is enough for a serious batch, and a full month of Notes is realistic once you have done this twice.
Step 02
Pull your raw material first
Recent articles, comment threads that got traction, ideas captured during the week, your Reuse pool from Section 01. Do not start from a blank screen.
Step 03
Write each Note to finished
These are Notes, not articles. Three or four sentences, one thought, done. Write it, read it once, fix what needs fixing, and move on. If you prefer to draft the whole batch first and make one edit pass at the end, that works too, but the edit pass happens before anything gets scheduled.
Step 04
Schedule each finished Note
Set the status to Scheduled and assign a date and time.
Scheduling is the point of no return

Setting a Note to Scheduled with a date and time is the trigger. The automation you build in Section 05 pushes it to Substack the moment that happens. After the push, edits made in your system do not reach Substack. Any change to the content has to be made in Substack directly. If you change the date, the original scheduled Note is still sitting in your Substack queue and you have to go delete it there yourself. The rule is simple: a Note is final before you schedule it. Never schedule something you plan to polish later.

Step 05
Mix up the days and times across the batch
Not because variety itself performs better, but because you do not have enough data yet to know what time of day works for your audience. Spreading Notes across different days and hours is how you collect that data. After a month or two the pattern shows itself and you schedule into it.
What makes a Note work

A Note is not a shrunken article. It is one thought, complete in itself. The strongest Notes open with the point instead of building to it, run three or four sentences, and close on a statement rather than trailing off. If a Note needs a second paragraph to make sense, it is either two Notes or the seed of an article.

03
Prompts Saved instructions the AI follows every time. Build them once, select them forever.

This is the section that separates operators who get consistent AI output from operators who get lucky once. A prompt in this system is not something you type into a chat box and lose. It is a saved record: a reusable set of instructions that defines exactly how the AI writes one kind of Note. You build it once, refine it as you learn, and select it from a dropdown every time you generate. The prompt does the remembering so you do not have to.

Why saved prompts beat ad hoc prompting
  • Consistency: the same instructions run every time, so output quality stops depending on how well you phrased a request at 11pm
  • Repeatability: a prompt that produced a great batch last month produces the same style of batch this month
  • Team use: anyone on your team can generate on-brand Notes by selecting a prompt they did not have to write
  • Improvement compounds: when you sharpen a prompt, every future generation benefits
Anatomy of a prompt

Every Note prompt follows the same skeleton. Here is a full example, then the breakdown.

Contrarian Observation
Write a short Substack Note based on the following source content. Open by naming something most people in this space believe, then state plainly why it is wrong or incomplete. Support your position with one specific detail from the source. Close with a single sentence that states what to do instead. Maximum 100 words. No hashtags. No em dashes. No questions. Write in first person, direct and confident.

Source content: {{source_notes}}

CRITICAL LENGTH RULE: Maximum 4 sentences. No more. This is a Substack Note, not a blog post or a LinkedIn article. If you write more than 4 sentences you have failed. Cut everything that is not essential. No lists, no bullet points, no section headers.
The breakdown, line by line
The jobOnce

"Write a short Substack Note based on the following source content." One format, one task. Prompts that ask for multiple things produce mush.

The angleRequired

"Open by naming something most people believe, then state why it is wrong." This is the personality of the prompt. Change this line and you have a different prompt for a different kind of Note.

The structureRequired

Open, support, close. Three moves, in order. The AI follows structure far more reliably than it follows vibes.

The hard constraintsRequired

Word cap, no hashtags, no em dashes, first person. Every constraint you leave out is a decision the AI makes for you, and it will decide wrong.

The variable slotRequired

{{source_notes}} is where the form injects your source material at generation time. The prompt is the recipe. The source is the ingredients.

The enforcement blockRequired

Hard limits work when they are stated as pass or fail conditions, not preferences. "Keep it short" gets ignored. "More than 4 sentences is failure" gets obeyed. End every Note prompt with an enforcement block.

One Idea From the Article
Write a short Substack Note that pulls one specific idea from the following article. Do not summarize the article. Choose a single insight, example, or claim and make it stand alone as a complete thought. The Note should make a reader curious about the full article without mentioning the article, without teasing, and without sounding like a promo. Maximum 60 words. No hashtags. No em dashes. Write in first person, direct and confident.

Article content: {{source_notes}}

CRITICAL LENGTH RULE: Maximum 4 sentences. No more. This is a Substack Note, not a blog post or a LinkedIn article. If you write more than 4 sentences you have failed. Cut everything that is not essential. No lists, no bullet points, no section headers.
Why this one matters

This is the prompt behind the linked-content path in Section 04. Use it when you want to create multiple standalone Notes from one article, each carrying a different idea from the piece. The instruction "do not summarize" is doing the heavy lifting. Summaries produce Notes that read like promos. Extractions produce Notes that read like thoughts.

Step 01
Create a new prompt record
Go to your prompts area and start a new record. For the full step-by-step table setup, use the Prompt Library template.
Step 02
Name it for the job it does
"Contrarian Observation" tells you what you are selecting at generation time. "Note prompt v2" tells you nothing.
Step 03
Set the content type
Set the content type it belongs to, in this case Substack Note, so it appears in the right dropdown at generation time.
Step 04
Paste the prompt text
Include the variable slot and the enforcement block.
Step 05
Save
It now appears in the Prompt dropdown on the generate form.
Step 06
Refine after every batch
When outputs miss, the fix is almost always one added constraint. Weak openers: add a line banning them. Too long: tighten the enforcement block. Your prompt gets sharper every month you use it.
Start with two

Two prompts are enough to start. One standalone prompt for original thoughts, one extraction prompt for turning articles into Notes. Resist building ten prompts before you have run two. The refinement loop is where prompts get good, and you can only refine what you actually use.

04
Generate Notes With AI The generate workflow, three ways in, and training the AI on your best work.

This is where the volume comes from. The manual path in Section 02 captures thoughts as you have them. This path produces batches on demand: select a brand, a prompt, and a source, and the system assembles everything it knows about your voice before the AI writes a word. The form looks simple. What runs behind it is the reason the output sounds like you.

How generation works

Inside Coordination Zero OS this is a form. Outside it, the same pattern still works: choose the brand, choose the audience, choose the prompt angle, and give the AI source material. The source can be a few notes you type directly, or notes plus a linked article or blog post if your system stores existing content. The generate step sends those inputs to your AI tool and writes the output to a new Note record with Status = Draft.

BrandRequired

Which brand this Note is for. This selection determines everything downstream: which voice guidelines load, which style guides appear, which personas are available.

Intended AudienceRequired

The persona you are writing for, selected at generation time rather than locked in upfront. The same idea lands differently for a solo founder than for an agency owner, and this field is how the AI knows which one is reading.

PromptRequired

Select from the prompt records you built in Section 03. This defines how the AI writes: the angle, the structure, the constraints.

Source NotesRequired

What the Note is about. Paste content, key points, an excerpt, or a short direction for the AI. The prompt is the recipe, this is the ingredients. Thin source material produces thin Notes. Give it something real to work with.

Link to Existing ContentOptional

The parent path. Select a blog post, Substack article, or other content record if you want the AI to pull from existing work. Skip this when you are generating from Source Notes alone.

Style GuideRecommended

Optional but strongly recommended. Only active Substack Note style guides for the selected brand appear here. This is the per-format blueprint you built in the Brand playbook, and it is the difference between on-brand output and output that sounds like everyone else using the same model.

AI Tool to UseRequired

The model that generates this Note. Defaults are fine to start. Once you are running batches, test the same prompt across two models and keep the one that needs less editing. Model choice matters less than prompt and style guide quality, in that order.

Linked content outside Coordination Zero OS

Outside Coordination Zero OS, this is a relationship field. Link each Note to the source article, post, or content record it came from. If your tool does not support linked records, use a URL field plus a copied source-content field. The goal is simple: the AI needs access to the parent content, and you need a way to trace each generated Note back to its source.

Step 01
Choose your source path
You can generate from Source Notes alone, or from Source Notes plus linked existing content. Either way, give the AI a clear idea, angle, or piece of context to write from.
Step 02
Open the generate form
Select your Brand and Intended Audience.
Step 03
Select your prompt angle
Choose the saved prompt that matches the kind of Note you want: original thought, contrarian observation, article extraction, or another angle you built in Section 03.
Step 04
Add Source Notes
Type the idea, key points, excerpt, or direction you want the Note to follow. If you also link existing content, use Source Notes to steer the AI toward the section or angle you want pulled.
Step 05
Link existing content, optional
Attach an article, blog post, or content record only when you want the AI to extract from something you already published or saved in your system.
Step 06
Generate and review
Each generation creates one independent Note record in Draft. Review it before anything moves toward scheduling.
Step 07
Set the status on each keeper
Draft if you batch schedule later, Scheduled if you are assigning slots now. From this point the record behaves exactly like a manual Note.
Generation workflow map
Source path Source Notes alone, or Source Notes plus linked existing content.
Brand + audience + prompt The voice, reader, and saved instruction that shape the Note.
AI output One generated Note carrying one idea from the source material.
Draft Note record The output lands in the same table as every manual Note.
Scheduler Scheduled Notes move to Substack's draft queue with a time slot.
Generation quality checks
  • Review before scheduling: generated output lands as a Draft record, which means nothing publishes without passing through your hands.
  • Edit what is close: fix a weak opener, cut a soft closing sentence, tighten a phrase. A 30 second edit on a good draft beats a rewrite.
  • Reject anything generic: if a Note could have been written by anyone about any business, delete it. Filler teaches your audience to skip you.
  • Flag only the best examples: in my system this is a toggle called Use as Zenna Example. In any system, you want a way to mark finished outputs that are reference-worthy going forward.
  • Keep the quality chain intact: Brand Voice, Style Guide, Prompt, and flagged examples all do different jobs. Skip a layer and the output gets weaker.
05
Schedule The Batch The five-node automation that moves Notes from your system to Substack's queue.

Everything so far has been about getting Notes into the system. This section gets them out. The build is a five-node Make scenario that watches for Notes marked Scheduled, sends each one to Substack with its publish time, and updates the record so you know it landed. It runs in about 30 seconds per Note, it took me an afternoon to build, and the two genuinely hard parts, finding the endpoint and figuring out authentication, are handed to you below. Grab a free Make account if you are not already on it.

Your Note record hits Scheduled status, a webhook fires, and the scenario carries the Note content, brand, and publish time to Substack. The Note appears in your Substack drafts queue with its time slot assigned. No composer, no manual posting, no context switching.

What the automation needs to carry

A webhook is just a message your database sends to your automation tool when something changes. For this workflow, that message needs five things: note_body, scheduled_date, publication URL, record_id, and optionally title. The record_id is how the automation finds its way back to the right row. Node 05 does one thing with it: flips Status from Scheduled to Sent and stamps the publish time. If your tool can send those five fields and write back one status change, the middle nodes work regardless of platform.

Node 01
Custom Webhook
Triggers when a Note is submitted for scheduling. Any database that can call a webhook on a new or updated record works here: your own system, Airtable, Notion, or Google Sheets through Apps Script or an automation tool that watches new or updated rows. Sheets does not fire webhooks natively.
Node 02
Webhook Response
Acknowledges the trigger so the sending system knows Make received it.
Node 03
Database API call
Pulls the full record: Note content, scheduled date and time, and brand, so the right Note goes to the right publication.
Node 04
HTTP POST to Substack
The node that does the work. Full configuration below.
Node 05
Status update API call
Updates the record status to confirm the Note was sent. This is what moves your record to Sent and keeps your queue view honest.
The Substack endpoint

Substack does not publish an official API. This endpoint came from digging through browser network requests so you do not have to.

Endpoint: https://[yourpublication].substack.com/api/v1/comment/draft

Method: POST

Auth 01
Log in to Substack in Chrome
The API authenticates with a cookie value called substack.sid.
Auth 02
Open Inspect
Right click anywhere on the page and select Inspect.
Auth 03
Open the Application tab
This is where Chrome stores the site cookies.
Auth 04
Find the Substack cookies
In the left sidebar, expand Cookies and click the Substack domain.
Auth 05
Copy substack.sid
Find the row named substack.sid and copy the value in the Value column.
Keep this private

This value authenticates as you. Anyone holding it can act as your Substack account. Do not paste it into shared documents, screenshots, or version control. If you ever suspect it leaked, log out of Substack and back in to invalidate it.

Configuring the HTTP module
Authentication typeRequired

No authentication. Auth is handled through the cookie header below.

URLRequired

https://[yourpublication].substack.com/api/v1/comment/draft

MethodRequired

POST

Header 1Required

Name: Cookie. Value: substack.sid=[your sid value]

Header 2Required

Name: Content-Type. Value: application/json

Body content typeRequired

application/json

Body input methodRequired

Data structure

Parse responseRequired

Yes

Starting body structure
{
  "body_json": {
    "type": "doc",
    "attrs": {
      "schemaVersion": "v1"
    },
    "content": [
      {
        "type": "paragraph",
        "content": [
          {
            "type": "text",
            "text": "{{note_body}}"
          }
        ]
      }
    ]
  },
  "trigger_at": "{{scheduled_date}}",
  "reply_minimum_role": "everyone"
}
Build it in your stack

I run this in Make. The pattern ports to Zapier, n8n, or any automation tool with a webhook trigger and an HTTP module. One thing to know before you build: Substack has no official API, so this call rides on an unofficial endpoint. It works today. Expect to maintain it.

The timezone gotcha

Make handles the trigger_at timestamp based on your Make account timezone settings, not your local machine. Verify your Make timezone matches your actual timezone before you schedule anything, or every Note in the batch goes out at the wrong hour. This is the single most common failure in this build and it takes 30 seconds to check.

What done looks like

Open your Substack drafts queue after your first batch run. Notes stacked and scheduled, each sitting in its time slot, the full week visible before it starts. That view is the payoff: you think once, batch once, and the week runs itself.

06
Verify Check the full playbook before you trust the batch.

Click each item as you confirm it. The goal is not a page full of records. The goal is a batch visible in Substack before the week starts.

Brand record is complete

Style Guide for Substack Notes is built, recommended

At least one prompt record is created

One manual Note is captured and saved

One AI batch is generated and reviewed

Make scenario live, timezone verified

First batch scheduled and visible in your Substack drafts queue

Substack Notes are ready.

Once the scheduler is live, your fastest content type can move from thought to draft queue without leaving the system.

Back to Content Studio All Playbooks →