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
Metadata
Release files for tap-unirate 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tap_unirate-0.1.0.tar.gz | 10.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tap_unirate-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 17.4 kB
Release files / tap_unirate-0.1.0.tar.gz
| Download URL | tap_unirate-0.1.0.tar.gz |
|---|---|
| Size | 10.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
dd243f24f0898022e0796a3518f62dfe88e45ed0f0cbbcbabca38b0659ef8c61
|
|
BLAKE2b-256 checksum How to use checksums |
49bd50e1215603ba6a09668aea9a0f1a71505dec2deeeede5d5b3cbb9fe78be6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 28, 2026.
Transparency logRelease files / tap_unirate-0.1.0-py3-none-any.whl
| Download URL | tap_unirate-0.1.0-py3-none-any.whl |
|---|---|
| Size | 7.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
91547b43dc6cedbf76fb2b3ac61fc4937d21927b404205973cf56c5122a2f163
|
|
BLAKE2b-256 checksum How to use checksums |
7a98d540dbe75121fb7c4ec9aec2dc4b8d231ee410f114b5529fa21825badb4a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 28, 2026.
Transparency log