Weekly
Draft a weekly blog post about one of your products
Each week a new blog draft about one of your products appears in Shopify, and Slack tells you it is ready to review.
- Runs
- Weekly
- Apps
- Shopify, Slack
- AI
- Yes, uses the built-in AI allowance
- Access
- Shopify read_products, write_content; Slack chat:write
Send this to your assistant
Create a ClickRuntime automation: every Tuesday, pick a Shopify product I haven't written about yet, draft a blog post about it in my store's blog, and let me know in #marketing.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A small skincare brand knows a blog helps people find the store through search, but writing a post each week never makes it above packing orders and answering customers. The blog has six posts, the last one from spring.
A first draft that appears every week, about a product not yet covered, turns a blank page into an editing job. The owner adds their own voice and a photo, publishes it, and the blog grows steadily.
What you get out of it
A steady stream of posts
One draft a week adds up to a blog with real depth over a year. Regular posting is what helps search engines and returning readers.
Every product gets its turn
Products already covered are remembered and skipped. Over time the whole range gets a post, not just the best sellers.
Nothing goes live unchecked
Each post is saved as an unpublished draft. You review, edit and publish it when you are happy with it.
Editing beats starting from nothing
A draft built from your product's own description gives you a structure to work from. Most of the effort moves from writing to improving.
How it works
What happens, step by step
Once a week, ClickRuntime reads your active products in Shopify.
It picks the first product it has not written about before.
AI writes a blog post from the product's title and description, in the tone you set.
The post is saved as a hidden draft on your store's blog.
A message in your #marketing Slack channel tells you a new draft is ready to review.
Before it runs live
- Connect Shopify
- Connect Slack, then invite the app to the channel (type /invite @ClickRuntime there)
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
- Run it at a different time, more or less often, or only on weekdays
- Change what the AI looks for, or how it writes the result
- Add another app, for example also send it to Google Sheets
- Combine it with other Shopify and Slack steps into one automation
Under the hood
The code that runs this automation
from clickruntime import on_trigger, credentials, http, notify, state, ai
STORE = "your-store.myshopify.com"
def gql(query, variables=None):
resp = http.post(f"https://{STORE}/admin/api/2025-07/graphql.json", json={"query": query, "variables": variables or {}},
headers={"X-Shopify-Access-Token": credentials.connection("shopify", "store")})
return resp.raise_for_status() or resp.json()["data"]
BLOG_ID = "gid://shopify/Blog/123456789"
SCHEMA = {"type": "object", "properties": {"title": {"type": "string"}, "html": {"type": "string"}}}
@on_trigger
def run(event):
done = set(state.get("covered") or [])
products = gql('{ products(first: 100, query: "status:active") { nodes { id title description } } }')["products"]["nodes"]
product = next((p for p in products if p["id"] not in done), None)
if not product:
return {"written": None}
post = ai.generate(f"Product: {product['title']}\n{product['description'][:2000]}", json_schema=SCHEMA, max_output_tokens=1500,
system="Write a friendly, useful 600-word blog post about this product. Return a title and an HTML body.").json
gql("""mutation($a: ArticleCreateInput!) { articleCreate(article: $a) { article { id } userErrors { message } } }""",
{"a": {"blogId": BLOG_ID, "title": post["title"], "body": post["html"], "isPublished": False, "author": {"name": "Store team"}}})
notify.slack(f"New blog draft ready to review: {post['title']} (about {product['title']})", channel="#marketing")
state.set("covered", sorted(done | {product["id"]}))
return {"written": product["title"]}FAQ
Common questions
Which blog are the drafts added to?
Can I steer the tone and length?
What happens when every product has a post?
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
Post a weekly Shopify sales report in Slack
Every Monday Slack shows last week's orders, revenue and best sellers, with a short comment on what changed.
See how it worksGet low-stock warnings from Shopify in Slack
Each morning Slack lists the products that will run out within two weeks at their current sales rate.
See how it worksGet a Slack alert when orders stop or ship late
Slack tells you when no orders have come in for longer than usual, or when paid orders are waiting too long to ship.
See how it worksKeep exploring
Set up “Draft a weekly blog post about one of your products” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.