Daily
Log daily prices and exchange rates in Notion
A new dated row with the latest prices and rates is added to your database every day.
- Runs
- Daily
- Apps
- Notion
- AI
- Not needed
- Access
- read+write
Send this to your assistant
Create a ClickRuntime automation: every day at 9am, add a row to my Notion Rates database with today's date, the BTC and ETH prices in USD, and the EUR/USD exchange rate.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A freelancer paid in euros but billing in dollars wants to know what the exchange rate was on each invoice date. A hobbyist investor keeps a Notion page of Bitcoin and Ethereum prices that goes stale the week they stop copying numbers from a website. Gaps in the record make it impossible to see a trend or settle a dispute about what a rate was on a given day.
Each day, a free public rates or prices API is called (no account or API key needed), and a new page is created in your Notion database with the date as its title and the fetched values in number properties: EUR to USD, BTC in dollars, or whichever pairs you choose.
It is also handy for anyone building a simple chart in Notion, or keeping a history for tax and bookkeeping. It also works for commodity or stock quotes, wherever a public endpoint exists.
What you get out of it
Exchange rates on the day you need them
When you invoice in a foreign currency, a dated row lets you cite the rate used and avoid arguing with an accountant about which day's rate applied. That is the number that matters at tax time.
A real history instead of a snapshot
One row per day builds a dataset you can sort, filter and chart in Notion. Trends over a month or a quarter show up that a single current price never reveals.
No more copying numbers from websites
The values are written by the run itself, so typos and skipped days disappear. The record is as complete as the number of days it has run. Months later the log is still complete and consistent, with the same format on every row.
Cheaper than a paid data feed
Public endpoints cost nothing to call at a daily pace, which covers most personal tracking and small bookkeeping needs without a data subscription. Even a busy account can rely on this for years of daily readings.
Easy to extend with more pairs
Because each pair is a property on the same dated page, adding another currency or coin later only adds a column and does not disturb earlier rows. Charting several pairs side by side then requires no restructuring of the table.
How it works
What happens, step by step
Every day ClickRuntime fetches the latest prices you track, such as Bitcoin, Ethereum and the euro to dollar rate.
It adds a new page to your Notion rates database with today's date and each value.
Over time the database becomes a day-by-day history you can sort, filter or chart.
Before it runs live
- Connect Notion and share the database you want it to use
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 Notion steps into one automation
Under the hood
The code that runs this automation
from datetime import date
from clickruntime import on_trigger, credentials, http
NOTION = "https://api.notion.com/v1"
def headers():
return {"Authorization": f"Bearer {credentials.secret('NOTION_TOKEN')}", "Notion-Version": "2022-06-28"}
def query(db, body=None):
resp = http.post(f"{NOTION}/databases/{db}/query", headers=headers(), json=body or {})
resp.raise_for_status()
return resp.json()["results"]
def title(page, prop="Name"):
return "".join(t["plain_text"] for t in page["properties"][prop]["title"])
RATES = "rates-database-id"
@on_trigger
def run(event):
coins = http.get("https://api.coingecko.com/api/v3/simple/price",
params={"ids": "bitcoin,ethereum", "vs_currencies": "usd"}).json()
eur_usd = http.get("https://api.frankfurter.app/latest", params={"from": "EUR", "to": "USD"}).json()["rates"]["USD"]
http.post(f"{NOTION}/pages", headers=headers(), json={"parent": {"database_id": RATES}, "properties": {
"Name": {"title": [{"text": {"content": date.today().isoformat()}}]},
"Date": {"date": {"start": date.today().isoformat()}},
"BTC": {"number": coins["bitcoin"]["usd"]},
"ETH": {"number": coins["ethereum"]["usd"]},
"EUR/USD": {"number": eur_usd},
}}).raise_for_status()
return {"btc": coins["bitcoin"]["usd"], "eth": coins["ethereum"]["usd"], "eur_usd": eur_usd}FAQ
Common questions
Which public sources can it use?
What time of day are the values captured?
What if the API is down on a given day?
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
Archive empty and duplicate Notion pages
Your database stays clean, and you get an email listing what was archived so you can restore anything from the trash.
See how it worksGet reminders for Notion tasks due soon
Each morning you get the tasks due in the next two days, overdue ones move to today, and anything a week late is flagged as stale.
See how it worksEmail yourself a weekly Notion database backup
Each week a CSV copy of your database properties lands in your inbox.
See how it worksKeep exploring
Set up “Log daily prices and exchange rates in Notion” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.