Weekly
Draft LinkedIn posts inspired by high-performing ones you collect
Posts you save to a sheet because they did well are studied, and new drafts in your own voice are added to the sheet, with one published each week.
- Runs
- Weekly
- Apps
- Google Sheets, LinkedIn
- AI
- Yes, uses the built-in AI allowance
- Access
- Sheets edit; LinkedIn w_member_social
Send this to your assistant
Create a ClickRuntime automation: every Monday at 8, read the high-engagement LinkedIn posts I've collected in my Swipe sheet, work out what made them work, add three drafts in my voice to the Drafts tab, and publish the best one.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A sales coach saves LinkedIn posts that got a big response into a sheet, meaning to learn from them. The sheet grows; their own posting doesn't change.
Each Monday the collected posts are studied for what made them land, such as the opening line, the structure or the story. Three drafts in the coach's own voice go into the sheet, and the strongest is published, so the swipe file finally pays off.
What you get out of it
Learn from what works
Each week's drafts use patterns from posts that actually performed.
Your voice, not a copy
Drafts borrow structure, not words, and are written about your own topics.
Drafts stored for later
Unused drafts stay in the sheet for another week.
A post every week
One draft is published, so you stay visible.
How it works
What happens, step by step
Every Monday, ClickRuntime reads the posts you've collected in your sheet.
AI notes what made them work and writes three new drafts in your voice on your topics.
The drafts are added to the Drafts tab of your sheet.
The strongest draft is published to LinkedIn and marked as posted.
Before it runs live
- Connect your Google Sheets account and pick the spreadsheets it may use
- Connect LinkedIn
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 LinkedIn steps into one automation
Under the hood
The code that runs this automation
from datetime import date
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from clickruntime import on_trigger, credentials, http, ai
AUTHOR, SHEET_ID = "urn:li:person:abc123", "your-spreadsheet-id"
VOICE = "Sales coach for B2B founders. Direct, practical, short sentences, real examples."
@on_trigger
def run(event):
values = build("sheets", "v4", credentials=Credentials(credentials.connection("google", "work")), cache_discovery=False).spreadsheets().values()
swipe = [r[0][:800] for r in values.get(spreadsheetId=SHEET_ID, range="Swipe!A2:A").execute().get("values", []) if r][-15:]
out = ai.generate(f"Voice: {VOICE}\nHigh-performing posts:\n" + "\n---\n".join(swipe) +
"\nWrite 3 original drafts on my own topics using what made these work. Mark the best.", max_output_tokens=1500,
json_schema={"type": "object", "properties": {"drafts": {"type": "array", "items": {"type": "string"}}, "best": {"type": "integer"}}}).json
best = out["drafts"][out["best"]]
http.post("https://api.linkedin.com/rest/posts",
headers={"Authorization": f"Bearer {credentials.connection('linkedin', 'work')}", "LinkedIn-Version": "202409"},
json={"author": AUTHOR, "commentary": best, "visibility": "PUBLIC", "lifecycleState": "PUBLISHED",
"distribution": {"feedDistribution": "MAIN_FEED"}})
rows = [[date.today().isoformat(), d, "posted" if d == best else ""] for d in out["drafts"]]
values.append(spreadsheetId=SHEET_ID, range="Drafts!A:C", valueInputOption="USER_ENTERED", body={"values": rows}).execute()
return {"drafts": len(rows)}FAQ
Common questions
Does it copy other people's posts?
How do I add posts to learn from?
Can I stop it from publishing?
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 trending topics to LinkedIn and log them in a sheet
Trending topics in your field become LinkedIn posts, and every post is logged in your sheet with its link.
See how it worksTurn ideas in a sheet into approved LinkedIn posts
Each day the next idea in your sheet is written up, sent to you for approval, then published and marked done with its link.
See how it worksShare new articles on LinkedIn, tracked in a sheet
Each new article from your blog or a news feed becomes a LinkedIn post, and your sheet makes sure nothing is posted twice.
See how it worksKeep exploring
Set up “Draft LinkedIn posts inspired by high-performing ones you collect” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.