Skip to content

On a schedule

Catalogue new Drive photos in a Notion gallery

Photos added to your Drive portfolio folder are described, tagged and catalogued in your Notion gallery database.

Runs
On a schedule
Apps
Google Drive, Notion
AI
Yes, uses the built-in AI allowance
Access
drive.readonly; Notion insert content

Send this to your assistant

Create a ClickRuntime automation: when new images land in my Drive Portfolio folder, write a short description and tags for each and add it to my Notion gallery database with a link.

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 freelance photographer delivers shoots into a Google Drive folder and wants a browsable portfolio in Notion to share with prospective clients. Adding each photo by hand, with a title, tags and the shoot details, is the kind of job that never gets done, so the Notion gallery is always months behind.

This automation checks the folder every hour. For each new image it gathers the file name, folder, date and camera details, has AI turn them into a short description and tags, and adds an entry to your Notion gallery with a link to the photo.

What you get out of it

  • The portfolio keeps up with your work

    New shoots appear in Notion soon after you upload them. You can send a prospect a current gallery without a catch-up session first.

  • Searchable by tag

    Tags such as wedding, product or outdoor make it easy to filter the gallery. Finding the right examples for a pitch takes seconds.

  • Shoot details kept with each image

    Date and camera details are stored alongside each photo. That context helps when a client asks when or how a picture was taken.

  • No change to how you upload

    You keep saving photos into Drive as before. Cataloguing happens on its own afterwards.

How it works

What happens, step by step

  1. Every hour, ClickRuntime looks for new images in your Drive Portfolio folder.

  2. It reads each photo's name, folder, date and camera details.

  3. AI writes a short description and a few tags from those details.

  4. An entry with the description, tags and a link to the photo is added to your Notion gallery database.

Before it runs live

  • Connect Google Drive
  • Connect Notion and share the database you want it to use

What you get

RunsOn a schedule
Catalogue new Drive photos in a Notion gallerytoday, 9:00Succeeded
Notion · Portfolio galleryNorthwind Coffee rooftop launch, golden hour. Tags: event, product, outdoor

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 Drive and Notion 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.
organise_image_portfolio_into_notion.pyexample
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from clickruntime import on_trigger, credentials, http, state, ai, report_fetched

FOLDER_ID, GALLERY_DB = "your-folder-id", "your-notion-database-id"
SCHEMA = {"type": "object", "properties": {"title": {"type": "string"}, "description": {"type": "string"}, "tags": {"type": "array", "items": {"type": "string"}}}, "required": ["title", "tags"]}

@on_trigger
def run(event):
    drive = build("drive", "v3", credentials=Credentials(credentials.connection("google", "work")), cache_discovery=False).files()
    seen = set(state.get("seen") or [])
    files = [f for f in drive.list(q=f"'{FOLDER_ID}' in parents and mimeType contains 'image/' and trashed=false", pageSize=100,
             fields="files(id,name,createdTime,webViewLink,imageMediaMetadata(time,cameraModel))").execute()["files"] if f["id"] not in seen]
    report_fetched(len(files))
    if not files:
        return {"summary": "Nothing new"}
    for f in files[:25]:
        meta = f.get("imageMediaMetadata", {})
        try:
            info = ai.generate(f"File: {f['name']}\nTaken: {meta.get('time', f['createdTime'])}\nCamera: {meta.get('cameraModel', '')}",
                               system="Write a portfolio title, one-sentence description and up to 5 lowercase tags.", json_schema=SCHEMA, max_output_tokens=150).json
        except ai.AIError:
            info = {"title": f["name"], "description": "", "tags": []}
        http.post("https://api.notion.com/v1/pages", headers={"Authorization": f"Bearer {credentials.connection('notion', 'work')}", "Notion-Version": "2022-06-28"}, json={"parent": {"database_id": GALLERY_DB}, "properties": {
            "Name": {"title": [{"text": {"content": info["title"]}}]}, "Description": {"rich_text": [{"text": {"content": info.get("description", "")}}]},
            "Tags": {"multi_select": [{"name": t[:100]} for t in info["tags"]]}, "Photo": {"url": f["webViewLink"]}}}).raise_for_status()
        seen.add(f["id"])
    state.set("seen", list(seen)[-2000:])
    return {"added": min(len(files), 25)}

FAQ

Common questions

How are the descriptions written?
From the file name, the folder it is in, the date and the camera details saved with the photo. Descriptive file and folder names give better results.
Are the photos copied into Notion?
No. Each entry links to the original in Drive, so files are stored once and stay in full resolution.
Which image types are included?
Any image file in the folder, such as JPEG, PNG or HEIC. Other files in the folder are ignored.
What permissions does it need?
drive.readonly; Notion insert content. 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 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 “Catalogue new Drive photos in a Notion gallery” from your assistant

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