Hourly
Flag messages that nobody has answered
Each hour, inbound messages waiting more than your limit without a reply are posted to Slack.
- Runs
- Hourly
- Apps
- Sprout Social
- AI
- Not needed
- Access
- API token
Send this to your assistant
Create a ClickRuntime automation: every hour, find inbound Sprout Social messages older than 2 hours with no reply and post them to #social-inbox in Slack.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Social customers expect a reply within hours, and many brands promise it publicly. In practice, messages arrive at all hours across several networks, teammates assume someone else answered, and a direct message about a damaged order sits unread for two days. The person who sent it posts a public complaint, tags the brand and mentions it was ignored. Sprout shows the inbox, but there is no simple way to see which conversations have gone quiet on your side.
Every hour, ClickRuntime queries Sprout for messages in a time window, finds the ones that still have no reply, and posts them to Slack with the network, sender and age of the message. As soon as someone replies in Sprout, the message drops out of the next list.
Social care teams and agencies with response-time promises are the typical users.
What you get out of it
Slow replies are caught before they escalate
A message that has waited three hours is listed while the customer is still calm. A quick reply at that point often prevents the public complaint that would follow later.
Response-time promises can be kept
Brands that advertise a reply within a few hours need to know when they are about to miss it. An hourly list shows precisely which conversations are close to the limit.
Coverage gaps are exposed
If messages tend to go unanswered in the evenings or at weekends, the list shows it repeatedly. That evidence supports a case for extra shifts or better handover between regions. Staffing decisions then rest on evidence, not on a hunch about when messages arrive.
Shared inboxes get ownership
When everyone assumes a colleague has handled a message, nobody does. A posted list puts the unanswered ones where the whole team sees them and someone claims each one. Replies speed up because the question of who should answer is settled in the channel.
Agencies can prove diligence
For a client, a record of what was unanswered and how quickly it was cleared shows that the account is monitored, and it quickly settles questions about missed messages. That evidence can also support a case for more budget or staff.
How it works
What happens, step by step
Every hour ClickRuntime checks your Sprout Social inbox for messages people sent you in the last day.
It picks out the ones that have had no reply for more than 2 hours and skips any it has already flagged.
Each is posted to your #social-inbox Slack channel with the network, the sender's name, the message and a link to it.
Before it runs live
- Connect Sprout Social
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
- Run it at a different time, more or less often, or only on weekdays
- 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 Sprout Social steps into one automation
Under the hood
The code that runs this automation
from datetime import datetime, timedelta, timezone
from clickruntime import on_trigger, credentials, http, state, notify
API = "https://api.sproutsocial.com/v1"
def sprout():
h = {"Authorization": f"Bearer {credentials.secret('SPROUT_API_TOKEN')}"}
cid = http.get(f"{API}/metadata/client", headers=h).json()["data"][0]["customer_id"]
return h, cid
@on_trigger
def run(event):
h, cid = sprout()
now = datetime.now(timezone.utc)
window = f"created_time.in({(now - timedelta(days=1)).isoformat()}..{(now - timedelta(hours=2)).isoformat()})"
msgs = http.post(f"{API}/{cid}/messages", headers=h, json={
"filters": [window, "activity_type.eq(INBOUND)"],
"fields": ["guid", "text", "from", "network", "perma_link", "action_last_update_time"]}).json()["data"]
posted = set(state.get("posted") or [])
waiting = [m for m in msgs if not m.get("action_last_update_time") and m["guid"] not in posted]
for m in waiting:
notify.slack(f"No reply for 2h+ on {m['network']} from {m['from'].get('name')}: {m['text'][:200]}\n{m.get('perma_link', '')}",
channel="#social-inbox")
state.set("posted", list(posted | {m["guid"] for m in waiting})[-2000:])
return {"waiting": len(waiting)}FAQ
Common questions
How does it decide a message is unanswered?
Can I set a minimum age?
Does it include comments as well as direct messages?
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
Get last week's profile stats every Monday
A weekly email with impressions, engagements and follower growth for each of your connected profiles.
See how it worksHear when brand mentions spike or turn negative
You get an alert when a listening topic's volume jumps or its negative sentiment climbs well above normal.
See how it worksSee your 10 best posts from last week
A Monday ranking of last week's top posts across your profiles by engagement, with impressions and links.
See how it worksKeep exploring
Set up “Flag messages that nobody has answered” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.
