Singer tap for the UniRate API — currency exchange rates, currencies, and VAT rates for Meltano / ELT pipelines.
Project description
tap-unirate
A Singer tap for UniRateAPI, built on the Meltano Singer SDK. Pull live currency exchange rates, the supported-currency list, and country VAT rates into any Singer target or Meltano ELT pipeline.
Streams
| Stream | Endpoint | Primary key | Description |
|---|---|---|---|
currencies |
GET /api/currencies |
code |
One record per supported ISO 4217 currency code. |
exchange_rates |
GET /api/rates?from=<base> |
base_currency, currency |
Latest rate for every target currency against the configured base. |
vat_rates |
GET /api/vat/rates |
country_code |
Standard VAT rate per country (ISO 3166-1 alpha-2). |
Historical rates and time series are Pro-gated on the UniRate API and are intentionally not exposed by this tap (they return HTTP 403 on the free tier).
Install
pip install tap-unirate
Requires Python 3.10+ (matching the Meltano Singer SDK).
Or add it to a Meltano project:
meltano add extractor tap-unirate
Configuration
| Setting | Required | Default | Description |
|---|---|---|---|
api_key |
yes | — | UniRate API key. Get a free one at https://unirateapi.com. |
base_currency |
no | USD |
Base currency (ISO 4217) for the exchange_rates stream. |
base_url |
no | https://api.unirateapi.com |
Override the API base URL (mainly for testing). |
Full config reference:
tap-unirate --about --format=markdown
Usage
Standalone
# Discover the catalog
tap-unirate --config config.json --discover > catalog.json
# Sync records (Singer messages on stdout)
tap-unirate --config config.json --catalog catalog.json | target-jsonl
Example config.json:
{
"api_key": "YOUR_UNIRATE_API_KEY",
"base_currency": "USD"
}
Meltano
meltano config tap-unirate set api_key $UNIRATE_API_KEY
meltano config tap-unirate set base_currency EUR
meltano run tap-unirate target-jsonl
See examples/ for a sample config and the full discovery flow.
Development
pip install -e ".[test]"
pytest
ruff check tap_unirate tests
All tests are fully mocked with requests-mock
— no live API calls, no key required. The suite combines the Singer SDK's
standard tap tests (get_tap_test_class) with per-stream record assertions.
Status
v0.1.0 — initial release. 3 streams. Built on singer-sdk >= 0.40.
Other UniRate clients
UniRate ships official client libraries and framework integrations across the ecosystem, all maintained under the UniRate-API org.
- Languages: Python · Node.js / TypeScript · Go · Rust · Java · Ruby · PHP · .NET · Swift
- Data / orchestration: Airflow · dbt · LangChain
- Workflow / no-code: n8n · Google Sheets · MCP server
Get a free API key at unirateapi.com.
License
MIT.
Links
- UniRate API docs: https://unirateapi.com/docs
- Meltano Singer SDK: https://sdk.meltano.com
- Issues: https://github.com/UniRate-API/tap-unirate/issues
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tap_unirate-0.1.0.tar.gz.
File metadata
- Download URL: tap_unirate-0.1.0.tar.gz
- Upload date:
- Size: 10.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dd243f24f0898022e0796a3518f62dfe88e45ed0f0cbbcbabca38b0659ef8c61
|
|
| MD5 |
35f7cb1b5e26e521af3e1f95678c08ab
|
|
| BLAKE2b-256 |
49bd50e1215603ba6a09668aea9a0f1a71505dec2deeeede5d5b3cbb9fe78be6
|
Provenance
The following attestation bundles were made for tap_unirate-0.1.0.tar.gz:
Publisher:
release.yml on UniRate-API/tap-unirate
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tap_unirate-0.1.0.tar.gz -
Subject digest:
dd243f24f0898022e0796a3518f62dfe88e45ed0f0cbbcbabca38b0659ef8c61 - Sigstore transparency entry: 2268381297
- Sigstore integration time:
-
Permalink:
UniRate-API/tap-unirate@b750cf145b724bd903c30ddad7eaf89afa12e26f -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/UniRate-API
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@b750cf145b724bd903c30ddad7eaf89afa12e26f -
Trigger Event:
push
-
Statement type:
File details
Details for the file tap_unirate-0.1.0-py3-none-any.whl.
File metadata
- Download URL: tap_unirate-0.1.0-py3-none-any.whl
- Upload date:
- Size: 7.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
91547b43dc6cedbf76fb2b3ac61fc4937d21927b404205973cf56c5122a2f163
|
|
| MD5 |
a4e15dca1cd42819725d212ed7ef59c7
|
|
| BLAKE2b-256 |
7a98d540dbe75121fb7c4ec9aec2dc4b8d231ee410f114b5529fa21825badb4a
|
Provenance
The following attestation bundles were made for tap_unirate-0.1.0-py3-none-any.whl:
Publisher:
release.yml on UniRate-API/tap-unirate
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tap_unirate-0.1.0-py3-none-any.whl -
Subject digest:
91547b43dc6cedbf76fb2b3ac61fc4937d21927b404205973cf56c5122a2f163 - Sigstore transparency entry: 2268381497
- Sigstore integration time:
-
Permalink:
UniRate-API/tap-unirate@b750cf145b724bd903c30ddad7eaf89afa12e26f -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/UniRate-API
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@b750cf145b724bd903c30ddad7eaf89afa12e26f -
Trigger Event:
push
-
Statement type: