Screen new Stripe customers for sanctions and PEP hits at signup

The moment a new customer is created in Stripe, run a KYC sanctions and PEP check, write the verdict back to Stripe, and alert compliance in Slack on any credible hit.

Agentic Task
StripeOpenSanctionsSlackFinanceOperationsOnboarding AutomationNotifications & Alerts
PromptCreate

Build an agent workflow that runs a KYC sanctions and PEP screen on every brand-new Stripe customer, then records the outcome back in Stripe and pings a compliance Slack channel on credible hits.

Trigger: a Stripe webhook subscribed to the customer.created event. Fire once per new customer.

When the workflow runs, do the following:

1. Read the new customer's name, email, and any address or business fields from the webhook payload. If the payload is missing fields you need (for example the name or address), call Stripe Retrieve Customer with the customer id to fill them in.

2. Call OpenSanctions Match Entities against a KYC-appropriate collection. Prefer the sanctions plus peps collection if the user has it available, otherwise use the default collection. Screen a Person entity for the customer, using name and any known aliases, country, and date-of-birth-like fields you can infer. If the customer looks like a company (business name, no personal name), also screen a Company entity with the business name and address. Use the default matching algorithm and a sensible threshold around 0.7 to 0.75.

3. Decide a verdict for each customer: clean (no results above threshold), review needed (weak-to-mid match, common name, or single low-confidence hit), or flagged (strong match on a sanctioned or PEP entity).

4. On flagged or review needed, send a Slack message via Send a Message to a configurable compliance channel. Keep it concise. Include the customer name and Stripe customer id, the matched entity name and OpenSanctions id, the match score, the reason for the flag (sanctions list name, PEP category, etc.), and a link to the OpenSanctions profile so a reviewer can act. Label review-needed clearly as review needed rather than blocked.

5. Regardless of verdict, call Stripe Update Customer to write the following metadata on the customer so downstream systems and audits can see the check ran: sanctions_screening_status (clean, review_needed, or flagged), sanctions_screening_score (the top match score, or 0 if no hits), and sanctions_screening_checked_at (an ISO 8601 timestamp).

Guidance to bake into the agent instructions: clean checks should update Stripe metadata silently and never post to Slack, so the compliance channel does not get spammed. Borderline matches (weak scores or very common names) should still notify Slack but be framed as review needed, not as a block. The workflow itself never blocks payments or cancels the customer; it only records the outcome and asks a human to decide.

Integrations to use: Stripe (customer.created webhook trigger, Update Customer, Retrieve Customer if needed), OpenSanctions (Match Entities), Slack (Send a Message).

Additional information

What does this prompt do?
  • Watches Stripe for new customers and kicks off a KYC screen the moment one is created, so compliance never has to remember to run it.
  • Checks each new customer's name, email, and any business or address details against global sanctions and politically exposed person lists.
  • Posts a clear alert in your compliance Slack channel on any credible hit, with the matched entity, match score, reason, and a link so a reviewer can act fast.
  • Writes the screening status, score, and timestamp back to the Stripe customer so downstream teams and audits can see the check ran.
What do I need to use this?
  • A Stripe account with permission to receive webhooks and update customer records.
  • An OpenSanctions API key for sanctions, PEP, and watchlist screening.
  • A Slack workspace and a channel where your compliance team wants alerts posted.
How can I customize it?
  • Change which lists you screen against, for example sanctions and PEPs only, or the full default collection.
  • Adjust the match threshold so borderline scores are flagged for review rather than treated as clean or blocked.
  • Swap the Slack channel, or route different risk levels to different channels or reviewers.

Frequently asked questions

When does the screening actually run?
As soon as Stripe tells us a new customer was created. There is no schedule or polling delay, so the check happens during onboarding rather than hours or days later.
What happens if a new customer matches a sanctions or PEP list?
The workflow posts an alert in your compliance Slack channel with the customer name, the matched entity, the score, the reason, and a link to the profile. It also writes the flagged status back to the Stripe customer so your team has a paper trail.
What if the match is weak or the name is very common?
Borderline hits are flagged as review needed instead of blocked. Your reviewer sees them in Slack, decides, and clears or escalates them. Clean checks update the Stripe customer silently so the channel does not get spammed.
Does this block or refund the customer automatically?
No. The workflow records the outcome and notifies your team, but it does not cancel payments or block accounts on its own. A human still owns the decision.
Can I use this for existing customers too, not just new ones?
This prompt focuses on new signups. For ongoing coverage, pair it with a periodic rescreen of your active customer list so you catch people who get added to a list after they signed up.

Catch risky customers before their first charge clears.

Connect Stripe, OpenSanctions, and Slack once, and every new customer gets a KYC screen automatically, with the verdict written back to Stripe.