Early bird discounts live! Claim your offer

Zapier

Automate Subscriby workflows with Zapier. 106 event triggers, 45 write actions, 45 searches — every REST route on api.subscriby.net and every event in the webhook catalog. Currently available as an invite-only integration.

The Subscriby Zapier app exposes 106 instant triggers, 45 write actions, and 45 searches — full parity with the live api.subscriby.net/v1 surface plus the complete WebhookEvent catalog.

Install

The Subscriby Zapier integration is currently invite-only and is not yet publicly listed in the Zapier App Directory. To request access, contact the Subscriby team. Once you receive an invite link, click it to connect your account. During the OAuth-less connection step Zapier asks for an API token — mint one at app.subscriby.net/settings/tokens with the abilities listed per trigger / action below.

The Subscriby Zapier app is undergoing testing and validation before its public Zapier listing. Access is invite-only during this period.

Production tokens start with sbt_live_; non-production (staging, local) tokens start with sbt_test_. Both work — Subscriby rejects tokens from the wrong environment automatically.

Triggers — 106 webhook events

Grouped by family. Every trigger uses the REST Hook pattern: on Zap activation Zapier calls POST /v1/webhook-subscriptions, on deactivation it calls the matching DELETE. All triggers additionally implement a polling fallback (performList) against /v1/webhook-events so the Zap editor can show a sample even before any live event has fired.

Every trigger additionally requires webhook-endpoint:manage on the token so Zapier can create and delete the underlying webhook endpoints.

How triggers work

You pick a trigger in Zapier

Example: New Subscription. Zapier's performSubscribe calls:

POST https://api.subscriby.net/v1/webhook-subscriptions
Authorization: Bearer sbt_live_<id>_<secret>
Idempotency-Key: <zap-scoped-uuid>
Content-Type: application/json

{
  "name": "Zapier — New Subscription",
  "url": "<zapier-inbound-url>",
  "events": ["subscription.created"]
}

Subscriby registers the endpoint

The response includes { data: { id }, secret }. Zapier stores both — the secret powers SB-Signature verification on every inbound event.

Event fires inside Subscriby

Any matching event enqueues a delivery to the Zapier inbound URL. Zapier verifies the signature, decodes the envelope, and hands data.* to your Zap.

You turn the Zap off

Zapier calls DELETE /v1/webhook-subscriptions/{id} with a matching idempotency key. The endpoint is removed server-side.

Actions — 45

All writes auto-inject a fresh Idempotency-Key header per call — retries are safe.

Project (5)

  • create_projectPOST /v1/projects
  • update_projectPATCH /v1/projects/{project}
  • archive_projectPOST /v1/projects/{project}/archive
  • restore_projectPOST /v1/projects/{project}/restore
  • delete_projectDELETE /v1/projects/{project}

Plan (5)

  • create_planPOST /v1/projects/{project}/plans
  • update_planPATCH /v1/projects/{project}/plans/{plan}
  • publish_planPOST /v1/projects/{project}/plans/{plan}/publish
  • unpublish_planPOST /v1/projects/{project}/plans/{plan}/unpublish
  • delete_planDELETE /v1/projects/{project}/plans/{plan}

Plan Kind — a breaking change in 3.0.0

Create Plan and Update Plan now open with a Plan Kind dropdown, and the fields below it change to match:

Plan KindSells
Recurring SubscriptionAccess that begins at payment and renews on a cycle.
Time-Limited PassOne dated access window per purchase.
Pass SeriesA slate of other pass plans' windows, sold once — a season ticket.

Only the fields your chosen kind accepts are shown, mirroring the API, which refuses a block belonging to another kind rather than ignoring it.

Existing Zaps need their fields re-mapped

The field keys behind these two actions changed in 3.0.0. A Zap that set Billing Cycle still sets one — the field moved into the subscription kind's group — but the mapping has to be re-made by whoever built the Zap. No other trigger, action or search changed its keys.

Building a Pass Series

A series points at windows that already exist on your pass plans, so the order matters:

  1. Find Pass Windows — the new search. Returns each window's ID, its local range, whether it is still on sale and how many people hold it. Filter by plan, status or date range.
  2. Create Plan with Plan Kind → Pass Series, pasting those IDs into Pass Window IDs.
  3. Optionally add Automatic Inclusion Rules. A rule describes windows rather than naming them and keeps matching after the save: a window scheduled later is added to the slate and granted to everyone already holding the series, at no charge. Handpicked IDs never grow on their own — the two compose.

Resource IDs is optional on a series and means a lounge the holder keeps for the whole span; each window already grants its own plan's resources.

Subscription + Member (4)

  • cancel_subscriptionPOST /v1/subscriptions/{subscription}/cancel
  • ban_memberPOST /v1/projects/{project}/members/{member}/ban
  • unban_memberPOST /v1/projects/{project}/members/{member}/unban
  • kick_memberPOST /v1/projects/{project}/members/{member}/kick

Support conversation (3)

  • reply_support_conversationPOST /v1/support/conversations/{conversation}/messages (set Private Note to record a private team note instead of messaging the member)
  • resolve_support_conversationPOST /v1/support/conversations/{conversation}/resolve
  • assign_support_conversationPOST /v1/support/conversations/{conversation}/assign (leave the assignee empty to clear an assignment)

Resource + Access code (5)

  • create_resourcePOST /v1/projects/{project}/resources
  • unlink_resourcePOST /v1/projects/{project}/resources/{resource}/unlink
  • delete_resourceDELETE /v1/projects/{project}/resources/{resource}
  • bulk_generate_access_codesPOST /v1/projects/{project}/plans/{plan}/access-codes/bulk-generate
  • delete_access_codeDELETE /v1/projects/{project}/plans/{plan}/access-codes/{access_code}

Webhook endpoint + Token (5)

  • create_webhook_endpointPOST /v1/webhook-endpoints (the response surfaces the one-time plaintext secret)
  • delete_webhook_endpointDELETE /v1/webhook-endpoints/{endpoint}
  • rotate_webhook_secretPOST /v1/webhook-endpoints/{endpoint}/rotate-secret
  • test_webhook_endpointPOST /v1/webhook-endpoints/{endpoint}/test
  • revoke_tokenDELETE /v1/tokens/{token}

Broadcast (1)

  • broadcast_messagePOST /v1/projects/{project}/broadcasts

Sends one Telegram message to a segment of a project's members. The send is queued, so the action returns the audience it resolved and the recipient count — not a delivery result. Pair it with the Broadcast Completed trigger to log sent and failed.

Test action sends for real

A broadcast cannot be recalled, and Audience defaults to All Users. Clicking Test action while building the Zap sends a real message to every member with a linked chat, not a sample. Set the audience — and, if you want it, the plan — before you test, or point the test at a project with no members.

Choosing the audience

Three fields compose. Audience picks a segment, Narrow to a Plan optionally restricts it to one plan, and Running Out Within (Days) sets the horizon that Expiring Soon reads.

GroupSegments
Member statusAll Users, Customers Only, Trialing Users, Leads, Churned Users
Subscription stateExpiring Soon, Cancelled Still Inside Their Period, Paused Subscriptions, Trialing Without a Card
PassesAll Active Pass Holders, All Active Pass Holders Not in Queue, and the two single-window forms

Narrow to a Plan composes rather than replaces: Customers Only plus a plan reaches people paying for it right now, Churned Users plus a plan reaches people who held it and left. The plan and the state always describe the same subscription, so somebody paying for Silver who once trialled Gold is not a Gold customer.

The API refuses a plan on Leads, who never subscribed, and on the pass segments, whose plan is implied by the window — a 422 rather than a silently widened send.

An auto-renewing subscription is never Expiring Soon

A subscription's end date is rewritten to the new period end every time it renews, so a date inside the horizon describes the next invoice, not an expiry. Counting it would sweep every monthly subscriber into the segment once a month. A member appears only once their access genuinely lapses — renewal is off, or the plan does not renew at all.

The two single-window pass segments additionally require a Pass Window ID; the API refuses the send without one rather than quietly addressing nobody.

Subscription lifecycle (3)

  • pause_subscriptionPOST /v1/subscriptions/{subscription}/pause (suspends resource access; billing continues)
  • unpause_subscriptionPOST /v1/subscriptions/{subscription}/unpause (restores access and issues fresh invite links — the ones revoked at pause do not come back)
  • reactivate_subscriptionPOST /v1/subscriptions/{subscription}/reactivate (calls off a scheduled cancellation; Stripe only, other providers error)

Team + RBAC (14)

  • create_teamPOST /v1/teams
  • update_teamPATCH /v1/teams/{team}
  • delete_teamDELETE /v1/teams/{team}
  • invite_team_memberPOST /v1/teams/{team}/members (addressed by email, because the invitee may not have a Subscriby account yet; the role field takes a role code that must already exist on the team)
  • update_team_member_rolePATCH /v1/teams/{team}/members/{user}/role
  • remove_team_memberDELETE /v1/teams/{team}/members/{user}
  • cancel_team_invitationDELETE /v1/teams/{team}/invitations/{invitation}
  • create_rolePOST /v1/roles
  • update_rolePATCH /v1/roles/{role}
  • delete_roleDELETE /v1/roles/{role}
  • create_groupPOST /v1/groups
  • update_groupPATCH /v1/groups/{group}
  • delete_groupDELETE /v1/groups/{group}
  • sync_group_membersPUT /v1/groups/{group}/members

Two of these replace rather than merge

Permissions replace. Sending the permissions field on Update Role or Update Group makes that list the entire set. Omit it to leave existing permissions alone.

Sync Group Members is a sync, not an add. Anyone missing from the list is removed from the group, and an empty list empties it. Read the group first if you mean to append.

Creating and re-permissioning need the Growth plan. Deleting and removing do not — a creator whose plan lapsed still has collaborators attached and has to be able to take access away.

Searches — 45

Return a single object (wrapped in [x]) or an array. Use them in dynamic dropdowns, cross-Zap lookups, or as standalone fetch steps.

Core resources

  • list_projects, get_project, find_project_by_handle
  • list_plans, find_plan_by_name, find_plan_by_id
  • list_subscriptions, find_subscription_by_id
  • list_members, find_member_by_id, find_subscriber_by_telegram_id
  • list_resources, get_resource
  • list_access_codes, preview_access_code_cost
  • list_support_conversations, find_support_conversation, list_support_messages

Infrastructure

  • list_payment_methods, get_payment_method
  • list_webhook_endpoints, list_webhook_deliveries
  • list_tokens, get_token

Teams + RBAC

  • list_teams, get_team, get_current_team
  • list_team_members, get_team_member
  • list_roles, get_role
  • list_groups, get_group

Ops + distribution

  • list_activity (by subject_type + subject_id)
  • get_bot_status, get_bot_link, get_portal_url, get_deep_link

Analytics

All require dashboard:read except list_transactions which uses project-subscription:view-any.

  • get_dashboard_metrics — MRR, active subscribers, churn, revenue trend
  • get_earnings_report — gross / fees / net, timeseries by day / week / month
  • get_subscriber_analytics — signups, cancellations, churn rate, trial conversion
  • get_transaction_breakdown — USD totals grouped by plan, payment_provider, currency, or project
  • get_plan_performance — per-plan active subs, revenue, average ticket
  • list_transactions — keyset-paginated transaction list

Recipes

Prebuilt Zap ideas combining Subscriby triggers with common downstream apps. Swap the destination for whatever CRM, spreadsheet, or messaging tool fits your stack.

Revenue ops

New subscriber → welcome email

  • Trigger: subscription.created on project X.
  • Action: Mailjet / Resend / Postmark → send a "Welcome" email using the subscriber's email field. Most members have no email — they join through a bot and are never asked for one. billing_email is often the only address on file, and it is unverified, so treat it as identification rather than a consented mailing address.

New subscriber → CRM upsert

  • Trigger: subscription.created.
  • Action: HubSpot / Pipedrive / Attio → create-or-update contact; tag with plan name + initial MRR.

Churn → Slack alert

  • Trigger: subscription.cancelled or subscription.expired.
  • Action: Slack → post in #churn-watch with subscriber handle, plan, and days-subscribed.

Failed payment → Slack + follow-up email

  • Trigger: payment.failed.
  • Action 1: Slack → post in #revenue-ops.
  • Action 2: Delay 12 hours, then run the find_subscription_by_id search. If the next retry hasn't cleared the state, fire a Mailjet reminder with a one-tap link to update the payment method.

Past due → automated drip

  • Trigger: subscription.past_due.
  • Action: Mailjet sequence — day 1 "payment failed", day 3 "reminder", day 7 "last chance".

Trial converting → personal nudge

  • Trigger: subscription.trial_converting.
  • Action: Slack DM to the creator with a link to the subscriber's profile so they can intervene before the trial flips to paid.

Access codes

Access-code batch generated → Airtable export

  • Trigger: access_code.generated.
  • Action: Airtable → append a row with batch metadata (plan, count, expiry).

Access-code redeemed → Google Sheet log

  • Trigger: access_code.redeemed.
  • Action: Google Sheets → append a row with subscriber id, plan id, masked code, timestamp.

Gift campaign → generate + DM

  • Trigger: New row in an Airtable "Influencer List".
  • Action 1: bulk_generate_access_codes (1 code, export_type=file).
  • Action 2: get_deep_link with access_code=<code> to build a one-tap bot link.
  • Action 3: Slack DM / email the influencer with the link.

Team + audit

Member banned → Telegram ops chat

  • Trigger: member.banned.
  • Action: Telegram → send to an ops chat with reason + the ban-issuing admin's name.

Team role changed → audit trail

  • Trigger: team.member.role_changed.
  • Action: Notion database → append an entry with old/new role, actor, timestamp.

Suspicious activity → auto-revoke token

  • Trigger: list_activity search on an hourly schedule, filter for actor_kind = 'mcp' entries touching high-value resources.
  • Action: If count exceeds your threshold, call revoke_token on the flagged token id and post the incident to Slack.

Billing

Grace-period warning → creator heads-up

  • Trigger: billing.grace_period_warning.
  • Action: Email the account owner with a link to /settings/billing before the grace window elapses.

Account locked → ops escalation

  • Trigger: billing.account_locked.
  • Action 1: PagerDuty → incident.
  • Action 2: Slack → post in #oncall with the tier cycle and last successful payment date.

Tier upgraded → CRM annotation + welcome pack

  • Trigger: billing.tier_upgraded.
  • Action 1: HubSpot → update lifecycle stage to "paid".
  • Action 2: Loom or Notion → send the creator the tier-specific onboarding playbook.

Analytics & reporting

Weekly revenue digest

  • Trigger: Schedule — every Monday 09:00.
  • Action 1: get_dashboard_metrics with period=7d.
  • Action 2: get_transaction_breakdown with dimension=payment_provider, period=7d.
  • Action 3: Email / Slack a digest combining both.

Plan performance → Google Sheet

  • Trigger: Schedule — daily.
  • Action 1: get_plan_performance for each active project.
  • Action 2: Google Sheets → append rows (one per plan) for the dashboard you hand to finance.

Month-end close → earnings statement

  • Trigger: Schedule — 1st of each month 06:00.
  • Action 1: get_earnings_report with granularity=day for the previous month.
  • Action 2: Generate a PDF via DocRaptor and email it to accounting@yourco.

Integrations hygiene

Onboarding checklist

  • Trigger: member.trial_joined.
  • Action 1: HubSpot → start "Trial onboarding" sequence.
  • Action 2: Delay 3 days.
  • Action 3: find_member_by_id to check status; if still trialing, send a reminder.

Test webhook endpoint on deploy

  • Trigger: GitHub Actions → new release published.
  • Action: test_webhook_endpoint against every active endpoint in your team. Post a summary in Slack.

Rotate webhook secret → secret manager

  • Trigger: Schedule — every 90 days.
  • Action 1: rotate_webhook_secret on the endpoint.
  • Action 2: Write the fresh secret into HashiCorp Vault / AWS Secrets Manager / 1Password.
  • Action 3: Slack → notify #platform that the rotation landed.

Troubleshooting

SymptomLikely causeFix
Test-auth returns 401 AUTHENTICATION_REQUIREDToken expired or revokedMint a new token
Test-auth returns 403 TOKEN_MISSING_ABILITYToken lacks team:viewMint with team:view plus the specific abilities each trigger / action / search needs
Test-auth returns 404 TENANT_MISMATCHToken has no scope:team:<uuid> entryMint from the dashboard — the UI always appends the scope automatically
performSubscribe returns 422 VALIDATION_FAILED on events.*.inEvent name typo / outdatedRebuild the Zap; the Zapier app is kept in lockstep with the webhook catalog
Zap receives no eventsEndpoint auto-disabled after consecutive failuresRe-enable from /settings/webhooks or use the test_webhook_endpoint action for a diagnostic ping
Analytics search returns 400 VALIDATION_FAILED on dimensionget_transaction_breakdown requires plan / payment_provider / currency / projectPick one of the four

Source

The Zapier app is maintained at github.com/envigo-innovations/subscriby-zapier. PRs welcome. See the CHANGELOG for per-version event / action / search deltas.

How is this guide?

On this page

Subscriby is a product designed by you — for you.

No boardroom full of executives deciding what we ships next. Our roadmap always shaped by you with your feedback.

Share feedback or a request