Skip to content

On a schedule

Turn 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.

Runs
On a schedule
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 weekday at 8, take the next idea from my LinkedIn Ideas sheet, write a post, email it to me with an approve link, and when I approve, publish it and write the post URL into the row.

Paste it into your assistant. It tells you what it will send or change before it runs live.

First time? Adding ClickRuntime to your assistant takes about two minutes.

Why use it

Why teams use this automation

A founder jots LinkedIn ideas into a sheet whenever something comes up: a lesson from a customer call, a hiring mistake, a product decision. The list is long; the posts are few, because turning a note into a good post takes half an hour.

Each weekday morning the next idea arrives as a finished draft by email. One click publishes it, and the row is updated with the link, so the founder posts regularly without giving up their mornings.

What you get out of it

  • Ideas become posts

    Notes in a sheet turn into finished drafts, one a day.

  • You approve every post

    Nothing goes out until you click approve.

  • Progress in the sheet

    Each row shows whether it's been posted and links to it.

  • Add an image when you want

    Put an image link in the row and it's attached to the post.

How it works

What happens, step by step

  1. Every weekday morning, ClickRuntime reads the next unused idea from your sheet.

  2. AI writes a LinkedIn post from it, and the draft is saved.

  3. You get an email with the draft and an approve link.

  4. When you approve, the post is published to LinkedIn and the row is updated with its link.

Before it runs live

  • Connect your Google Sheets account and pick the spreadsheets it may use
  • Connect LinkedIn

What you get

RunsOn a schedule
Turn ideas in a sheet into approved LinkedIn poststoday, 9:00Succeeded
Email · LinkedIn draft to approveWe stopped doing annual reviews two years ago. Here's what replaced them, and what we got wrong at first... Approve: …

Build your own

Need it to work differently?

This template is a starting point. Copy the prompt and change it, or describe a different automation from scratch, with your own conditions, more apps or an AI step. Your assistant writes it, tests it and runs it on ClickRuntime.
  • 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

This is the Python script that runs each time the automation starts. Your AI assistant writes it for you when you send the prompt, and you allow each step in your assistant. To change how the automation works, describe the change to your assistant and it updates the script for you. For every function it can use, see the script reference.
write_and_publish_linkedin_posts_from_ideas_in_a_sheet.pyexample
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from clickruntime import on_trigger, on_event, credentials, http, ai, state, notify

AUTHOR, SHEET_ID, LINK = "urn:li:person:abc123", "your-spreadsheet-id", "https://run.clickruntime.example/t/abc123"

def sheet(): return build("sheets", "v4", credentials=Credentials(credentials.connection("google", "work")), cache_discovery=False).spreadsheets().values()

@on_trigger
def run(event):
    if state.get("pending"):
        return {"waiting": True}
    rows = sheet().get(spreadsheetId=SHEET_ID, range="Ideas!A2:B").execute().get("values", [])
    row = next((i + 2 for i, r in enumerate(rows) if r and len(r) < 2), None)
    if not row:
        return {"ideas": 0}
    draft = ai.generate(f"Write a LinkedIn post from this idea, first person, no hashtags spam: {rows[row - 2][0]}", max_output_tokens=500).text
    state.set("pending", {"row": row, "text": draft})
    notify.email_me("LinkedIn draft to approve", f"{draft}\n\nApprove: {LINK}?approve=1")
    return {"drafted": row}

@on_event
def approve(event):
    p = state.get("pending")
    r = http.post("https://api.linkedin.com/rest/posts", headers={"Authorization": f"Bearer {credentials.connection('linkedin', 'work')}", "LinkedIn-Version": "202409"},
                  json={"author": AUTHOR, "commentary": p["text"], "visibility": "PUBLIC", "lifecycleState": "PUBLISHED", "distribution": {"feedDistribution": "MAIN_FEED"}})
    url = f"https://www.linkedin.com/feed/update/{r.headers.get('x-restli-id')}"
    sheet().update(spreadsheetId=SHEET_ID, range=f"Ideas!B{p['row']}", valueInputOption="RAW", body={"values": [[url]]}).execute()
    state.delete("pending")
    return {"posted": url}

FAQ

Common questions

What should an idea look like?
A line or two is enough, such as 'Why we stopped doing annual reviews'. More detail gives a more specific post.
What if I don't approve a draft?
It waits, and the same idea isn't redrafted until you approve or skip it.
Can I skip an idea?
Yes. Mark the row as skipped and the next idea is used tomorrow.
What permissions does it need?
Sheets edit; LinkedIn w_member_social. Nothing else in your accounts is used.
Does it need AI?
Yes. It uses ClickRuntime's built-in AI, so you don't need an OpenAI or Anthropic key. Every plan includes a monthly AI allowance.
How many runs does it use?
One run each time it runs (on a schedule). Checks that find nothing to do and stop right away aren't counted.
Can I change how it works?
Yes. Describe the change to your AI assistant, for example a different schedule, channel or filter. It updates the automation, tests it and tells you what changed.

Set up “Turn ideas in a sheet into approved LinkedIn posts” from your assistant

Copy the prompt above, or connect your assistant first. Free plan, no credit card.