Pause Klaviyo emails to customers with open Zendesk complaints

Every hour, spot real complaints and cancellation requests in Zendesk, then quietly pause those customers in Klaviyo until their issue is solved.

Agentic Task
ZendeskKlaviyoSlackCustomer SupportMarketingNotifications & AlertsFeedback TriageData Sync
PromptCreate

Every hour on a cron, I want an agent to protect Zendesk-active customers from tone-deaf Klaviyo marketing sends. This is CS-driven marketing hygiene, and the judgement call about what counts as a real complaint vs. a neutral question is the reason this needs to be an agent and not straight code.

Trigger: cron, every hour.

Step 1 — Find newly upset customers in Zendesk. Use Zendesk Search Tickets to pull tickets that were opened or updated in the last 24 hours. Filter down to ones that look like real complaints or escalations: high or urgent priority, or wording that signals a refund request, a cancellation, a broken product, angry sentiment, or 'cannot use' / 'doesn't work'. Skip neutral how-to questions and calm feature questions — a happy customer asking how to export a report should not be pulled off marketing. Collect the requester email for each qualifying ticket, and remember the ticket URL and a one-line reason (the priority, or the phrase that flagged it) so we can show it in the Slack recap.

Step 2 — Suppress those customers in Klaviyo. For each qualifying requester email, look them up with Klaviyo Get Profiles. If the profile exists and is currently marketable (on any marketing list, not already suppressed), do two things: call Klaviyo Add Profiles to List to put them on a dedicated list called 'Support-Active Suppression' (create the list the first time the workflow runs if it doesn't already exist), and call Klaviyo Suppress Profiles (Bulk) so no campaigns or flows go out while their issue is open. If the profile doesn't exist in Klaviyo at all, skip it silently — there's nothing to suppress.

Step 3 — Reinstate customers whose issues are resolved. In the same run, pull the current members of the 'Support-Active Suppression' list from Klaviyo. For each of those profiles, re-check their Zendesk tickets. If every one of that customer's tickets has been solved or closed for 48 hours or more (i.e. no open, pending, or on-hold tickets, and the most recent solved/closed timestamp is at least 48 hours ago), call Klaviyo Unsuppress Profiles (Bulk) and Klaviyo Remove Profiles from List so they start receiving marketing again. If the customer still has any active ticket, or was resolved less than 48 hours ago, leave them on the list.

Step 4 — Post a Slack summary to #cs-ops. Use Slack Send a Message to post a single recap message. Include three sections: 'Paused this run' (customer email, ticket link, one-line reason), 'Reinstated this run' (customer email, most recent resolved ticket), and 'Flagged for human review' (edge cases like: profile has multiple emails and it's unclear which to suppress, ticket wording is borderline, customer is on multiple suppression-eligible lists, or Zendesk returned an error for a specific requester). If there is nothing in a section, say 'None'. Keep the message tight — this is an ops channel, not a report.

Constraints: never suppress a profile that is not currently marketable (already suppressed, already unsubscribed, or not on any list) — that would be a no-op that clutters the recap. Never unsuppress a profile the workflow did not originally add to the 'Support-Active Suppression' list; use the list as the source of truth for who this workflow is managing. Batch the Klaviyo bulk calls where possible to stay under rate limits.

Additional information

What does this prompt do?
  • Every hour, scans Zendesk for tickets opened or updated in the last day that look like real complaints, cancellation requests, refund threats, or angry customers — and skips neutral how-to questions.
  • Finds each of those customers in Klaviyo and adds them to a suppression list so no marketing campaigns or flows go out while their issue is open.
  • Re-checks anyone already on the suppression list, and once their tickets have been solved or closed for 48 hours, quietly turns marketing back on.
  • Posts a recap to your CS ops Slack channel with who was paused, who was reinstated, and anything the agent flagged for a human to look at.
What do I need to use this?
  • A Zendesk account with permission to search tickets.
  • A Klaviyo account with permission to manage profiles, lists, and suppression.
  • A Slack workspace and a channel for the recap (for example, #cs-ops).
  • A dedicated Klaviyo list to hold currently paused customers (the workflow can create one called Support-Active Suppression on first run).
How can I customize it?
  • Change how often it runs. Hourly is the default; you can tighten it to every 30 minutes during a launch or slow it to twice a day.
  • Tune what counts as a real complaint. Adjust the priority levels, keywords (refund, cancel, broken, angry), or sentiment threshold the agent uses to decide.
  • Adjust the reinstatement window. 48 hours after a ticket is solved is the default, but some teams prefer 24 or 72.
  • Swap the Slack channel, and optionally tag specific people when the agent flags something for human review.

Frequently asked questions

What kinds of Zendesk tickets trigger a pause?
High or urgent priority tickets, and any ticket with wording that signals a refund, cancellation, broken product, or angry customer. Neutral how-to questions are ignored on purpose, so a happy customer who is just asking a question still receives your marketing.
Does this actually stop scheduled campaigns and flows from going out?
Yes. Suppressed profiles are held back from all email marketing in Klaviyo, including in-flight flows and upcoming campaigns, until the workflow reinstates them.
How does the workflow decide when to turn marketing back on?
Each run, it re-checks tickets for everyone currently on the suppression list. If all of that customer's tickets have been solved or closed for 48 hours or more, the workflow unsuppresses them and removes them from the list.
Will it catch customers who file a ticket right before a campaign send?
The workflow runs every hour, so there is a small window between a ticket being opened and the profile being paused. If you send campaigns very frequently, increase the cadence to every 15 or 30 minutes.
Do paused customers know they were removed from marketing?
No. Suppression is silent. They still receive transactional emails from Klaviyo, and only marketing campaigns and flows are held back.

Stop marketing to customers while they are angry.

Connect Zendesk, Klaviyo, and Slack once, and Geni runs this every hour to keep your campaigns from landing on complaint tickets.