On a schedule
Send a morning newsletter from your RSS feed
At 9am your subscribers get a digest of the new posts on your blog, with nothing repeated.
- Runs
- On a schedule
- Apps
- Brevo
- AI
- Optional
- Access
- read+write
Send this to your assistant
Create a ClickRuntime automation: every day at 9am, collect new posts from https://example.com/feed, build an email digest, and send it through Brevo to my 'Newsletter' list.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A blogger, a trade publication or a company with a busy news page wants to keep subscribers up to date without writing a newsletter by hand. Copying new posts into an email template every morning is repetitive, so it slips to weekly and then to never, while readers who would have clicked go to a competitor's feed instead.
Each morning, ClickRuntime fetches your RSS feed, skips items it has already sent, builds an HTML email from the new ones and creates and sends a campaign in Brevo, or a transactional email if you prefer. The goal is that subscribers get the digest at 9 am in their own time zone. If you want, built-in AI can write a short intro to open the digest.
It suits publishers and content teams whose feed is the real source of truth.
What you get out of it
Readers hear from you every day
A reliable morning digest builds a reading habit. Subscribers who see your name at the same time each day are more likely to open and click through to the site.
Traffic returns to your site
Every new article reaches the whole list without you remembering to promote it. Steady referral clicks from email add visits that would not otherwise come. Email often beats social media for steady return visits because subscribers chose to hear from you.
Duplicates are avoided
Skipping items already sent means readers never see yesterday's story twice. A digest with only fresh content feels curated and keeps unsubscribe rates down. A feed that republishes an old entry will not cause a repeat send, and that keeps subscribers happy with your frequency.
Time zones are respected
Delivering at 9 am in each subscriber's own time zone means the email arrives when people are checking mail. A single global send time reaches half of them at awkward hours.
Editorial time goes to writing
The feed already contains the content, so nobody builds the email by hand. Writers spend the morning on the next article rather than on layout. A solo creator can maintain a daily newsletter, which would otherwise be a part-time job, alongside writing.
How it works
What happens, step by step
Every morning at 9 ClickRuntime reads your blog's RSS feed.
It skips any post it has already sent, so readers never get the same post twice. If there is nothing new, nothing is sent.
It builds a short email with a linked title for each new post, with the count and the first title in the subject line.
It creates the campaign in Brevo and sends it straight away to your newsletter list.
Before it runs live
- Connect Brevo
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
- Change what the AI looks for, or how it writes the result
- Add another app, for example also send it to Slack
- Combine it with other Brevo steps into one automation
Under the hood
The code that runs this automation
import xml.etree.ElementTree as ET
from datetime import date
from html import escape
from clickruntime import on_trigger, credentials, http, state
FEED = "https://example.com/feed"
NEWSLETTER_LIST_ID = 3
SENDER = {"name": "Acme Weekly", "email": "news@acme.example"}
@on_trigger
def run(event):
items = ET.fromstring(http.get(FEED).content).findall("./channel/item")
seen = set(state.get("seen") or [])
new = [i for i in items if i.findtext("link") not in seen]
if not new:
return {"sent": False}
html = "<h2>New this morning</h2>" + "".join(
f'<p><a href="{escape(i.findtext("link"))}">{escape(i.findtext("title"))}</a></p>' for i in new)
h = {"api-key": credentials.secret("BREVO_API_KEY")}
campaign = http.post("https://api.brevo.com/v3/emailCampaigns", headers=h, json={
"name": f"RSS digest {date.today()}", "subject": f"{len(new)} new posts: {new[0].findtext('title')}",
"sender": SENDER, "htmlContent": html, "recipients": {"listIds": [NEWSLETTER_LIST_ID]}}).json()
http.post(f"https://api.brevo.com/v3/emailCampaigns/{campaign['id']}/sendNow", headers=h).raise_for_status()
state.set("seen", list(seen | {i.findtext("link") for i in new})[-500:])
return {"sent": len(new), "campaign": campaign["id"]}FAQ
Common questions
What happens on a day with no new posts?
Is the AI part required?
Does it send to my whole Brevo list?
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 a Monday report on Brevo campaigns
One email lists every campaign sent last week with opens, clicks and unsubscribes.
See how it worksFile new leads into a Brevo list
Each lead your CRM sends is checked, created or updated in Brevo and added to the right list.
See how it worksPost new Brevo contacts to Slack
Within 15 minutes of joining, each new contact shows up in Slack with their email and list.
See how it worksKeep exploring
Set up “Send a morning newsletter from your RSS feed” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.