For 12 years I handled international onboarding at a company that shipped hardware to 90+ countries. Every month someone asked me the same thing: "Do we need a visa for our engineer going to Brazil? What about the client in Singapore on an Indian passport?"
And every month I'd open five tabs, cross-reference three outdated travel sites, and still guess wrong on stay limits.
So instead of Googling it, I built a dataset.
The problem with visa data
Visa rules are the dictionary definition of "it depends":
- A US passport entering Japan = visa-free for 90 days
- An Indian passport entering Singapore = 30 days visa-free, but you must apply for an e-Visa before arrival if staying longer
- A Brazilian passport entering Schengen = needs a Schengen visa
- A UK passport entering some Schengen states = visa-free, but the stay limit resets on exit
Same destination, different passports, completely different answers. And the rules change constantly — countries add eVisas, drop visa-free access, or cap stay lengths with a week's notice.
Most travel sites update this data once a year. That's not fast enough for anyone doing real travel planning or logistics.
What I built
A passport-index dataset with 13,507 passport→destination pairs, covering every combination across passports and destination countries. Each pair stores:
- Visa-free entry and the exact stay limit
- eTA / ESTA requirements
- eVisa availability (and whether it's required pre-arrival)
- Visa-required flag with a link to the application portal
- Digital nomad visa support
The whole thing is driven by a policy-monitoring script that watches US Federal Register and government visa-policy sources, so updates get flagged as they happen instead of once a year.
The gotcha nobody tells you about
The hardest part wasn't the data itself — it was the stay-limit and entry-type ambiguity. For example, "visa-free" means different things depending on passport: American travelers to Europe have a hard 90/180-day cap, while passport holders from some Asia-Pacific countries entering the same states face a different rule.
Get one of those wrong and someone shows up at immigration with the wrong assumptions. That's why the dataset keeps visa-free and visa-on-arrival as distinct types, and stores stay limits as first-class fields rather than free-text notes.
Turning it into a live tool
A dataset is only useful if you can query it without a PhD in data wrangling, so I wrapped it in a public lookup:
- Search any passport–destination pair — instant answer on entry requirements, stay limit, and how to apply
- Passport power rankings — see how many destinations your passport opens without a visa
- The Schengen 90/180-day rule explained — the single most-asked question, answered against real data
- Country-by-country entry requirements — drill into any destination
It's bilingual (EN + ES), because Spanish speakers make up a huge share of the visa-application traffic that nobody else serves well.
If you want the raw data
The dataset is open and machine-readable — handy for travel platforms, migration researchers, or anyone building their own check:
- visa-requirements-dataset.json on GitHub — 13,507 pairs, ready to query or merge
A note on accuracy
Visa rules move fast and details vary by nationality. Always confirm with the destination embassy or consulate before you travel — this dataset is a high-signal starting point, not a substitute for a visa officer's call. I keep the update script running precisely because "check back later" is not an acceptable answer for a travel planner.
If you build passports or visa tooling, or you've got a storage complaint about the dataset schema — grab the data and tell me what you'd change. I'm always happy to make the source better.
Top comments (0)