The moment it happens
Post each PayPal payment to Slack
Every completed payment shows up in Slack with who paid and how much.
- Runs
- The moment it happens
- Apps
- PayPal
- AI
- Not needed
- Access
- REST app (client credentials)
Send this to your assistant
Create a ClickRuntime automation: when I receive a PayPal payment, post the payer's name, email and amount to #sales in Slack.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
The satisfying part of running a small shop is seeing orders come in, and PayPal makes you work to see it. The emails go to one person, the mobile notifications are inconsistent, and the rest of the team learns about sales only when someone mentions them. For a team packing orders or answering customer questions, that gap means slower fulfillment and no sense of momentum.
Each time PayPal sends a payment event, the request is verified so only real events count, and a message with the sale is posted to Slack. Everyone in the channel sees the sale as it happens, which gives fulfillment a prompt to start packing and gives the team a visible tally through the day.
It fits product sellers, creators selling downloads and anyone who wants a shared feed of sales instead of private emails.
What you get out of it
Fulfillment starts sooner
When the person packing orders sees a sale in Slack the moment it is paid, shipping is prepared earlier. Faster dispatch means happier customers and fewer where-is-my-order messages. Customers feel that speed in their delivery times.
The whole team sees the shop working
A running feed of sales builds energy and keeps people connected to the customer. After a quiet week, a busy afternoon of notifications reminds the team why the work matters.
Verification keeps fake sales out
Checking the PayPal webhook signature stops forged requests from posting made-up sales. When the team reads a notification, they can trust that real money actually moved. Money-related messages deserve that level of care before anyone reacts.
Catch odd activity early
A sudden burst of tiny payments or an unusually large one stands out in a channel. You can look into possible card testing or a pricing mistake while the payments are still fresh.
A simple log of every payment
Slack keeps the history, so you can search for a payment by amount or name later. It is a quick lookup tool when a customer asks whether their payment was received.
How it works
What happens, step by step
When a PayPal payment completes, PayPal tells ClickRuntime straight away.
ClickRuntime checks with PayPal that the message is genuine.
A message goes to your #sales Slack channel with the payer's name, email and the amount.
Before it runs live
- Connect PayPal
- Paste your automation's link into the other app's webhook settings
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Act only on the items that match your own rules, and skip the rest
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Slack
- Combine it with other PayPal steps into one automation
Under the hood
The code that runs this automation
from clickruntime import on_event, credentials, http, notify
API = "https://api-m.paypal.com"
def paypal_headers():
resp = http.post(f"{API}/v1/oauth2/token", data={"grant_type": "client_credentials"},
auth=(credentials.secret("PAYPAL_CLIENT_ID"), credentials.secret("PAYPAL_CLIENT_SECRET")))
resp.raise_for_status()
return {"Authorization": f"Bearer {resp.json()['access_token']}"}
@on_event
def handle(event):
body = event.json
if body.get("event_type") != "PAYMENT.CAPTURE.COMPLETED":
return {"posted": False}
headers = paypal_headers()
check = http.post(f"{API}/v1/notifications/verify-webhook-signature", headers=headers, json={
"auth_algo": event.header("paypal-auth-algo"), "cert_url": event.header("paypal-cert-url"),
"transmission_id": event.header("paypal-transmission-id"),
"transmission_sig": event.header("paypal-transmission-sig"),
"transmission_time": event.header("paypal-transmission-time"),
"webhook_id": credentials.secret("PAYPAL_WEBHOOK_ID"), "webhook_event": body}).json()
if check.get("verification_status") != "SUCCESS":
return {"posted": False, "reason": "signature"}
capture = body["resource"]
order_id = capture["supplementary_data"]["related_ids"]["order_id"]
payer = http.get(f"{API}/v2/checkout/orders/{order_id}", headers=headers).json()["payer"]
amount = capture["amount"]
notify.slack(f"π° PayPal payment: {payer['name']['given_name']} {payer['name']['surname']} "
f"({payer['email_address']}), {amount['currency_code']} {amount['value']}", channel="#sales")
return {"posted": True, "capture": capture["id"]}FAQ
Common questions
Does it post refunds and subscription payments too?
How do I stop notifications for very small payments?
What does the webhook verification check?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Hear about denied PayPal payments
When a payment is denied, you know straight away and can contact the buyer.
See how it worksGet dispute details before the deadline
A new dispute lands in your inbox with its reason, amount and the date you must reply by.
See how it worksKnow when a PayPal subscriber cancels
Each cancellation is posted so you can follow up while the customer still remembers you.
See how it worksKeep exploring
Set up βPost each PayPal payment to Slackβ from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.