Digital nomad visa tracker JSON and CSV API
Two static files, CORS enabled, no key. Fields are read from the files we actually serve.
These are plain static files. There is no key, no sign-up and no rate limit beyond ordinary good manners: cache what you fetch and please do not poll more than once a day, because the files only change when we re-check the data.
- Licence: CC BY 4.0. Credit Nomad Terminal and link to https://nomadterminal.com/visas/.
- CORS: every file under
/data/is served withAccess-Control-Allow-Origin: *, so you can call it straight from browser JavaScript. - Update cadence: Rebuilt whenever a scheme is re-checked against its official page; each row carries its own checked date. Visa rules change often, so confirm with the official source linked in each row before acting.
- Versioning: files are overwritten in place. The checked date below tells you which version you have.
- Related: embeds, charts and downloads and the press and media kit.
Endpoints
GET /data/nomad-visa-tracker.json: Digital Nomad Visa Tracker (JSON, 55 records)GET /data/nomad-visa-tracker.csv: Digital Nomad Visa Tracker (CSV) (CSV, 55 rows)
GET /data/nomad-visa-tracker.json
One object per scheme with country, official name, status, income rule as the government states it, duration, fee, processing time, where to apply, tax note and the tracker link. Amounts keep the source currency and period.
Full URL: https://nomadterminal.com/data/nomad-visa-tracker.json. Format: application/json. 55 records. Last checked 2026-10-02. Described on https://nomadterminal.com/visas/.
const res = await fetch("https://nomadterminal.com/data/nomad-visa-tracker.json");
const data = await res.json();
console.log(Array.isArray(data) ? data.length : Object.keys(data));Fields (13)
| Field | Type | Example | Filled |
|---|---|---|---|
| country | string | Albania | 55 of 55 |
| iso2 | string | AL | 55 of 55 |
| scheme | string | Single (Unique) residence permit for digital mobile worke... | 55 of 55 |
| status | string | open | 55 of 55 |
| status_note | string | The Ministry of Interior's live procedure page (mb.gov.al... | 55 of 55 |
| min_income | string | 32000 ALL per month | 55 of 55 |
| duration | string | Up to 1 year the first time, for an alien legally staying... | 55 of 55 |
| government_fee | string | Service fee for the unique permit for mobile digital work... | 55 of 55 |
| processing_time | string | Review and issue within 4 to 12 weeks from the day of app... | 55 of 55 |
| apply_at | string | Online by the alien, the employer or an authorised person... | 55 of 55 |
| tax_treatment | string | 55 of 55 | |
| checked | string | 2026-10-02 | 55 of 55 |
| tracker_url | string | https://nomadterminal.com/visas/#albania-unique-permit-di... | 55 of 55 |
Empty or null means the source did not state it, not that the answer is zero. Money is in the source's own currency and is never converted. Dates are ISO 8601.
GET /data/nomad-visa-tracker.csv
The same rows as the JSON file, for spreadsheets.
Full URL: https://nomadterminal.com/data/nomad-visa-tracker.csv. Format: text/csv. 55 rows. Last checked 2026-10-02. Described on https://nomadterminal.com/visas/.
const res = await fetch("https://nomadterminal.com/data/nomad-visa-tracker.csv");
const rows = (await res.text()).trim().split(/
?
/);
console.log(rows.length - 1, "rows");Columns (13)
| Column |
|---|
| country |
| iso2 |
| scheme |
| status |
| status_note |
| min_income |
| duration |
| government_fee |
| processing_time |
| apply_at |
| tax_treatment |
| checked |
| tracker_url |
Empty or null means the source did not state it, not that the answer is zero. Money is in the source's own currency and is never converted. Dates are ISO 8601.
How to credit
A visible mention with a link is enough, for example: "Data: Nomad Terminal (nomadterminal.com), CC BY 4.0." The citation below is ready to copy.
Cite this
Data version 2026-10-02. Stable address: https://nomadterminal.com/visas/. Free to reuse under CC BY 4.0 with a link back.