Spaarradar API
A read-only JSON API with the same data as the site: every offer calculated for an amount, the deposit guarantee split, rate history and change events. No key needed; be polite with request rates.
Base URL: https://spaarradar.nl · OpenAPI: /api/openapi.json
Try it
curl "https://spaarradar.nl/api/products?amount=25000&type=deposit&terms=12&fullDgs=true"
curl "https://spaarradar.nl/api/products/trade-republic--trade-republic-cash?amount=10000"
curl "https://spaarradar.nl/api/rates/history?view=market&days=90"Every response carries a weak ETag; send it back as If-None-Match and an unchanged payload answers 304. Responses are publicly cacheable for the max-age in Cache-Control. Amounts are euros, rates are percentages per year as strings with two decimals, dates are ISO 8601.
GET /api/products
Filtered, calculated and sorted list of DGS-verified savings offers
| Parameter | Description | Default |
|---|---|---|
amount | Amount in EUR used in every calculation | 50000 |
horizon | Comparison horizon in months for flexible/notice accounts | 12 |
type | flexible | notice | deposit | all | flexible |
terms | Deposit terms in months, comma-separated (e.g. 12,24) | — |
termMin | Minimum deposit term (months) | — |
termMax | Maximum deposit term (months) | — |
channel | all | direct | raisin | platform | all |
country | Bank countries, ISO alpha-2, comma-separated | — |
dgsCountry | DGS countries, ISO alpha-2, comma-separated | — |
fullDgs | Entire amount must be covered by a verified DGS | true |
withholding | all | none | reducible | applicable | all |
promotions | include | exclude (calculate every offer at its rate after the promotion; nothing is hidden) | only | include |
newCustomers | all | yes | no | all |
payout | MONTHLY,QUARTERLY,ANNUALLY,AT_MATURITY,OTHER (comma-separated) | — |
currentAccount | all | no (no current account required) | all |
fees | all | none | all |
earlyWithdrawal | all | allowed (deposits that can be ended early) | all |
noticeMax | Maximum notice period in days | — |
freshness | all | 24h | official | confirmed | all |
includeIneligible | Also return offers whose min/max does not fit the amount | false |
sort | return (euros per year at the comparable annual yield) | effective (net effective annual rate) | headline | term | bank | country | verified | min | return |
brand | Only this brand (id or name) | — |
zoek | Free-text search over bank, product and institution name | — |
order | asc | desc | — |
page | Page number | 1 |
pageSize | Page size (max 500) | 50 |
200 ProductListResult: items[] (OfferView with calc + dgs split), total, hiddenByDgs, hiddenIneligible, facets, termCurve (deposits: best rate per term), typeMax, market, generatedAt
GET /api/products/{id}
Offer detail with monthly calculation steps (the list leaves calc.steps empty), rate history, sources, events and same-licence offers
| Parameter | Description | Default |
|---|---|---|
idrequired | — | |
amount | Amount in EUR | — |
horizon | Months | — |
200 OfferDetail404 Unknown offer
GET /api/products/export
The comparison as CSV (semicolon-separated, decimal comma); same parameters as /api/products, every row
200 text/csv
GET /api/institutions
Legal institutions with DGS scheme, limit, verification source and brands
200 items[]
GET /api/rates/history
Historic rates: one offer, every offer, or the daily market maximum
With offerId: the append-only rate-plan history of that offer. Without: every historic rate plan (newest first), filterable by brand and product type. With view=market: the best headline rate per day per product type over `days` days, across offers whose institution has a verified DGS.
| Parameter | Description | Default |
|---|---|---|
offerId | Offer id; returns that offer's own history | — |
limit | Max rows for a single offer | 100 |
brand | Brand id (listing mode) | — |
type | all | flexible | notice | deposit (listing mode) | all |
page | Page number (listing mode) | 1 |
pageSize | Page size, max 500 (listing mode) | 100 |
view | plans | market | plans |
days | Window for view=market | 90 |
200 items[] (rate plans, or {date, flexible, notice, deposit12, deposit60} per day for view=market)
GET /api/changes
Recent change events (rate up/down, promo start/end, new/removed offers, DGS changes)
| Parameter | Description | Default |
|---|---|---|
limit | Max rows | 50 |
200 items[]
GET /api/meta/last-updated
Freshness overview and source health
200 MetaSummary
GET /api/health
Liveness/readiness
200 ok503 degraded
Terms
Free for personal and non-commercial use with attribution and a link. Rates are gross and as published by the provider; the site is not liable for decisions based on the data. Do not republish the full dataset as a competing comparison.