Last updated: September 24, 2026
This page describes what the GeoTag.world code does, in plain words, and how you can check it yourself. The legal text is in the Privacy Policy.
The free tools (find location, EXIF viewer, privacy checker, remove GPS, remove EXIF, remove AI content credentials, and batch mode) read the file in your browser, change it in your browser's memory, and create the download in your browser. The site does not upload the photo file. The geotag editor works the same way: it writes the new coordinates into the file in your browser.
Some requests still happen, because maps, accounts and payments need other services. These are the requests we found in the code. The one exception is the Android share fallback in section 5, where your phone itself may send a shared photo to us once. Apart from that, none of them carries the photo file.
| Request | When it happens | What is sent |
|---|---|---|
| Map tiles (OpenFreeMap) | A photo with GPS is shown on the map, and the map in the geotag editor. | Your IP address and the map area you look at. Not the photo. |
| Place search (Geoapify) | You type in the place search box in the geotag editor. | The text you type. Not the photo. |
| Address lookup (Geoapify) | Geotag editor only: a photo with coordinates but no address is opened, you move the pin, or you press use my location. | The latitude and longitude. Not the photo. The free tools do not do this lookup. |
| Credit balance (/api/credits, GET) | You are signed in. The site shows your balance in the menu and checks it before a geotag download. | Nothing from the photo. The server knows who you are from your sign-in cookie. |
| Credit charge (/api/credits, POST) | After a paid geotag download finishes. | The number of photos charged, for example 1. Not the file, not the file name. |
| Save a result (/api/reveals, POST) | You are signed in and press Save to history on the EXIF viewer result. If you are signed out and press Save my result, the same data stays in this browser (for up to 1 hour) and is saved to whichever account signs in first during that time. | File name, latitude, longitude, camera make and model, and the date taken. Only shown when the photo has valid GPS. The address field exists in the API but the viewer does not fill it. Never the image. |
| Saved results (/api/reveals, GET and DELETE) | When you open or delete saved results. | The ID of the result you delete. |
| Account actions (/api/account/..., POST) | When you open billing, cancel, reactivate, change plan or delete your account. | The new plan when changing plan, otherwise nothing. |
| Unsubscribe (/api/email/unsubscribe, POST) | When you press Unsubscribe. | The signed token from the link, which identifies your email. |
| Sign-in session refresh (Supabase) | You are signed in, or your browser holds a sign-in cookie, and you open a page that needs your account (the home page and account pages, not the public info pages). | Your sign-in cookie. Not the photo. |
| Android share fallback (POST /share-target) | Only if you share a photo to the installed Android app and the app cannot start its background script (for example after an update, on a first launch, or with the script switched off). | Your phone may send the shared photo to our server once. The server ignores it: the request is not read, saved or logged, and it immediately redirects you to the tool, which asks you to choose the photo again. |
| Checkout (/api/polar/checkout, then Polar) | You press buy on a plan or pack. | Which plan or pack you chose. Polar then handles the payment page. |
| Paywall note (/api/email/events, POST) | You are signed in and close the credits window without buying. | A label (paywall_dismissed) and how many credits you needed. Used for one price reminder email. |
| Feedback (/api/feedback, POST) | You send feedback, or answer the short question shown once to signed-in free users when they press download, before the file is made. | Your message, your email address (required in the feedback form; your account email for the download question), the type of feedback, your browser user agent and the page you were on. Not the photo. |
| Newsletter (Supabase, from your browser) | You subscribe to the newsletter. | Your email address. |
| Sign up and sign in (Supabase) | You create an account or sign in with email and password, or with Google. | Your sign-in details. With Google, you are sent to Google to sign in. |
| Analytics (Google, Microsoft Clarity) | Only after you choose Accept all in the cookie banner. | Page views and interactions, a random device ID and session ID, and your account ID if you are signed in. Photo coordinates and file names are not sent. Nothing loads before you choose. |
| Service worker status (/sw-status.json) | After the page loads in production, at most every 10 minutes. | Nothing. |
| View on Google Maps link | Only if you click it. It opens Google Maps in a new tab. | The coordinates are part of the address of that link. |
Your own computer also loads the site's pages, scripts and fonts from GeoTag.world (hosted on Vercel). The sample photo link ("No photo handy? Try a sample") downloads a sample from our site to your browser, not the other way round.
Go offline after the photo is shown. The map code is loaded only when a photo with GPS appears, so if you are already offline when you choose a photo that has GPS, that code cannot load and the page shows an error. A JPEG, PNG or WebP photo without GPS works offline from the start (HEIC and batch mode load extra code and need the network first).
On September 24, 2026, we ran both tests with an automated Chromium browser against a production build of this site's code on a local computer, signed out, with no cookie choice made. The photo was our sample photo (148,809 bytes, with GPS coordinates).
This shows what the free strip does in this setup. Signed-in features, payments and other browsers were not part of this run.
This matches the list in the Privacy Policy. We do not sell personal information.
| Provider | Used for | What it receives |
|---|---|---|
| Vercel | Hosts the website. | Normal connection data such as IP address and request logs. |
| Supabase | Accounts, credits, purchase and subscription records, saved results, newsletter list. | What you give it when you sign up, buy or save. |
| Polar | Payments and subscriptions. | Your email and an account reference at checkout. We do not see card details. |
| Geoapify | Place search and coordinate-to-address lookup in the geotag editor. | Text you type, or coordinates. |
| OpenFreeMap | Map tiles for the interactive map. | Your IP address and the map area you view. |
| Resend | Sends our emails (purchase confirmations, follow-ups, reminders). Sent from our server, not from your browser. | Your email address and the message. |
| Google Analytics and Tag Manager | Website analytics. Only after Accept all. | Usage data described in the Privacy Policy. |
| Microsoft Clarity and Bing tag | Website analytics, loaded through Tag Manager. Only after Accept all. | Usage data described in the Privacy Policy. |
| Feedback service (Heroku, feeder-node-1337) | Stores feedback you submit. | The feedback details listed above. |
The free tools accept JPEG, PNG, WebP, AVIF and HEIC or HEIF. The older homepage uploader also takes GIF, BMP, TIFF and SVG, and RAW on paid plans. Your original file is not changed. You get a new file, and the name keeps the original name with _clean added. Batch mode does the same for each file and gives you one ZIP.
| Format | What happens | Output name |
|---|---|---|
| JPEG | Edited in place at the byte level. The EXIF and XMP block (APP1), the AI content credentials block (APP11) and the Photoshop and IPTC block (APP13) are dropped. The picture data is not decoded or recompressed. Extra data stored after the end of the picture (a motion photo video, a second image, an appended blob) is cut off. If the file structure is damaged and the end of the picture cannot be found reliably, nothing is cut and the privacy receipt marks the file Not fully clean. If the file turns out not to be a valid JPEG, it is redrawn on a canvas and saved as a new JPEG at quality 0.95. | name_clean.jpg |
| PNG | Drawn onto a canvas and saved again as PNG. Only the pixels are carried over. | name_clean.png |
| WebP | Drawn onto a canvas and saved again as WebP. The EXIF viewer cannot read WebP metadata, but the clean copy is still made this way. | name_clean.webp |
| AVIF | Your browser must be able to decode it. It is drawn onto a canvas and saved as a JPEG at quality 0.95, so the result is a different format. | name_clean.jpg |
| HEIC and HEIF | Decoded to a JPEG in your browser (a JavaScript decoder, with a WebAssembly fallback), then treated like a JPEG above. The result is a JPEG, not a HEIC, and the decode is a lossy step. | name_clean.jpg |
Because the JPEG orientation setting lives inside EXIF, it is removed with it, so a JPEG that relied on it may show turned after cleaning. We did not test this. The geotag editor is different: it adds or changes GPS and keeps the other existing EXIF, and it saves non-JPEG files as JPEG. Camera RAW files get a separate .xmp sidecar instead. For JPEG it also drops data stored after the picture (for example a motion photo video), because that data could still hold the old location.
You can add Geotag to your home screen. It is the same website, so photos are still read and cleaned in your browser. The small background script that makes installing possible does not save copies of our pages. When the installed app is active, shared photos are handled on your device.
Geotag can remember your last jobs and the places you save, so you can pick up where you left off. Both live in your browser's storage on this device only. They are never sent to our servers, and they work whether or not you accept analytics.
After you clean a photo, or a whole batch with Strip all, you can download a privacy receipt. It is a single HTML file you can keep, send to a client, or print or save as PDF from your browser. It is built in your browser, on your device. No request is made to build it, and nothing about it is stored or sent to us. Our code makes no server call for it, and our automated test watches the network while it is built.
It never contains the values: no coordinates, addresses, camera names or serial numbers. Only yes or no, and counts.
To check for yourself, open the cleaned file in the free EXIF viewer.
Dates are when each change was made.