The moment it happens
Turn your notes into a Ghost draft
Rough notes I send to a link come back as a titled draft post waiting in Ghost.
- Runs
- The moment it happens
- Apps
- Ghost
- AI
- Yes, uses the built-in AI allowance
- Access
- Admin API key (write)
Send this to your assistant
Create a ClickRuntime automation: give me a link I can send notes to; have AI turn them into a blog post of about 800 words with a title, and save it as a draft in Ghost.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Writers and founders who publish on Ghost often capture ideas in a hurry: a voice note transcript, bullet points from a call, a messy paragraph typed on a phone. Turning that into a draft with a title, structure and a clean body takes another half hour at a desk, and plenty of those ideas never make it into the Ghost editor at all.
You send raw text to a webhook link, and as soon as it arrives the built-in AI in ClickRuntime drafts a title and a body from it. A new draft post is created in Ghost, never published, so it is waiting in the editor when you sit down to polish it.
Newsletter writers, indie founders posting build updates and marketers who collect notes from interviews and want a first draft waiting rather than a blank page.
What you get out of it
Ideas reach the editor before they fade
Sending notes to a link right after a call means the draft exists the same hour, while you still remember the points that did not make it into the bullet list.
Blank-page time disappears
Starting from a structured draft with a working title is much quicker than writing from nothing, and editing a draft is easier on a busy day than composing. Many writers find that editing is faster and less draining than composing.
Nothing is published by accident
The post is created as a draft in Ghost, so subscribers never see unreviewed AI text. You decide what goes out and when, from the normal Ghost editor. You stay in control of the final wording and timing.
Works from any tool that can post text
Anything that can call a webhook, such as a shortcut on your phone or a form, can feed ideas in, so capture is not tied to sitting at the Ghost dashboard.
No AI key to manage
The writing step uses the built-in AI, so there is no OpenAI or Anthropic account to create, pay for and rotate just to turn notes into a post. That removes a cost and an admin task for small publishers.
How it works
What happens, step by step
When you send rough notes to your personal ClickRuntime link, the automation starts straight away.
AI turns the notes into a blog post of about 800 words with a title.
ClickRuntime saves it in Ghost as a draft, so nothing is published until you review it and press publish.
Before it runs live
- Connect Ghost
- Paste your automation's link into the other app's webhook settings
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Act only on the items that match your own rules, and skip the rest
- Change what the AI looks for, or how it writes the result
- Add another app, for example also send it to Slack
- Combine it with other Ghost steps into one automation
Under the hood
The code that runs this automation
import time, jwt
from clickruntime import on_event, credentials, http, ai
SITE = "https://blog.example.com"
def ghost_token():
key_id, secret = credentials.secret("GHOST_ADMIN_API_KEY").split(":")
now = int(time.time())
return jwt.encode({"iat": now, "exp": now + 300, "aud": "/admin/"}, bytes.fromhex(secret),
algorithm="HS256", headers={"kid": key_id})
@on_event
def handle(event):
notes = (event.json or {}).get("text") or event.body
post = ai.generate(
f"Turn these notes into a blog post of about 800 words. Return a title and the body as HTML.\n\n{notes}",
json_schema={"type": "object", "properties": {"title": {"type": "string"}, "html": {"type": "string"}},
"required": ["title", "html"]},
max_output_tokens=2048,
).json
resp = http.post(f"{SITE}/ghost/api/admin/posts/", params={"source": "html"},
headers={"Authorization": f"Ghost {ghost_token()}"},
json={"posts": [{"title": post["title"], "html": post["html"], "status": "draft"}]})
resp.raise_for_status()
return {"draft": resp.json()["posts"][0]["id"], "title": post["title"]}FAQ
Common questions
Does it publish the post or only save a draft?
How do I send text to it?
Will the draft keep my own voice?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Get told about every new Ghost member
When someone signs up on my Ghost site, their email and plan appear in Slack.
See how it worksFind Ghost post images missing alt text
Once a week I get a list of posts with images that lack alt text or are too large.
See how it worksGet error alerts with a plain-English explanation
When one of your jobs or systems fails, #ops gets the error and a one-line guess at the cause, without the same error twice in an hour.
See how it worksKeep exploring
Set up “Turn your notes into a Ghost draft” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.