Works with all AI agents

Connect your AI agent

Choose your AI agent and connect in seconds.

Add to Claude

Works on every Claude plan, including free. Full Claude guide

  1. 1

    Add to Claude

    One click from Claude’s connector directory.

  2. 2

    Sign up or sign in

    Takes seconds, then you’re sent straight back.

  3. 3

    Ask Claude

    “Plan and schedule my posts for next week.”

PostEverywhere Zapier Guide

Connect Zapier to PostEverywhere to publish posts from any of 7,000+ apps. Includes the working raw-JSON setup, the array-as-string gotcha, and the exact action and field formats.

Zapier doesn't have a native PostEverywhere integration yet, but you can connect any of Zapier's 7,000+ apps to PostEverywhere through the Webhooks by Zapier action. This guide covers the exact setup that works, plus three pitfalls that cause silent failures.

Quick context

PostEverywhere has a REST API. Zapier sends data to it via a webhook. The most common reason these Zaps fail is that Zapier's default form-style action serializes JSON arrays as strings, but our API requires real arrays. Use Custom Request (raw JSON), not POST (form-fields). Details below.

What you need before building the Zap

  1. Get an API key: Sign in to PostEverywhere, open Developers, and click Create key. Copy it (you only see it once). Keys start with pe_live_.
  2. Find your account IDs: On the same Developers page, the Your account IDs card lists every connected social account with a copyable integer ID. You'll use these in account_ids.
  3. Connect at least one social account in PostEverywhere before testing: the API rejects requests for accounts you haven't connected.

Step 1: Add the Webhooks by Zapier action

In your Zap, add an action and search for Webhooks by Zapier. Choose Custom Request, not POST. Custom Request lets you send a raw JSON body, which is what PostEverywhere expects.

The form-style POST action wraps every field as a separate URL-encoded form field and stringifies arrays: both will break the request.

Step 2: Configure the custom request

Field Value
Method POST
URL https://app.posteverywhere.ai/api/v1/posts
Data Pass-Through? false
Data Leave empty (we use the JSON body below)
Unflatten no
Headers Content-Type: application/json
Authorization: Bearer pe_live_yourkeyhere
Wrap Request in Array no

Then paste this as the Data (JSON / Raw) body: replace the account IDs with your real ones from the dashboard:

{
  "content": "Hello from Zapier!",
  "account_ids": [6409, 6413],
  "scheduled_for": "2026-06-04T18:30:00Z"
}

When you map Zapier trigger fields into the body, keep account_ids as a real JSON array in your body: don't wrap the array in quotes. The array must contain integers, not strings.

Step 3: Test the Zap

Click Test action. A successful response looks like this:

{
  "data": {
    "post_id": "post_abc123",
    "status": "scheduled",
    "scheduled_for": "2026-06-04T18:30:00Z",
    "account_ids": [6409, 6413]
  },
  "error": null,
  "meta": { "request_id": "a1b2c3d4", "timestamp": "2026-06-04T01:23:45Z" }
}

If you get a 400 error, see the troubleshooting section below: the message in the error body almost always tells you exactly what to fix.

Three pitfalls behind most Zapier failures

Pitfall 1: account_ids arrives as a string

400 account_ids_required
"account_ids is required and must be a non-empty array."

Why: You used the POST action (form-fields) or your trigger app surfaced the IDs as a string like "[6409, 6413]". Our API rejects strings: account_ids must be a real JSON array.

Fix: Use the Custom Request action and put the array in the raw JSON body as [6409, 6413]: no surrounding quotes. If you're computing the array dynamically (e.g. from a spreadsheet column), use a Code by Zapier step to JSON.parse(input) the value before the webhook step.

Pitfall 2: scheduled_for is not ISO 8601 UTC

400 invalid_timezone

or

400 invalid_datetime
"Invalid scheduled_for value. Must be a valid ISO 8601 datetime in UTC"
(a date in the past returns 400 past_schedule_time)

Why: Zapier formats datetimes in lots of ways depending on the source. 2026-06-04 6:30 PM CST, 06/04/2026, or Jun 4 will all fail. The API needs strict ISO 8601 in UTC.

Fix: Use Zapier's Formatter → Date / Time → Format step to convert your datetime to YYYY-MM-DDTHH:mm:ss[Z]. Example: 2026-06-04T18:30:00Z. To schedule for a specific local time, convert it to UTC first.

Pitfall 3: Your Filter step blocks the run but the webhook still fires

If you see a 400 with a body that contains _zap_data_filter_summary, the request was sent without your content fields: the filter blocked the run but the webhook step ran on the filter metadata, not your actual post data.

Fix: Add the Filter step before the webhook step in your Zap (not after) so a failed filter prevents the webhook entirely.

Stale account IDs after a reconnect

If you reconnect a social account in PostEverywhere (e.g. when its token expires), it sometimes gets a new integer ID, even if the username didn't change.

Symptom: Your Zap starts returning 400 invalid_accounts: No valid social accounts found for the given account_ids.

Fix: Re-check the Your account IDs card on the Developers page in PostEverywhere and update the array in your Zapier action. (Or add a step that calls GET /v1/accounts first and uses the IDs from that response, slower but auto-heals.)

Where to go after your first Zap

If you get stuck, contact support@posteverywhere.ai with the request body and the full error response: those two are usually enough to spot the issue.

Related: the API quick start · the CLI, if you prefer a terminal · webhooks for real-time status · social media automation with PostEverywhere