Weekly Adyen payment collection digest for HubSpot deals
Every Monday at 9am, check every HubSpot deal with an outstanding Adyen payment link and post a Slack digest with paid totals, expired links, and the top unpaid deals.
Every Monday at 9am, run a payment collection digest so RevOps can see which outstanding Adyen payment links actually got paid last week, which ones are still active, and which ones expired without a payment. Trigger this on a cron schedule, weekly on Monday at 09:00 in the account's local timezone.
Step 1. Pull the working set from HubSpot. Use HubSpot Search Deals to fetch every deal where the custom property 'Adyen Payment Link ID' is set AND either the 'Payment Status' property is not yet 'Paid' OR the deal was updated in the last 30 days (so paid-this-week deals still get included in the roll-up). Ask for the fields the digest will need: deal id, deal name, amount, currency, close date, owner, HubSpot deal URL, the Adyen payment link id, and the current payment status.
Step 2. For every deal in that working set, call Adyen Get Payment Link with the stored payment link id to read the current link status. Adyen returns one of: active, expired, completed, paymentPending, paymentFailed. The link's underlying 'reference' is the HubSpot deal id from the sibling 'send payment link' workflow, which is how the two systems join up — trust that reference if the payment link id on the HubSpot deal is missing or stale. If a payment link cannot be found in Adyen (deleted, wrong id), note it in a separate 'needs attention' bucket rather than dropping it silently.
Step 3. Group the results into four buckets, using both the Adyen status and the deal's updated timestamp: (a) Paid last week — Adyen status is 'completed' AND the deal was updated within the last 7 days. (b) Still active — Adyen status is 'active' or 'paymentPending'. (c) Expired without payment — Adyen status is 'expired' or 'paymentFailed'. (d) Expiring soon — Adyen status is 'active' and the link's expiresAt is within the next 7 days. Track totals per bucket (deal count and summed amount by currency).
Step 4. Compose the digest and post it to the #revenue Slack channel with Slack Send a Message. The digest should be a narrative rollup, not a raw table — this is what makes it agent-flavoured. Structure it like this:
Header line with the week's totals across all buckets.
A single rolled-up line for paid deals in the form 'EUR 24,300 collected across 18 deals last week' — do NOT list them individually. If multiple currencies are in play, one rolled-up line per currency.
A bulleted list of expired links that need a fresh nudge, each linking back to the HubSpot deal (use the deal URL) with the deal name, amount, and owner.
A 'top three unpaid' callout — the three largest still-active or expiring-soon deals by amount, each with a HubSpot deal link and how many days the link has been open.
An 'expiring soon' short list so the team can chase before the link dies.
A 'needs attention' section for any payment link ids that could not be resolved in Adyen, so someone can investigate.
Step 5 (optional but on by default). For each deal where the Adyen status has diverged from the HubSpot 'Payment Status' property, call HubSpot Update Deal to write the current status back — map 'completed' to 'Paid', 'expired' to 'Expired', 'paymentFailed' to 'Failed', 'paymentPending' to 'Pending', 'active' to 'Active'. This keeps the CRM in sync without anyone editing records by hand. If the user prefers a read-only digest, they can turn this step off.
Formatting rules for the Slack message: use Slack mrkdwn (angle-bracket links like <https://app.hubspot.com/...|Acme renewal>), currency-format amounts with thousands separators and the currency code, keep the whole message under ~40 lines, and always link back to the HubSpot deal — never dump raw ids. If a bucket is empty, say so with one line ('No expired links this week') rather than omitting the section, so the digest reads the same every Monday.
Additional information
What does this prompt do?
- Reviews every HubSpot deal that has an Adyen payment link attached and checks whether the customer has paid, is still deciding, or let the link expire.
- Groups the results into paid last week, still active, expired without payment, and expiring soon so RevOps sees the whole collection pipeline at a glance.
- Posts a narrative digest to your #revenue Slack channel with a rolled-up total for paid deals, a bulleted list of expired links to nudge again, and a callout of the top three unpaid deals by amount.
- Optionally writes the current payment status back to each HubSpot deal so the CRM stays in sync with what actually happened.
What do I need to use this?
- An Adyen account that issues the payment links your team sends to customers.
- A HubSpot workspace where deals track the Adyen payment link and a payment status field.
- A Slack workspace with a #revenue (or similar) channel the digest can post into.
How can I customize it?
- Change the schedule — daily first thing, twice a week, or on the last business day of the month instead of Monday morning.
- Pick a different Slack channel or route the digest to a private RevOps channel, and adjust the top-unpaid callout from three deals to five or ten.
- Turn the HubSpot write-back on or off, or extend it to move deals into a different pipeline stage when payment lands.
Frequently asked questions
Do I need Adyen and HubSpot on paid plans?
How does the workflow know which HubSpot deal each Adyen payment link belongs to?
Will it spam Slack if we have hundreds of open deals?
Can it update HubSpot when a customer pays?
What if a payment link expired without being paid?
Related templates
Stop chasing payment links across HubSpot and Adyen.
Get one clean Monday-morning digest of what got paid, what expired, and which deals need a nudge, straight to Slack.