Auto-file Slack channel photos into Google Photos albums

By General Input

When someone drops a photo or video in your team Slack channels, file it into a Google Photos album named for the channel and current month.

Integrations

  • Slack Bot
  • Google Photos

Type

Agentic Task

Categories

  • Operations
  • Personal Productivity

Build me an agent workflow that auto-files photos and videos shared in my Slack channels into Google Photos albums. The trigger is a Slack event webhook for the file_shared event, scoped to a configurable list of channels I provide (for example #team-photos and #event-recap). The integrations are Slack Bot for reading the file and replying in Slack, and Google Photos for uploading and organizing the media.

When the webhook fires, the agent should:

1. Pull the file id and the channel id from the event payload. If the channel id is not in my watch list, stop and do nothing.

2. Call Slack Bot Get File Info to load the file metadata, including the mime type, the private download URL, the original message text, the thread timestamp, and the user who posted it. If the mime type is not an image or video (anything that does not start with image/ or video/), stop and do nothing. Documents, links, snippets, and other file types must be ignored.

3. Download the raw file bytes from Slack's private download URL using the Slack Bot access token in the Authorization header.

4. Look up the human channel name (for example team-photos) using Slack Bot Get Channel Info if it isn't already in the event payload. Compute the target album title in the form: Slack #<channel-name> <Month> <Year>, for example Slack #team-photos June 2026, using the workflow's current month.

5. Use Google Photos List Albums to find an existing album with that exact title. Paginate through results if needed. If no match exists, call Google Photos Create Album to create one and use the returned id.

6. Upload the bytes to Google Photos with Upload Bytes to get an upload token, then call Batch Create Media Items with that token to create the media item in the user's library. Then call Add Media Items to Album to attach the new media item to the target album.

7. Generate a short caption (one or two sentences) for the new media item using the surrounding Slack message text plus the image content itself. Keep it factual and friendly, and include who posted it if the user's display name is available. Persist the caption via Update Media Item on the new media item id.

8. By default, post a tiny confirmation back in the original Slack thread using Slack Bot Send a Message with thread_ts set to the source message. The reply should mention the album it was filed into and include the album's productUrl as a link. Make this final Slack reply easy to toggle off via a workflow input named replyInThread (default true).

Other requirements:

- Treat the Slack channel watch list as a workflow input (array of channel ids or channel names). Reject events from channels not on the list silently.

- Honor Google Photos' app-created-data scope: this workflow is the uploader, so it can read, organize, and caption everything it puts in. Do not try to read or modify pre-existing albums or media that this workflow did not create.

- If a file in the event is a multi-file share (Slack can attach several files to one message), process each one independently against the same rules.

- If Google Photos rate-limits (HTTP 429), back off and retry. Call Batch Create Media Items serially per user as the Google Photos docs require.

- If anything fails after the file is uploaded but before it's added to the album or captioned, log enough context that I can re-run just the missing steps without re-uploading bytes.

Related prompts

Explore more prompts
A brand asset library your marketing team actually searchesTurn Mailjet email clicks into ranked HubSpot follow-upsClean out the Looker dashboards and Looks nobody opensLiveKit live operations console for room moderationWake up dormant Keap leads with a researched reasonLiveChat coverage board for planning next week's shiftsPhone routing control panel for LiveKit voice agentsLinkedIn Ads budget pacing dashboard for every client accountGive your team Looker numbers without buying more seatsPause marketing emails to escalated customers, then restore them