Workflows
Bulk ops: clone a brand in 5s, import 90 posts in one CSV
Project cloning, CSV import, bulk schedule, Cmd+K palette — the four primitives that turn “50 brands” from a nightmare into a Tuesday afternoon.
A single-post composer works well at the scale of one or two brands. At higher counts — ten, fifty — most operator time is spent setting up new projects, scheduling content in batches, and switching between projects. Postcrow has four primitives for that scale.
Project cloning
When you start a new brand whose tone is close to an existing one, cloning is faster than starting from scratch. In Settings → All projects, hover any project and click the copy icon. Enter a name for the new project.
The clone inherits:
- Timezone
- Description
- Brand voice paragraph
- Brand voice samples (so you can re-train later)
It does not inherit:
- Social accounts (each brand has its own OAuth tokens)
- Posts (each project has its own publishing history)
The clone is created in the same transaction as the new project. From the API, it's a POST to /api/projects with clone_from: <source_id>.
CSV import
The /app/import page accepts a CSV upload or paste. The format is intentionally simple to round-trip with Google Sheets, Notion exports, or any spreadsheet tool:
content,platforms,scheduled_at,media_urls
"Post body","linkedin,twitter","2026-12-01T09:00:00Z",
"Another post","linkedin","2026-12-08T09:00:00Z",
"Draft post (no schedule)","facebook,instagram",,Header columns can be in any order. Required: content and platforms. Optional: scheduled_at (ISO-8601 — omit to save as draft) and media_urls (comma-separated URLs).
Each row is validated. The import response returns counts of created vs skipped, with per-row reasons (empty content, unknown platform, past schedule date). The upper limit is 1,000 rows per import.
A common workflow: maintain an annual content plan in a sheet, export quarterly, drop the CSV in Postcrow, and the next three months are scheduled.
Bulk schedule from MCP
From the MCP server, postcrow_bulk_schedule takes an array of posts and a date range. The tool spaces the posts evenly across the range and returns counts:
# From an MCP-connected client
> Schedule these 52 LinkedIn posts on project BrandA, one per Monday
> 9am Paris for the next year. The drafts are in this gist: <url>
# The client:
# 1. Fetches the gist
# 2. Computes 52 Monday timestamps
# 3. Calls postcrow_bulk_schedule(project_id, posts[], from, to)Posts whose scheduled time falls in the past are skipped and reported. The maximum is 200 posts per call.
Command palette
The Cmd+K (or Ctrl+K on Linux/Windows) palette opens anywhere in the app and fuzzy-finds projects by name. It also jumps to any of the app pages — Overview, Posts, Calendar, Accounts, Analytics, AI, Bulk import, Activity, Settings.
Arrow keys to navigate. Enter to select. Escape to close.
Combined workflow: onboarding a new brand
The four primitives chain naturally. Onboarding a new brand end-to-end, including a starter content calendar and auto-recycle, can be done in under 10 minutes:
- Cmd+K → switch to an existing brand whose voice is close to the new one.
- Settings → hover its row → Clone. Name the new project.
- Cmd+K → switch to the new project.
- Settings → Brand voice → paste 5 brand-specific samples → Re-train.
/app/import→ upload a CSV of starter posts → Import.- Settings → Auto-recycle → enable.
The new brand now has a queue, a voice, and a worker that keeps the queue alive.
Summary
Each primitive is small on its own. Together they reduce per-brand setup time by an order of magnitude, which is what makes operating ten or more brands as a single person tractable.