# Client approval desk for every social post you schedule

> Open one queue each morning, see every post waiting on a client with its real per platform preview, and approve, edit, or reject it in place.

- Workflow type: app
- Services: bundle.social, Slack Bot, Google Sheets
- Categories: Marketing, Operations
- Published: 2026-08-16

## What it does

- Builds a single review queue from every social post still sitting in draft or waiting on client review, for whichever client you pick.
- Shows each card the way it will actually publish, with the LinkedIn version next to the Instagram version and the images attached to each one.
- Lets a reviewer approve, ask for changes with a comment, or reject, and any caption edit typed into the card is saved back to the post itself so the approved wording is the wording that goes out.
- Sends a short notice to the client's Slack channel and adds a row to your audit spreadsheet for every decision, with who decided what and when.
- Sorts the queue by how long a post has been waiting on the client and flags anything whose publish time is coming up while it is still unapproved.

## What you'll need

- A bundle.social account with your client teams and their social accounts already connected
- Posts saved as drafts or moved into review in bundle.social, so the queue has something to show
- A Slack workspace where the app can post into each client's channel
- A Google Sheet to hold the audit trail

## Prompt

I run social media for several clients and I want a client approval desk I open every morning. Build me an app whose home screen is a single review queue of every bundle.social post still sitting in draft or review status, so nothing publishes until someone has approved the exact wording.

Build the queue with the bundle.social Get post list operation, filtered by the team I pick and by the DRAFT and REVIEW statuses. A client switcher at the top selects the team, populated by Get list of teams, and Get team tells me which social accounts that client has connected so I know which platforms a post can target. Sort the queue by how many days a post has been waiting on the client, longest wait first, and put a clear flag on any post whose scheduled time is coming up soon while it is still unapproved. Track waiting time by storing the moment a post first appears in the queue, falling back to the post's own created date for posts that were already in review the first time I open the app.

Each queue item is a card that shows the post the way it will actually publish. bundle.social posts carry a shared payload plus a per platform data object for overrides, so show every platform variant separately and side by side, the LinkedIn version next to the Instagram version, rather than collapsing them into one caption. Media is referenced by upload id rather than a raw URL, so resolve the attached images and video through the Get upload list operation and show the thumbnails on the card beside the copy they belong to.

Every platform variant has its own approve, request changes, and reject controls, and its caption is editable in place. When a reviewer edits copy on a card, write it straight back to bundle.social with the Update post operation, changing the shared content or that platform's override as appropriate, so the version that goes out is the version that was approved rather than a caption someone re-pasted out of an email thread. Requesting changes requires a short comment, which stays pinned to that variant on the card.

Approving the last outstanding platform variant on a post schedules it: use Update post to set its target time and move it out of draft. Requesting changes leaves the post in the queue with the comment attached and its waiting clock still running, so it surfaces again the next morning. Rejecting removes the post with the Delete post operation, behind a confirmation step.

Every decision posts a short notice to that client's Slack channel through Slack Bot using the Send a Message operation: which post, which platform, what was decided, who decided it, and the comment if there was one. Let me map each client team to its Slack channel on a settings screen, picking from the workspace with List Channels.

Every decision also appends an audit row to a Google Sheet with the Append Values operation, carrying the post, the platform variant, the reviewer, the timestamp, the decision, and what text changed, including the previous caption and the new one whenever an edit was made. Compliance teams want that trail generated for them rather than typed up afterwards, so write it automatically on every approval, change request, and rejection with no extra step for the reviewer. Let me set the audit spreadsheet per client on the same settings screen.

Store approval state per post and per platform variant inside the app, since bundle.social has no field for it: which variants are approved, who approved each one, the outstanding change requests, and the full decision history for the card. Record the reviewer as whoever is signed in to the app. Show a header count of how many posts are waiting and how many are at risk of missing their scheduled time, so I can tell at a glance whether the morning is clear.

## How to customize

- Choose which statuses land in the queue, for example drafts only, or drafts plus anything already marked for review
- Set how close a publish time has to be before the app flags a post as at risk of missing its slot
- Pick the Slack channel and the audit spreadsheet separately for each client
- Decide whether a rejection removes the post outright or only records the decision

## FAQ

### Does the client need a login to approve posts?

No. The desk is opened by whoever runs approvals on your side, usually the account manager holding the client feedback. Each decision is recorded against the person signed in, and the client sees the outcome as a notice in their Slack channel.

### What happens to a post when someone requests changes?

It stays in the queue with the comment attached and its waiting clock still running, so it comes back up the next morning until every platform version has been approved.

### Can I edit the caption for one platform without changing the others?

Yes. Each platform version is shown and edited separately, so you can shorten the Instagram caption without touching the LinkedIn wording.

### Does approving actually schedule the post?

Once the last outstanding platform version is approved, the post is scheduled for its target time. Until then it stays in the queue.

### What ends up in the audit spreadsheet?

One row per decision, with the post, the reviewer, the time, the decision, and what text changed. Compliance gets the trail without anyone writing it up by hand.

Use this prompt in General Input: https://www.generalinput.com/prompts/client-approval-desk-for-every-social-post-you-schedule