Skip to content

Every 15 minutes

Make a personalised deck for every new row in your sheet

Each prospect or client row without a deck link gets its own copy of your Slides template with their details filled in, and the link is written back to the sheet.

Runs
Every 15 minutes
Apps
Google Sheets, Google Slides
AI
Optional
Access
Sheets read+write; Slides/Drive write (template shared with service account)

Send this to your assistant

Create a ClickRuntime automation: every 15 minutes, for every row in my Prospects sheet without a deck link, copy my Slides template, replace {{name}}, {{company}} and the other placeholders with that row's values, and write the link back.

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

Sales and account teams keep prospect lists in Google Sheets. Personalised decks get better responses, but making one per row means copying, renaming and editing slides by hand.

Building a deck for each new row and writing the link back next to it makes personalised decks part of the list itself, created as soon as a prospect is added.

What you get out of it

  • Decks appear as you add prospects

    Add a row and a personalised deck is ready within 15 minutes.

  • Links live with the data

    The deck link sits next to each prospect, easy to share or track.

  • Any column, any placeholder

    Every column header can fill a matching {{placeholder}} in the template.

  • Never duplicated

    Rows that already have a link are skipped.

How it works

What happens, step by step

  1. Every 15 minutes, ClickRuntime reads your Prospects sheet.

  2. It picks out rows that don't have a deck link yet.

  3. For each row, it copies your Slides template and replaces each placeholder with the row's values.

  4. If AI is available, it writes a short tailored pitch from the row's notes.

  5. It writes the new deck's link back into the row.

Before it runs live

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

What you get

RunsEvery 15 minutes
Make a personalised deck for every new row in your sheettoday, 9:00Succeeded
Google Sheets · ProspectsDana Park · Northwind Logistics · deck_link: docs.google.com/presentation/d/…

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

  • 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 Google Sheets and Google Slides 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.
generate_a_personalised_deck_for_every_row_in_a_sheet.pyexample
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from clickruntime import on_trigger, credentials, http, ai, report_fetched

SHEET_ID, TEMPLATE_ID, FOLDER = "your-spreadsheet-id", "your-template-id", "decks-folder-id"

@on_trigger
def run(event):
    sheets = build("sheets", "v4", credentials=Credentials(credentials.connection("google", "work")), cache_discovery=False).spreadsheets()
    header, *rows = sheets.values().get(spreadsheetId=SHEET_ID, range="Prospects!A1:Z").execute()["values"]
    link_col = header.index("deck_link")
    todo = [(i, dict(zip(header, r))) for i, r in enumerate(rows, start=2) if not dict(zip(header, r)).get("deck_link")]
    report_fetched(len(todo))
    if not todo:
        return {"summary": "Nothing new"}
    drive, slides = build("drive", "v3", credentials=Credentials(credentials.connection("google", "work")), cache_discovery=False), build("slides", "v1", credentials=Credentials(credentials.connection("google", "work")), cache_discovery=False).presentations()
    for i, row in todo:
        try:
            row["pitch"] = ai.generate(f"Write a 2-sentence tailored pitch for {row.get('company')} from: {row.get('notes', '')}", max_output_tokens=100).text
        except ai.AIError:
            row["pitch"] = ""
        deck = drive.files().copy(fileId=TEMPLATE_ID, body={"name": f"Northwind for {row.get('company')}", "parents": [FOLDER]}).execute()["id"]
        slides.batchUpdate(presentationId=deck, body={"requests": [{"replaceAllText": {"containsText": {"text": "{{" + k + "}}"}, "replaceText": v}}
                           for k, v in row.items() if k != "deck_link"]}).execute()
        sheets.values().update(spreadsheetId=SHEET_ID, range=f"Prospects!{chr(65 + link_col)}{i}", valueInputOption="RAW",
                               body={"values": [[f"https://docs.google.com/presentation/d/{deck}"]]}).execute()
    return {"decks": len(todo)}

FAQ

Common questions

How do column names match placeholders?
A column called company fills {{company}} in the template; add as many as you like.
Can AI write part of the deck?
Yes. If AI is available, it can write a short tailored paragraph into {{pitch}} from the row's notes.
Who owns the new decks?
Your connected Google account, saved in the Drive folder you choose.
What permissions does it need?
Sheets read+write; Slides/Drive write (template shared with service account). Nothing else in your accounts is used.
Does it need AI?
No, but you can ask for an AI step (for example a summary). It then uses ClickRuntime's built-in AI allowance.
How many runs does it use?
One run each time it checks. Checks that find nothing new 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 “Make a personalised deck for every new row in your sheet” from your assistant

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