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 ZapierCustom 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 →