All posts

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.

May 25, 2026·5 min read

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:

  1. Cmd+K → switch to an existing brand whose voice is close to the new one.
  2. Settings → hover its row → Clone. Name the new project.
  3. Cmd+K → switch to the new project.
  4. Settings → Brand voice → paste 5 brand-specific samples → Re-train.
  5. /app/import → upload a CSV of starter posts → Import.
  6. 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.