Every hour
Turn new Shopify products into blog drafts
Each time you add a product to Shopify, a blog draft about it is waiting in your store and an email tells you it is ready.
- Runs
- Every hour
- Apps
- Gmail, Shopify
- AI
- Yes, uses the built-in AI allowance
- Access
- read_products, write_content; gmail.send
Send this to your assistant
Create a ClickRuntime automation: every hour, check for new Shopify products; for each one, draft a blog post about it on my store blog and email me the link to review.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A jewellery maker adds a few new pieces every month. Each launch deserves a blog post to tell the story behind the design, but by the time the photos are done and the product is live, the energy for writing is gone and the post never happens.
Having a draft appear as soon as a product is added means the story is half told before the maker sits down to write. They add personal details, publish, and every launch gets the attention it deserves.
What you get out of it
Every launch gets a post
A draft is created for each new product without anyone deciding to write one. New products are introduced properly instead of just appearing in the catalogue.
Timed with the launch
The draft arrives within the hour of adding the product, while the launch is fresh. Publishing it alongside the product gives both a stronger start.
You review before anything is public
The post is saved hidden on your blog. An email with the link lets you check, edit and publish when you are ready.
More pages for search engines
Each post is another page that can bring visitors to your store. Over time, a blog that covers every product draws steady search traffic.
How it works
What happens, step by step
Every hour, ClickRuntime checks your Shopify store for products added since the last check.
It remembers the newest product it has seen, so each product is handled once.
For each new product, AI writes a blog post from its title and description.
The post is saved as a hidden draft on your store's blog.
You get an email with the title and a link to review it.
Before it runs live
- Connect Google through your own Google app (a one-time, 10-minute setup), so it works with your own Gmail
- Connect Shopify
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 Gmail and Shopify steps into one automation
Under the hood
The code that runs this automation
from clickruntime import on_trigger, credentials, http, notify, state, ai, report_fetched
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):
since = state.get("since") or "2026-01-01T00:00:00Z"
products = gql(f'{{ products(first: 20, sortKey: CREATED_AT, query: "status:active created_at:>{since}") {{ nodes {{ title description createdAt }} }} }}')["products"]["nodes"]
report_fetched(len(products))
if not products:
return {"drafts": 0}
for p in products:
post = ai.generate(f"Product: {p['title']}\n{p['description'][:2000]}", json_schema=SCHEMA, max_output_tokens=1500,
system="Write a warm 500-word blog post introducing this new product. Return a title and an HTML body.").json
gql("mutation($a: ArticleCreateInput!) { articleCreate(article: $a) { article { id } } }",
{"a": {"blogId": BLOG_ID, "title": post["title"], "body": post["html"], "isPublished": False, "author": {"name": "Store team"}}})
notify.email_me(f"Blog draft ready: {post['title']}", f"A draft about {p['title']} is in Online Store > Blog posts.")
state.set("since", products[-1]["createdAt"])
return {"drafts": len(products)}FAQ
Common questions
Does it write about products I add as drafts?
Can it include the product image?
What if I add many products at once?
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
Draft replies to refund requests with the order details
Refund request emails get a Gmail draft reply that already knows the order, its date and whether it is inside your return window.
See how it worksCatch Shopify pricing and discount mistakes
Each morning you get an email if any price dropped below your floor, changed sharply, or a discount code is larger than your rules allow.
See how it worksGet a daily email about low Shopify stock
Each morning you get an email listing products that will run out soon at their current pace, plus any that are not selling.
See how it worksKeep exploring
Set up “Turn new Shopify products into blog drafts” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.