Hourly or daily
Fill a Supabase table from feeds on a schedule
New articles, prices or other public items land in your table every hour, with duplicates skipped.
- Runs
- Hourly or daily
- Apps
- Supabase
- AI
- Not needed
- Access
- secret key (write)
Send this to your assistant
Create a ClickRuntime automation: every hour, fetch new posts from these three RSS feeds and insert them into my Supabase articles table, skipping any URL that's already there.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A researcher tracks competitor prices, a blogger follows news from a dozen feeds and an analyst wants video transcripts from a channel. All of them end up copying data into a spreadsheet by hand, or running a script on a laptop that stops the day the laptop sleeps. The dataset has holes, and trends are impossible to see because nothing was collected on the days it mattered.
On the hourly or daily schedule you choose, ClickRuntime fetches the public source, checks each item against its URL or ID so nothing is stored twice, and upserts the new rows into your Supabase table. The table grows steadily on its own and can be queried with SQL or connected to a dashboard.
It suits price monitoring, content aggregation and any project where a complete, queryable history is the goal.
What you get out of it
Your dataset has no gaps
A job that runs every hour whether or not your laptop is open means the history is continuous. A price trend over six months is only meaningful if no weeks are missing, and scheduled collection prevents that.
Duplicates never pollute the table
Deduplication by URL or ID, or by a unique constraint in Supabase, ensures the same article or price point is stored once. Counts, averages and charts built on the table are accurate without cleanup.
Your data lives in a real database
Rows in Supabase can be filtered, joined and exported with ordinary SQL, or shown in a dashboard tool. That is far more flexible than a long spreadsheet that slows down as it grows.
Changes over time can be analyzed
Because every collection run adds timestamped rows, you can see when a competitor lowered a price or when a topic started trending. Questions about what changed and when become answerable.
It frees you from running scripts
No server to maintain, no cron job to debug, no laptop to leave on. Collection continues quietly, and the run history shows whether each fetch succeeded or failed. Failures are logged too.
How it works
What happens, step by step
Every hour, or every day if you prefer, ClickRuntime fetches the public feed or page you chose.
It skips items already in your table by checking their link or ID.
New articles, prices or other items are added as rows in your Supabase table.
Before it runs live
- Connect Supabase
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 Supabase steps into one automation
Under the hood
The code that runs this automation
import feedparser
from clickruntime import on_trigger, credentials, http, notify, report_fetched
SUPABASE_URL = "https://your-project.supabase.co"
def sb_headers(**extra):
key = credentials.secret("SUPABASE_SECRET_KEY")
return {"apikey": key, "Authorization": f"Bearer {key}", **extra}
FEEDS = ["https://blog.example.com/feed.xml", "https://news.example.org/rss", "https://example.dev/atom.xml"]
@on_trigger
def run(event):
rows = []
for url in FEEDS:
feed = feedparser.parse(http.get(url).content)
rows += [{"url": e.link, "title": e.title, "source": url, "published_at": e.get("published")} for e in feed.entries]
report_fetched(len(rows))
if not rows:
return {"inserted": 0}
resp = http.post(f"{SUPABASE_URL}/rest/v1/articles", params={"on_conflict": "url"}, json=rows,
headers=sb_headers(Prefer="resolution=ignore-duplicates,return=representation"))
resp.raise_for_status()
return {"fetched": len(rows), "inserted": len(resp.json())}FAQ
Common questions
Does it work with any website or only APIs and feeds?
How often can it collect?
How are duplicates detected?
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
Stop a free Supabase project from pausing
Your free project stays active, and you hear about it if the keep-alive query fails.
See how it worksGet yesterday's signups and orders by email
Each morning you see how many rows were added to your key tables the day before, compared with the day prior.
See how it worksEmail yourself a weekly CSV of a table
Every Sunday a CSV copy of one small table arrives in your inbox.
See how it worksKeep exploring
Set up “Fill a Supabase table from feeds on a schedule” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.