Collects as they arrive, acts daily
Get one end-of-day round-up of new contacts
At 5pm Slack gets a single message with the day's new contacts, grouped by list.
- Runs
- Collects as they arrive, acts daily
- Apps
- ActiveCampaign
- AI
- Not needed
- Access
- API key
Send this to your assistant
Create a ClickRuntime automation: collect every new ActiveCampaign contact today and at 5pm post one summary to #marketing in Slack, grouped by list.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Marketing teams that run sign-up forms, webinars and list imports into ActiveCampaign can add hundreds of contacts a week. Posting each one to a Slack channel seems helpful for the first few days. Then the channel turns into a stream of names that everyone mutes, and the one question the team cares about, which source brought in people today, is never answered.
This collects each new contact as ActiveCampaign reports it and holds it until 17:00. At that time it groups the contacts by list or source and posts a single message with counts and the newest names under each group. After posting, the collected contacts are cleared so tomorrow starts from zero.
It works well for growth leads who want a quick end-of-day picture, and for sales teams who only need to know whether a campaign produced leads, not to read each address.
What you get out of it
One message replaces dozens of pings
The Slack channel stays readable. People actually open the daily post because it is short and arrives once, rather than learning to ignore a constant flow of single-contact alerts. Over a month that adds up to a lot of saved attention.
Sources are compared the same day
Seeing that a webinar list added 40 contacts while the pricing-page form added two tells you where to look. You can react to a weak day while the campaign is still running, not at month end.
Broken forms show up quickly
If a form that normally brings in contacts shows nothing for a day, the missing group is noticeable in the summary. That catches a broken embed or a disconnected integration before leads are lost for a week.
Sales follows up on real volume
Reps see how many fresh contacts landed per list and can plan outreach time. They are not interrupted mid-call by every new sign-up, but they still know what is waiting.
A lightweight daily record
Each post doubles as a dated log of acquisition by source. When someone asks what happened in the second week of the campaign, you can scroll the channel instead of rebuilding it from exports.
How it works
What happens, step by step
Each time a contact is added in ActiveCampaign, ClickRuntime notes their email and the list they joined.
At 5pm it groups the day's contacts by list and counts them.
One message goes to your #marketing Slack channel with the day's total and the count for each list.
It then clears the list, so tomorrow starts fresh. On a day with no new contacts, nothing is posted.
Before it runs live
- Connect ActiveCampaign
- Paste your automation's link into the other app's webhook settings
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
- Act only on the items that match your own rules, and skip the rest
- 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 ActiveCampaign steps into one automation
Under the hood
The code that runs this automation
from collections import Counter
from clickruntime import on_event, on_trigger, state, notify
@on_event
def collect(event):
f = event.json
contacts = state.get("today") or []
contacts.append({"email": f.get("contact[email]"), "list": f.get("list") or "No list"})
state.set("today", contacts)
return {"stored": len(contacts)}
@on_trigger
def summarise(event):
contacts = state.get("today") or []
if not contacts:
return {"posted": False}
counts = Counter(c["list"] for c in contacts)
notify.slack(f"{len(contacts)} new contacts today\n" +
"\n".join(f"• {l}: {n}" for l, n in counts.most_common()), channel="#marketing")
state.delete("today")
return {"posted": len(contacts)}FAQ
Common questions
Does a contact in two lists count twice?
What time zone is the 17:00 post?
Will it post on days with no new contacts?
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 an evening summary of contact notes
Each evening the day's notes are summarised and the urgent ones are flagged at the top.
See how it worksPost new ActiveCampaign contacts to Slack
Each new contact appears in Slack with their name, email and the list they joined.
See how it worksShare contact notes in Slack
When someone writes a note on a contact, the team sees the note and who it is about.
See how it worksKeep exploring
Set up “Get one end-of-day round-up of new contacts” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.
