Skip to content

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.

Paste it into your assistant. It tells you what it will send or change before it runs live.

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

  1. Every day ClickRuntime fetches the latest prices you track, such as Bitcoin, Ethereum and the euro to dollar rate.

  2. It adds a new page to your Notion rates database with today's date and each value.

  3. 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

RunsDaily
Log daily prices and exchange rates in Notiontoday, 9:00Succeeded
Notion · Rates2026-10-19 | BTC 64,210 | ETH 2,480 | EUR/USD 1.0912

Build your own

Need it to work differently?

This template is a starting point. Copy the prompt and change it, or describe a different automation from scratch, with your own conditions, more apps or an AI step. Your assistant writes it, tests it and runs it on ClickRuntime.
  • 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

This is the Python script that runs each time the automation starts. Your AI assistant writes it for you when you send the prompt, and you allow each step in your assistant. To change how the automation works, describe the change to your assistant and it updates the script for you. For every function it can use, see the script reference.
log_prices_or_rates_to_notion_on_a_schedule.pyexample
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?
Any keyless JSON endpoint works, such as public exchange rate APIs or crypto price APIs that allow anonymous requests. You pick the provider and the pairs. If a provider later adds an API key requirement, the key can be stored as a secret.
What time of day are the values captured?
Values are captured when the daily run starts, at the time you set. Rates and prices move during the day, so the logged number is a point-in-time reading and not an end-of-day close. If you need a specific close time, set the schedule to match it.
What if the API is down on a given day?
The run fails for that day and the failure is recorded in the ClickRuntime dashboard. No empty or partial page is created, so a missing date in your database tells you the source was unavailable.
What permissions does it need?
read+write. Nothing else in your accounts is used.
Does it need AI?
No. It runs without AI, so it doesn't use your plan's AI allowance.
How many runs does it use?
One run each time it runs (daily). Checks that find nothing to do and stop right away aren't counted.
Can I change how it works?
Yes. Describe the change to your AI assistant, for example a different schedule, channel or filter. It updates the automation, tests it and tells you what changed.

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.