Skip to content

The dataset behind this site

Every figure on img-fix comes from this one dataset, and the dataset itself is downloadable — free, no key, no signup, CC BY 4.0.

Download

Data: img-fix.com passport, visa and portal photo specifications (CC BY 4.0). Please credit "img-fix.com" and link to https://img-fix.com when you use it.
Passport/visa/ID rows published47
Portal rows published23
Rows withheld (no official source)19
LicenceCC BY 4.0
Compiled2026-07-28

Field schema

FieldTypeMeaning
slug string Stable identifier, matches the page at /passport-photo/<slug>.
country / countryCode string Country name and ISO code, or a region name (e.g. "Schengen Area") where no single code applies.
documentType passport | visa | id Which document the photo is for.
photoTakenOnSite boolean | null True where the issuing authority photographs the applicant and does not accept a supplied photo, at least for the standard route.
print object widthMm, heightMm, widthIn, heightIn, count — the physical printed photo size, where one is published.
head object minMm/maxMm or pctMin/pctMax — the permitted crown-to-chin head height, in millimetres or as a percentage of image height.
digital object required, widthPx/heightPx or min/maxWidthPx/HeightPx, dpiMin, format, minKB/maxKB — the digital upload spec, where one exists.
background string | null The published background requirement, verbatim or closely paraphrased — not assumed to be "white".
recencyMonths number | null How old the photo is allowed to be, in months.
rules object glasses, headCovering, expression, children — prose rules, quoted from the source rather than summarised into a category.
sourceTier primary | official-secondary | unavailable Whether this came from the issuing authority’s own page or a secondary official mirror.
source object name, url, accessed — the official page this row was read from, and the date it was read.
conflicts array Cases where two official sources disagree, with both values and both URLs.

The JSON endpoints wrap the rows in an object carrying license, attribution, source, compiled, schemaVersion, rowCount and a gaps array — see below for why gaps are published rather than omitted. The CSV carries the same licence and attribution as #-prefixed comment lines above the header row.

How this is compiled

Every row starts from the issuing authority's own specification page or PDF — a passport agency, an interior ministry, an immigration service, an exam board. Nothing is copied from a photo-shop site, a visa agency or a forum answer, no matter how often the same figure circulates there. The URL and the date it was read are recorded on every row, and the sources page lists every one of them in one place, including the handful read from an official secondary source rather than the primary page.

Why rows are withheld instead of guessed

19 rows do not appear in the data at all — no print size, no head height, nothing. That is deliberate: a wrong passport photo specification gets somebody's application rejected, so a figure with no readable official source is treated as unknown rather than filled in from a secondary guess. The gaps array in each JSON response names the withheld row and the reason, which is the same list published on /sources. A dataset that shows you what it would not publish is easier to trust than one that quietly has an answer for everything.

What people have found in it

Surprising passport photo rules, derived from this dataset walks through several of the patterns hiding in these rows — countries that ban a plain white background, countries that photograph you rather than take your photo, and the size that most of the world actually agrees on.