How it works

How we verify visa data.

Visa data is messy. Rules change without notice, the same destination can have three conflicting unofficial summaries online, and even authoritative-looking aggregators lag behind embassy announcements. Here's exactly where every piece of data on this site comes from.

69permit exemptions hand-sourced
2444pairs re-verified
199passports covered
5 days ago last run · 2026-06-01 22:42 UTC

Three tiers of data

We're transparent about where each entry comes from — not everything on this site carries equal weight, so we mark the entries that do.

Tier 1

Residence-permit exemptions — hand-sourced

69 entries · 7 permit types

UAE residence, US Green Card, valid US B1/B2 visa, Schengen residence, Schengen C-visa, UK BRP, and Canadian PR exemptions are compiled manually from official government sources, with the source URL linked next to every country entry.

✓ high confidence Consider these entries the most reliable on the site.

Tier 2

Automated verification — re-checked against gov sources

2444 entries · 20/199 passports so far

High-traffic passport → destination pairs get re-verified by an automated pipeline that uses WebSearch to pull the current rule from embassy pages, ministries of foreign affairs, and official e-visa portals. The source URL must match our domain-trust allowlist (.gov, .gob, .gouv, mfa.*, etc.) to be marked verified.

✓ medium–high confidence Marked with a on passport and destination pages.

Tier 3

Bulk matrix — community-maintained starting point

~39601 entries · unverified

The bulk 199×199 visa matrix comes from the open-source Passport Index Dataset — an excellent community project that cross-references multiple sources. But: entries aren't individually sourced, so we treat this as a reasonable default, not a verified fact.

reasonable default No ✓ badge. Always verify with the destination embassy before booking.

How the verifier works

  1. Query. For each passport → destination pair, we ask Claude (via the claude CLI) to research the current tourist-visa requirement using its WebSearch + WebFetch tools.
  2. Constrain. The prompt explicitly limits the model to official government sources and asks for a structured JSON with status, day-limit, source URL, notes, and self-assessed confidence.
  3. Gate. The returned source URL is matched against a hard-coded allowlist of government-domain patterns. A legitimate source passes (e.g. mofa.go.jp, travel.state.gov, canada.ca). An unofficial one (blog, aggregator) is downgraded to "low" confidence and the ✓ badge is withheld.
  4. Persist. Each entry is written immediately to verified-visas.json — so partial runs are safe to resume.
  5. Display. On every passport and destination page, we check for a verified entry first. If present, we use the verified status (re-bucketing the country into the right section) and show the ✓ badge + source link.

What we don't do

  • We don't cite travel-blog posts, airline fare-sites, or commercial visa aggregators (iVisa, PassportIndex.com, etc.) as authoritative.
  • We don't guess. If the model can't find an official source, the entry is marked "unknown" and hidden from the site.
  • We don't inflate confidence. The model's self-assessed confidence can only be downgraded by our domain gate, never upgraded.
  • We don't claim to cover work/student/transit rules. Everything here is tourist / short-stay only.
  • We don't pretend our data is live. It's a snapshot — refreshed on-demand by running the verifier.

Frequently asked questions

Why do some entries have a ✓ and some don't?
A ✓ badge means that specific passport → destination entry has been re-verified against an official government source (embassy page, ministry of foreign affairs, or official e-visa portal), and the source URL is linked. Entries without ✓ come from the community-maintained Passport Index Dataset — they're a reasonable starting point but not individually verified.
How do you decide what counts as an "official" source?
We have a hard-coded allowlist of domain patterns that correspond to government-run websites: .gov, .gov.<cc> (like .gov.uk, .gov.au), .gob.<cc> (Spanish-speaking), .gouv.fr, .go.jp/kr/th/id, embassy/consulate subdomains, MFA subdomains (mfa.*, mofa.*, esteri.it, etc.), official visa portals (evisa.*, travel.state.gov, canada.ca, u.ae), EU official (europa.eu). A source URL must match one of these patterns to qualify.
What happens if the model finds an unofficial source?
We downgrade the entry to "low" confidence and hide the ✓ badge. We never cite travel-blog or aggregator content (iVisa, PassportIndex.com, etc.) as if it were authoritative.
How often do you re-verify?
The verifier runs on demand. We re-verify any entry older than 30 days when the agent is invoked. Entries are refreshed immediately after any change to the domain-trust pattern list. For now, about 2444 high-traffic entries across 20 passports have been verified. We're expanding coverage over time.
What are the limitations?
Three things to know: (1) Visa rules change without notice — our data is a snapshot, not a live feed. (2) We focus on tourist / short-stay requirements only; work, student, and transit rules are different. (3) Even an official source can be out of date — always confirm with the destination embassy before booking travel.
Is the code open source?
The verification pipeline is open source — see autonomous-agents/visa-verifier on GitHub. Issue a PR if you spot an inaccurate entry or want to propose new trusted-source patterns.
Why not just license a commercial API like Sherpa or IATA Timatic?
Those are the gold standard and cost $500-2000/month. We're bootstrapped. Our pipeline gets us 80% of the accuracy for ~$0.15 per batch of 100 entries, and 100% transparency into how we arrived at each entry. That trade-off works for a free, ad-supported site.