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
- 1RSS by Zapier: New Item in Feed
- 2Webhooks by Zapier: Custom Request
Schedule a Google Sheets row as a post
Send the date column as
scheduled_atin ISO 8601.- 1Google Sheets: New Spreadsheet Row
- 2Webhooks by Zapier: Custom Request (POST /v1/posts)
- 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.- 1Shopify: New Product
- 2Webhooks by Zapier: Custom Request with media
Alert Slack when a post fails
Poll
status=partially_publishedthe same way to catch posts that failed on some accounts.- 1Webhooks by Zapier: Retrieve Poll on /v1/posts?status=failed
- 2Slack: Send Channel Message
Reply to comments with an AI step
Keep a person in the loop: replies are public.
- 1Webhooks by Zapier: Retrieve Poll on /v1/posts/{id}/comments
- 2ChatGPT: draft a reply
- 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.
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.
Find your account ids
Add a Webhooks by Zapier → Custom Request step and run it once. Copy the
idof each account fromdata; they stay the same even when an account is reconnected.List accounts: GET /v1/accounts Field Value Method GET URL https://api.postpeg.com/v1/accounts Headers Authorization | Bearer pp_live_your_key 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 Field Value Method POST URL https://api.postpeg.com/v1/posts Data The body below Headers Authorization | 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)" }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 targetpublishedwith itsurl, orfailedwith theerror.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
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=100posts). To watch for new items, use the Webhooks by Zapier Retrieve Poll trigger: URL/v1/posts?status=failed, Keydata, the same Authorization header; it deduplicates onid. - Idempotency. Send an
Idempotency-Keyheader onPOST /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 with200instead 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 on429,500or a timeout, with the same idempotency key. - Lists.
GET /v1/postsis newest first,limitup to 100, filterable bystatus(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/meand/v1/billingstill work: start a checkout to continue. - 429 rate_limited
- Too many requests, from your key or on the network’s side. Wait
retry_afterseconds (also in theRetry-Afterheader), then retry. - 502 upstream_error
- The network failed or refused the request;
detailcarries 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/accountsonce (the second table on this page) and copy theidof 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-Keyheader 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 with200and 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_limitedwithRetry-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 withDELETE /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.