Weekly churn risk writeback from Qlik to Salesforce

Every Monday, pull at risk accounts from a Qlik dashboard, flag them in Salesforce, and post a prioritized outreach list in Slack.

Agentic Task
Qlik CloudSalesforceSlackSalesOperationsNotifications & AlertsData SyncAI Reports

Build me an agent workflow that runs every Monday at 8am in my timezone and turns a Qlik Cloud churn risk dashboard into Salesforce writebacks and one grouped Slack message. The trigger is a cron schedule.

Step 1. Read the dashboard from Qlik Cloud. Use Qlik Cloud's Get Visualization Data on a configured customer health or churn risk chart. I will provide the Qlik app id and the visualization (object) id at setup. The chart returns one row per account with these columns, which I will map at setup time: account name, account external id used as the Salesforce upsert key, risk score (numeric), last activity date, ARR (numeric), and CSM owner. Treat the column mapping as configuration so I can change column names without editing the workflow.

Step 2. Identify at risk accounts. An account is at risk when its risk score is greater than or equal to a configurable threshold (default 70 on a 0 to 100 scale, but ask me at setup). Also skip any account that is already flagged as At Risk in Salesforce, so we do not write back or alert twice for the same account. Make the skip behavior a toggle so I can switch it to re-flag every week if I want recurring reminders.

Step 3. Write back to Salesforce. For each at risk account, call Salesforce's Create or Update Account (Upsert) using the account external id from Qlik as the upsert key. Set the configurable health status field (default field name Health_Status__c, picklist value At Risk; let me override both at setup) and append a short note to a configurable notes or description field explaining the signal. The note should be one short sentence derived from the row, for example "Risk score 82, last activity 41 days ago, ARR $120k" or "Usage trend down, no activity in 30 days". Do not overwrite existing notes; append with a timestamp.

Step 4. Post one grouped Slack message. Use Slack's Send a Message to post to a configurable channel (default #revenue, with #cs as a common alternative). The message should: state how many accounts crossed the threshold this week, list each at risk account with its CSM owner, risk score, ARR, and a one-line signal, and present a suggested outreach order sorted by a blend of ARR and risk score so high-value, high-risk accounts are on top. Let me configure whether to @mention CSM owners and whether to also send each owner a DM with just their accounts. If there are zero at risk accounts, post a short all-clear message instead of skipping.

Setup questions the workflow should ask me on first run: Qlik tenant hostname and API key, Qlik app id, Qlik visualization id, the column mapping for account name, account external id, risk score, last activity, ARR, and CSM owner, the risk threshold, the Salesforce health status field and value, the Salesforce notes field, whether to skip already-flagged accounts, the Slack channel, and whether to @mention owners.

Quality bar: this is the canonical Qlik active intelligence pattern (analytics in, action out). Be defensive about empty rows, missing columns, and accounts that exist in Qlik but not in Salesforce (log those separately in the Slack message under a short "could not match" section instead of failing the run). Run it once end to end on a small sample before scheduling.

Additional information

What does this prompt do?
  • Reads your customer health or churn risk dashboard in Qlik Cloud every Monday morning and pulls one row per account with risk score, last activity, ARR, and CSM owner.
  • Finds accounts whose risk score crosses your threshold and have not already been flagged this cycle.
  • Updates each at risk account in Salesforce, setting the health status field to At Risk and adding a short note explaining the signal.
  • Posts one grouped Slack message in your revenue or CS channel with the at risk accounts, their owners, and a suggested order of outreach based on ARR and risk score.
What do I need to use this?
  • A Qlik Cloud account with access to a customer health or churn risk dashboard that returns one row per account.
  • A Salesforce account with permission to update Accounts and a health status field on the Account object.
  • A Slack workspace with a channel for revenue or customer success updates.
  • The names of the Qlik chart columns that map to account name, risk score, last activity date, ARR, and CSM owner.
  • The Salesforce field that stores the account health status (for example Health_Status__c).
How can I customize it?
  • Change the run time. Move it from Monday morning to a different day or to a daily cadence if your CS team triages more often.
  • Adjust the risk threshold. Pick the score above which an account is considered at risk for your business.
  • Pick the Slack channel and audience. Route the digest to #revenue, #cs, or a specific CSM channel and decide whether to @mention owners.
  • Decide what counts as already flagged. Skip accounts already marked At Risk in Salesforce or include them as a reminder.
  • Tune the Slack ordering. Sort the outreach list by ARR, by risk score, or by a blend of both.

Frequently asked questions

Do I need a special Qlik dashboard for this to work?
You need a chart, table, or KPI in Qlik Cloud that returns one row per account with the fields you want to act on. A simple straight table with account name, risk score, last activity date, ARR, and CSM owner is enough. The workflow asks you which chart to read and which columns to use.
Will it overwrite my CSM team's notes in Salesforce?
No. It updates the health status field you choose and appends a short signal note. Your existing notes, tasks, and activity history are untouched. You can also point it at a custom field if you would rather not write to the standard Description field.
What if an account is already marked At Risk?
By default the workflow skips accounts that already carry the At Risk status so your CSMs are not pinged twice for the same account. You can flip that behavior to re-flag every Monday if you want a recurring reminder instead.
Can it post to more than one Slack channel?
Yes. The default is a single grouped message in one channel like #revenue or #cs. You can also split the message by CSM owner and send each owner their own list, or post a summary to leadership and detailed lists to individual team channels.
How does it decide the order of outreach?
It sorts the at risk accounts by a blend of ARR and risk score so high-value, high-risk accounts surface at the top. You can change the weighting, sort purely by ARR, or sort purely by risk score depending on how your team works.

Turn your Qlik churn dashboard into Monday morning action.

Connect Qlik Cloud, Salesforce, and Slack once, and Geni runs this every Monday so at risk accounts get flagged and your CS team knows who to call first.