Post with Zapier

Post to social media
with Zapier.

Webhooks by Zapier can call the same publish API as curl. Prefer a proper JSON body (profile + text) over comma-separated platform strings so addressing matches the docs.

Get started free →

Free tier. No card · one API for every network · full MCP access

In shortWebhooks by Zapier POST → /v1/posts with JSON { text, profile }. One action fans out; inspect the returned targets.

When this guide is for you

The rest of your stack is in Zapier and you need multi-network publish without a custom Zapier app.

Before you start

Same setup the docs quickstart uses. Do this once:

  1. Sign up at app.postlake.dev and verify your email (unlocks free credits).
  2. On Channels, create a profile (e.g. my-brand) and connect at least one account. Bluesky is the fastest first channel: no app review. Instagram/TikTok/Facebook need each platform's review before API posting.
  3. Account menu → API Keys → create a key (sk_live_…). It shows once; treat it like a password.

Step by step in Zapier

Configure once, then reuse on every run. Same request body as the docs, this is just how Zapier sends it.

  1. Add Webhooks by Zapier → Custom Request (or POST) to https://api.postlake.dev/v1/posts.
  2. Headers: Authorization = Bearer sk_live_…, Content-Type = application/json, optional Idempotency-Key.
  3. Data / raw body as JSON: {"text":"{{trigger text}}","profile":"my-brand"}. To filter networks, add "platforms":["bluesky","linkedin"] as a JSON array, not a comma-separated string.
  4. Map trigger fields into text. Test the step and open the response to confirm each targets[] entry.
  5. For later publish, include scheduledAt as UTC (trailing Z) or a naive local time plus timezone.

Read the response (don't skip this)

You get one Post with an overall state and a targets[] array. One entry per account. Always check each target; partial success is normal.

{
  "id": "post_a1b2c3",
  "state": "partial",
  "targets": [
    { "platform": "bluesky",  "state": "published", "url": "https://bsky.app/…" },
    { "platform": "linkedin", "state": "failed",
      "error": { "type": "invalid_request", "message": "…", "retryable": false } }
  ]
}

Where the post goes

Same rules as the docs. Pick one addressing style:

See Publishing: where to post.

Do more (same API)

Pitfalls specific to this path

Prefer an assistant over Zapier code? Point it at MCP (https://api.postlake.dev/mcp). Prefer the dashboard? Use Quickstart → No code.

Common questions

How do I post to social media with Zapier?

Webhooks by Zapier POST to https://api.postlake.dev/v1/posts with Authorization: Bearer and JSON { text, profile }. PostLake publishes to connected accounts on that profile.

Do I need a PostLake Zapier integration?

No. Webhooks by Zapier is enough. One REST endpoint covers every network you have connected.

Can I schedule through Zapier?

Yes, include scheduledAt (UTC, or a naive local time plus timezone) in the webhook JSON. Credits charge when it fires. See docs → Scheduling.

Go deeper in the docs

These guides stay short on purpose. Canonical behaviour lives here:

Also: Media · Errors · MCP · Analytics

Related guides

All guides · Full docs · llms.txt · Markdown

Stuck? The docs are the source of truth, start at Publishing.

Open the dashboard →