On a schedule
Turn a keyword sheet into Webflow blog drafts
Each day the next keyword in your sheet becomes a full blog post draft in your Webflow Blog collection, with the link written back to the sheet.
- Runs
- On a schedule
- Apps
- Google Sheets, Webflow
- AI
- Yes, uses the built-in AI allowance
- Access
- Webflow cms:write; Sheets read+write
Send this to your assistant
Create a ClickRuntime automation: every day at 7am, take the next pending keyword from my SEO sheet, write a blog post with AI, create it as a draft in my Webflow Blog collection, write the link back and tell me in Slack.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A SaaS startup's single marketer keeps a keyword plan in Google Sheets with fifty topics the company should rank for. The website runs on Webflow. Each article means writing, then copying the title, slug, meta description and body into the CMS by hand, so the plan moves at about one post a fortnight.
This automation moves it every day. Each morning it takes the next pending keyword, AI writes a title, slug, meta description and body, and the post is created as a draft in the Webflow Blog collection. The sheet row is updated with the link and a Slack message lets the marketer know a draft is ready to edit.
What you get out of it
Work through the keyword plan
A draft a day turns a long list into real articles within weeks. The plan stops being a wish list.
No copying into the CMS
Title, slug, meta description and body are filled in for you. The marketer only edits and publishes.
Drafts first, always
Posts are created as drafts, so nothing reaches the live site until someone has read it. Quality stays in your hands.
The sheet stays the source of truth
Every row shows its status and a link to the draft. Anyone can see what is planned, drafted and live.
How it works
What happens, step by step
Every morning, ClickRuntime reads your SEO sheet and picks the first keyword marked pending.
AI writes a blog post for it with a title, slug, meta description and body.
The post is created as a draft item in your Webflow Blog collection.
The row is marked drafted with a link to the item, and a Slack message tells you it is ready to review.
Before it runs live
- Connect your Google Sheets account and pick the spreadsheets it may use
- Connect Webflow
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 Slack
- Combine it with other Google Sheets and Webflow steps into one automation
Under the hood
The code that runs this automation
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from clickruntime import on_trigger, credentials, http, ai, notify
SHEET_ID = "your-spreadsheet-id"
COLLECTION_ID = "your-collection-id"
def webflow(method, path, **kw):
r = http.request(method, f"https://api.webflow.com/v2/collections/{COLLECTION_ID}/items{path}",
headers={"Authorization": f"Bearer {credentials.secret('WEBFLOW_API_TOKEN')}"}, **kw)
r.raise_for_status()
return r.json()
@on_trigger
def run(event):
sheets = build("sheets", "v4", credentials=Credentials(credentials.connection("google", "work")), cache_discovery=False).spreadsheets()
rows = sheets.values().get(spreadsheetId=SHEET_ID, range="SEO!A2:C").execute().get("values", [])
nxt = next(((i + 2, r[0]) for i, r in enumerate(rows) if len(r) > 1 and r[1] == "pending"), None)
if not nxt:
return {"drafted": False}
row, keyword = nxt
schema = {"type": "object", "properties": {k: {"type": "string"} for k in ["title", "slug", "summary", "body_html"]}, "required": ["title", "slug", "summary", "body_html"]}
post = ai.generate(f"Write an SEO blog post targeting '{keyword}', 900-1200 words, H2 headings, HTML body.", json_schema=schema, max_output_tokens=2048).json
item = webflow("POST", "", json={"isDraft": True, "fieldData": {"name": post["title"], "slug": post["slug"], "post-summary": post["summary"], "post-body": post["body_html"]}})
link = f"https://webflow.com/dashboard/sites/your-site/cms/{COLLECTION_ID}/{item['id']}"
sheets.values().update(spreadsheetId=SHEET_ID, range=f"SEO!B{row}:C{row}", valueInputOption="RAW", body={"values": [["drafted", link]]}).execute()
notify.slack(f"📝 New Webflow draft: {post['title']} ({keyword})\n{link}", channel="#marketing")
return {"drafted": keyword}FAQ
Common questions
Can it publish straight away?
Which collection fields does it fill?
Does it add images?
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
Add FAQ sections to Webflow pages listed in a sheet
Mark a page as ready in your sheet and five FAQs written from its content are saved into that page's Webflow CMS item, with the row marked done.
See how it worksGet a daily news digest in Slack
Each morning your team gets a short summary of what's new on the sites and blogs you follow.
See how it worksFollow your stocks and crypto in Slack
During market hours you get a short update on the tickers you care about, with a heads-up on big moves.
See how it worksKeep exploring
Set up “Turn a keyword sheet into Webflow blog drafts” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.