Approval Workflow

Get every post reviewed by the right person, automatically.

Invite teammates and clients as approvers. Flag a post and it pauses for sign-off — your reviewers get an email, leave comments, and approve or reject from one screen. No more "did you see my draft?" Slack threads.

Approvals inbox
A
Alice (Reviewer)

Posts waiting on you

4 total · sorted by urgency

Q2 launch announcement

New product line launching Monday. Tagging legal for the comp claim wording.

Acmein 2h
Awaiting review

Webinar reminder · Tuesday 2pm

Last chance to register for the Tuesday session. CTA goes to the lp.

BetaMon 9am
Approved

Pricing update post

Post explaining the new tier structure. Needs a softer hook than the draft.

Acmepast · fix copy
Rejected

Product teaser carousel

Three-slide carousel teasing the new feature drop. Visuals attached.

Gammain 6h
Awaiting review

Reviewing

Q2 launch announcement

Big news — our Q2 product line ships Monday. The new pricing tier means more value across the board, and the early-access list opens at 9am Pacific.

Discussion2
A
Alice · 5m

Make sure the link points to /q2 not /pricing.

J
Jan (Owner) · just now

Fixed — should be good to go.

Your decision

Approving lets this post publish at the scheduled time.

Optional decision note...
Approve & schedule
Reject

How It Works

Get started in minutes with a simple, intuitive workflow.

1

Invite an Approver

Add a teammate or client by email from Settings → Team Approvals. They click the invite, sign in (no subscription needed for approver-only accounts), and start reviewing. Scope them to all your posts or to specific clients only.

Invited

[email protected] — All clients
[email protected] — Acme only
[email protected] — pending
2 / 3
2

Flag the Post for Review

In the composer, tick "Require approval before publishing" when scheduling. The post is paused — it won't go live until an approver signs off. Your reviewers receive an email instantly with a link to review.

Awaiting Review

Q2 launch · Threads · Awaiting
Webinar reminder · LinkedIn · Approved
Pricing post · X · Rejected
3

Reviewers Approve or Reject

Approvers see the full post — caption, full-size media, platform icons, scheduled time — in their /approvals inbox. They approve, reject with a note, or open a discussion thread to ask questions. Whichever approver decides first wins.

This Week

Approved
78%
Rejected
14%
Pending
8%
4

Auto-Publish on Approval

Approved posts publish at their scheduled time — no manual nudge needed. Rejected posts stay paused with the reviewer's note attached. Edit the content and approval bounces back to pending automatically.

Going Live

Mon 9:00 AMQ2 launch · approved
Tue 2:00 PMBrand teaser · approved
Wed 10:00 AMHolding · awaiting review

Key Benefits

Everything you need to work faster and smarter.

Per-Client Scoping

An agency reviewer for Acme should never see Beta's drafts. Scope each approver to specific client profiles, and they only see and decide on posts tagged with those clients.

Real Discussion Threads

Comments aren't just one-line notes. Have a back-and-forth on each post with avatars, edit-your-own messages, and email notifications for the other party. Both owner and reviewer see the full thread.

Edit-Reset Behavior

Reject a post for a typo? When the owner fixes it, the post automatically bounces back to pending so reviewers see the change. The previous note is preserved as context for the next review.

Sticky Approval Requirement

Once a post has gone through review, the approval requirement can't be silently removed to bypass it. The gate stays on for the lifetime of the post — no "approve then sneak in changes" loophole.

Auto-Expiration Safety Net

If no approver acts before the scheduled time, the post is held back instead of published un-reviewed. Owners get an email so they can edit and reschedule — content never goes out un-vetted.

No Subscription for Approvers

Your approvers don't need to pay for SocialCal. They get a free, scoped account that lets them review and discuss your posts — perfect for clients, contractors, and one-off reviewers.

SocialCal vs Slack DMs + Google Docs

See how SocialCal stacks up against the alternative.

Feature
SocialCal
Slack DMs + Google Docs
Reviewer sees the actual post (caption + media + platform)
Discussion thread attached to the post
Lost in Slack
Approve / reject decision logged
Per-client reviewer scoping
Auto-publish on approval
Manual
Decision-note required on reject
Edit-resets-approval (no stale sign-offs)
No subscription required for reviewers
N/A
Audit trail across edits + decisions

The Approver Experience: One Inbox, Every Decision

Section 1 of 4

APPROVALS INBOX3 pending· 1 approved · 1 rejectedYouQ2 launch announcementAcmeAwaitingWebinar reminderBetaAwaitingPricing postAcmeRejectedProduct teaser carouselGammaApprovedHoliday contentBetaAwaiting

Your reviewers don't learn a new tool. They go to /approvals and see every post waiting on them, sorted by urgency. Each card shows the full caption (HTML stripped to plain text), the full-size media with native video controls, the target platforms, and the scheduled time with a relative urgency indicator like "Publishes in 2h" or — in red — "Past scheduled time · approve soon."

Review happens on one screen. The post sits on the left; on the right, a discussion thread for back-and-forth and a decision panel with Approve / Reject and an optional note field. No tab juggling, no separate detail pages, no "where do I click?" Just read, optionally chat, decide.

Approvers without a SocialCal subscription land directly on /approvals after sign-in — the dashboard isn't in their way. Their account is free and scoped to exactly what they need.

My client's legal team approves posts in under 30 seconds now. Used to take 3 days of email back-and-forth.

Per-Client Scoping for Agencies

Section 2 of 4

REVIEWER SCOPINGAPPROVERSCLIENTSAAliceAll clientsBBobAcme onlyCCarolBeta onlyAcme CorpBeta StudioGamma CoRLS-ENFORCEDCarol can't see Acme posts even by URL.Bob can't see Beta posts. Alice sees all.

Running social for multiple brands means each brand's reviewer should see only their brand's drafts. SocialCal's approver model has a nullable client_id on each invite — set it to "all clients" for an internal manager who reviews everything, or scope it to specific client profiles for a brand's own reviewer.

The scoping is enforced at the database row level (Postgres RLS), not just hidden in the UI. An approver scoped to Client A literally cannot read posts for Client B, even by URL manipulation. Cross-tenant data isolation is the default, not an opt-in.

When you flag a post tagged with Client A, the awaiting-approval email fans out only to approvers covering Client A — owner-level approvers (all clients) plus client-A-specific approvers. Reviewers for other clients aren't notified and don't see the post in their inbox.

We onboard new clients with their own reviewer in 2 minutes. They literally can't see other clients' content.

Discussion + Decision Notes: Two Distinct Surfaces

Section 3 of 4

DISCUSSION + DECISION💬 DISCUSSION3AAlice (Reviewer)· 5mMake sure the link points to /q2 not…JJan (Owner)· 2mFixed — should be good now.AAlice (Reviewer)· just nowPerfect, approving 👍Your decisionStored on the post for the audit trail.Optional decision note...✓ Approve & schedule✕ Reject

Approval workflows die when the conversation lives somewhere else. SocialCal puts the discussion thread directly on the post — alongside the media and the decision buttons — so questions and answers happen in context.

Threads support multiple comments per post, with avatars and relative timestamps ("5m ago"). You can edit and delete your own messages — others can't. The other party (owner or approver) gets an email when a new comment lands, so the conversation flows even when no one is watching the dashboard.

Decision notes are deliberately separate from the discussion. When an approver clicks Reject, a note is required so the owner knows what to fix. When they click Approve, the note is optional ("LGTM" or "looks great, but watch the link in line 2"). Notes appear in the decision email and on the post forever, so the audit trail stays clean.

Calendar + Scheduled Posts: Status at a Glance

Section 4 of 4

CALENDAR · MAY 2026MTWTFSS123appr45pend6789appr1011rejt1213pend14151617appr1819expr202122pend232425appr262728STATUS LEGENDAwaiting reviewApprovedRejectedExpiredClick any badge to open the discussion.

Approval state is visible everywhere posts are listed — not just on a buried admin page. The scheduled-posts list shows a colored corner badge on each post's media: amber for awaiting review, green for approved, red for rejected, gray for expired. The calendar view's daily modal mirrors the same convention.

Click any badge and you land on the post's discussion page — the same view your approvers see, with status, decision notes, the previous reviewer's note (if reset-on-edit fired), and the full discussion thread. Edit-and-resubmit is one click away when a post is rejected or expired.

No separate "approval queue" tab to monitor on the owner side. The state is woven into the same calendar and list views you already use.

I open the calendar Monday morning and see exactly which posts are stuck on someone's sign-off. No more checking three different tools.

Who It's For

Built for professionals who take social media seriously.

Marketing Agencies

Set up a per-client reviewer pool. Acme's brand manager signs off on Acme posts; Beta's legal team reviews Beta's. Cross-client visibility is impossible by design — each reviewer sees only their client's work.

Agency owner managing 5+ client brands

In-House Marketing Teams

A copywriter drafts; a director or brand lead approves. Sticky approval requirements prevent accidental bypass. The discussion thread keeps revision feedback in context — no "see my Slack DM" lost-feedback problem.

Marketing manager with a copywriter and a brand director

Solo Founders with Investors / Boards

Run important launch posts past your co-founder, board chair, or PR advisor before they go live. They get a free approver account, sign off in 30 seconds from their inbox, no extra tooling.

Founder running social with light external review

Regulated Industries

Healthcare, finance, and legal content needs sign-off. Every approval is logged with timestamps, the approver's identity, and any note. Decision history is preserved across edits via the previous-note carry-over.

Compliance-minded brand needing an audit trail

Team Workflows FAQ

Common questions about Team Workflows in SocialCal

No. Approver-only accounts are free. They get access to /approvals (their inbox) and the post discussion pages, but not the full dashboard. Perfect for clients, contractors, and one-off reviewers — no licensing friction.
The first one wins. The second sees a soft notice ("Already approved by Alice — your decision wasn't recorded") and the post drops out of their queue. Decisions are recorded exactly once, by exactly one approver. No duplicate state.
Today, any one approver of the eligible pool can sign off (1-of-N model). Multi-stage workflows (Editor → Manager → Brand) and N-of-M required-approvals are on the roadmap; reach out if you need them.
The post is held back, not published. Five minutes after the scheduled time passes without a decision, the post is marked "expired without review" and the owner receives an email. The owner can edit and reschedule — at which point approval bounces back to pending automatically.
No, by design. Once a post has gone through any review, the approval requirement is sticky — you can't turn it off to sneak in changes. To skip approval, cancel the post and create a new one without the toggle. The audit trail stays clean.
Each invite is a 64-character random hex token, single-use. The accept flow validates that the email the approver signs in with matches the email the invite was sent to. Tokens are nulled out after acceptance. Lost invites can't be reused.
Yes. When you invite, choose "Specific clients only" and pick which client profiles they cover. Database-level row security (Postgres RLS) ensures they literally cannot read posts for clients outside their scope — not even by URL manipulation.
When you edit content, approval automatically resets to pending and the previous reviewer's rejection note is preserved as context. Your reviewer sees the new version with an amber "Previous reviewer note: [their last reason]" callout, so they have the history to re-decide against.

Ready to Level Up Your Social Strategy?

Join thousands of creators and brands who save hours every week with SocialCal.

Start Your 7-Day Trial

7-day trial · Cancel anytime