1 EUR in US dollar · ...
Latest rates
| Currency | 1 EUR = | Day change | Previous |
|---|
Pipeline status
Loading- Last run-
- Last success-
- Sources downloaded-
- History writes-
status.json, written by run.py
All workflow runs
How this page is built
One pipeline file. No server, no database to run, no API key.
GitHub Actions runs this agentl pipeline every working day after the ECB publishes. It writes two JSON files, and this static page reads them. Below is the exact pipeline.yaml that produced the numbers above.
- 01Fetch
http.getwithif_changed - 02ParseECB XML to rows,
dedupe - 03Check5 rules, stop on failure
- 04StoreSQLite changeset with history
- 05PublishJSON + run status to this page
# Loading pipeline.yaml...
- 1Only download when the ECB file changes
if_changed: { by: [etag, last_modified] }remembers the validators of the last good run. If the daily file is the same, the run stops with outcomeno_changeand nothing is rewritten. - 2Checks before anything is written
A
checkstep asserts at least 20 rows, no nulls, one row per date and currency, valid codes, positive rates and data less than 7 days old.on_fail: stopkeeps bad data out. - 3A changeset write with history
sqlite.writewithmode: changesetupserts on[date, currency]and reports rows inserted, updated and unchanged. - 4The run status is data too
run.pycallsagentl.run()with an event listener and turns the result intostatus.json: the panel above, including a failed run.
Build your own in an afternoon.
agentl is an open-source YAML ETL library for Python: connectors, checks, incremental runs and, when you need judgement, LLM agent steps. MIT licensed.
$ pip install agentl-etlRun this pipeline yourself
$ git clone https://github.com/arimayuji/agentl-examples && cd agentl-examples/fx
$ pip install agentl-etl
$ python run.py && python -m http.server -d site 8000