Skip to content
postpeg
HTTP today · app coming soon

Social media posting from Zapier

Publish and schedule posts to X, LinkedIn, Instagram and seven more networks from a Zap with Webhooks by Zapier: exact Custom Request settings, idempotency and example Zaps.

What you can automate

  • Publish every new RSS item to X and LinkedIn

    1. 1RSS by Zapier: New Item in Feed
    2. 2Webhooks by Zapier: Custom Request
  • Schedule a Google Sheets row as a post

    Send the date column as scheduled_at in ISO 8601.

    1. 1Google Sheets: New Spreadsheet Row
    2. 2Webhooks by Zapier: Custom Request (POST /v1/posts)
    3. 3Google Sheets: Update Spreadsheet Row with the post id
  • Post new Shopify products to Instagram

    Instagram needs media: map the product image URL into media.

    1. 1Shopify: New Product
    2. 2Webhooks by Zapier: Custom Request with media
  • Alert Slack when a post fails

    Poll status=partially_published the same way to catch posts that failed on some accounts.

    1. 1Webhooks by Zapier: Retrieve Poll on /v1/posts?status=failed
    2. 2Slack: Send Channel Message
  • Reply to comments with an AI step

    Keep a person in the loop: replies are public.

    1. 1Webhooks by Zapier: Retrieve Poll on /v1/posts/{id}/comments
    2. 2ChatGPT: draft a reply
    3. 3Human approval, then Custom Request: POST /v1/posts/{id}/comments

Set it up with the Webhooks by Zapier → Custom Request

Webhooks by Zapier is not on Zapier’s Free plan; it needs Professional, Team or Enterprise. Zapier’s docs for this step.

  1. Create an API key

    Start the trial, connect the accounts you want to post to, and create a key under API keys. It’s shown once. Store it in Zapier’s credentials rather than typing it into every step.

  2. Find your account ids

    Add a Webhooks by Zapier → Custom Request step and run it once. Copy the id of each account from data; they stay the same even when an account is reconnected.

    List accounts: GET /v1/accounts
    FieldValue
    MethodGET
    URLhttps://api.postpeg.com/v1/accounts
    HeadersAuthorization | Bearer pp_live_your_key
  3. Publish or schedule a post

    Add another Webhooks by Zapier → Custom Request step. Add "scheduled_at" (ISO 8601, e.g. 2026-10-01T09:00:00Z) to schedule instead of publishing now, and "media": [{ "url": "https://…", "type": "image" }] for images or video; Instagram, TikTok, YouTube and Pinterest need media.

    Create a post: POST /v1/posts
    FieldValue
    MethodPOST
    URLhttps://api.postpeg.com/v1/posts
    DataThe body below
    HeadersAuthorization | Bearer pp_live_your_key Content-Type | application/json Idempotency-Key | (map the trigger item’s ID)
    Body
    {
      "account_ids": ["acc_mfz1x0k27d4q8vbn3c5s0a1p9e", "acc_mfz1y4r9h2c6t0wqk8e3m7ld5f"],
      "content": "(map the text here)"
    }
  4. Check each account’s status

    The response is the post, with one target per account. Publishing happens in the background within seconds; GET /v1/posts/{id} later shows each target published with its url, or failed with the error.

    Response · 201 Created
    {
      "id": "post_mfz2k3v8q1w5e9r4t7y0u2i6o3",
      "content": "Scheduled posts now retry on their own when a network has a bad minute. Changelog: https://example.com/changelog #buildinpublic",
      "media": [
        {
          "url": "https://example.com/changelog.png",
          "type": "image"
        }
      ],
      "platform_options": {},
      "status": "scheduled",
      "scheduled_at": "2026-10-01T09:00:00.000Z",
      "targets": [
        {
          "account_id": "acc_mfz1x0k27d4q8vbn3c5s0a1p9e",
          "platform": "x",
          "status": "pending",
          "platform_post_id": null,
          "url": null,
          "error": null,
          "attempts": 0,
          "published_at": null
        },
        {
          "account_id": "acc_mfz1y4r9h2c6t0wqk8e3m7ld5f",
          "platform": "linkedin",
          "status": "pending",
          "platform_post_id": null,
          "url": null,
          "error": null,
          "attempts": 0,
          "published_at": null
        },
        {
          "account_id": "acc_mfz20b5n1s8f4j7xv2p9r6hu1c",
          "platform": "instagram",
          "status": "pending",
          "platform_post_id": null,
          "url": null,
          "error": null,
          "attempts": 0,
          "published_at": null
        }
      ],
      "created_at": "2026-09-24T14:02:11.418Z"
    }

The postpeg app for Zapier

Coming soon

A native Zapier app with actions for publishing, accounts, analytics and comments is built and waiting to be published. It isn’t installable yet. When it is, you’ll add it with: Search for postpeg when you add a step to a Zap.. The HTTP setup above keeps working either way.

Pagination, retries and idempotency

  • Pagination. One request is one page (up to limit=100 posts). To watch for new items, use the Webhooks by Zapier Retrieve Poll trigger: URL /v1/posts?status=failed, Key data, the same Authorization header; it deduplicates on id.
  • Idempotency. Send an Idempotency-Key header on POST /v1/posts, comment replies and messages, built from something unique to the item (up to 255 characters). If Zapier retries the step, the same key returns the original post with 200 instead of publishing twice.
  • Retries. postpeg retries a failed network in the background (up to 5 attempts), so don’t re-post from the workflow when a target is still pending. Retry the request itself only on 429, 500 or a timeout, with the same idempotency key.
  • Lists. GET /v1/posts is newest first, limit up to 100, filterable by status (failed, partially_published, scheduled…).

Errors and rate limits

Errors are JSON with a stable code and a detail written for people: route on the code, show the detail. The ones a workflow meets most:

400 invalid_request
The body, query or a platform rule is wrong. Read issues: it lists every problem with its path. Fix the request; retrying it unchanged fails the same way.
401 unauthorized
The key is missing, malformed or revoked. Send Authorization: Bearer pp_live_… with a key from the dashboard.
402 subscription_required
The trial or subscription has ended. Only GET /v1/me and /v1/billing still work: start a checkout to continue.
429 rate_limited
Too many requests, from your key or on the network’s side. Wait retry_after seconds (also in the Retry-After header), then retry.
502 upstream_error
The network failed or refused the request; detail carries its reason. Retry later if it didn’t respond; fix the request if it refused.

Each key can make 120 requests a minute, and at most 30 of them can be writes (publishing, scheduling, replying, sending, cancelling). A burst past that gets 429 rate_limited with Retry-After: 60: wait, then retry with the same idempotency key. Details in Authentication → Rate limits and Errors.

Questions

Is there a postpeg app for Zapier?
It’s built and waiting to be published, so it isn’t installable yet. Everything on this page uses Zapier’s own HTTP step, which reaches every postpeg endpoint today with the same key, and keeps working after the app ships.
Do I need a paid Zapier plan?
For the HTTP route, yes: Webhooks by Zapier needs a Professional, Team or Enterprise plan. postpeg is billed separately, per connected account; publishing, analytics, comments and DMs are unlimited on every paid plan.
Where do I get the account ids?
Call GET /v1/accounts once (the second table on this page) and copy the id of each account you want to post to. They don’t change, even when an account is reconnected.
What if the workflow retries a step?
Send an Idempotency-Key header built from something unique to the item, like an RSS guid or a sheet row number. A repeat with the same key returns the original post with 200 and publishes nothing new.
How fast can a workflow call postpeg?
120 requests a minute per key, of which 30 can be writes such as publishing or replying. A loop that goes faster gets 429 rate_limited with Retry-After: 60; wait that long and retry. See Authentication → Rate limits.
Can I test without posting for real?
Not yet: pp_test_ keys currently publish for real, like live keys. Test against an account you own, or schedule the post a day ahead and cancel it with DELETE /v1/posts/{id}.

Other integrations

Send your first post in a few minutes

The 7-day trial has every feature and 3 connected accounts, with no card. The quickstart takes you from a key to a published post.