# Image Metadata Remover — Strip EXIF & GPS (`hipersoft/image-metadata-remover`) Actor

Bulk-remove EXIF, GPS location, IPTC and XMP metadata from images while keeping the picture intact. Export clean JPG/PNG/WebP for privacy and GDPR.

- **URL**: https://apify.com/hipersoft/image-metadata-remover.md
- **Developed by:** [hiper soft](https://apify.com/hipersoft) (community)
- **Categories:** Developer tools, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.0025 / image cleaned

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Image Metadata Remover — Strip EXIF, GPS & Hidden Data

**Remove EXIF, GPS location, IPTC and XMP metadata from images in bulk** — and get back clean **JPG, PNG, WebP, AVIF or TIFF** files with the picture untouched. Point this Image Metadata Remover at a list of image URLs and it returns privacy-safe copies plus a report of exactly what was stripped from each one. No design software, no manual work.

### Why remove image metadata?

Every photo taken on a phone or camera carries hidden metadata: **GPS coordinates of where it was shot**, the device model, serial numbers, timestamps, editing history and more. Publishing images with that data attached can leak someone's home address or a business's location. This tool wipes it before your images go public.

### What it does

- Strips **EXIF** (camera, GPS, timestamps), **IPTC** (captions, keywords) and **XMP** (editing history) metadata.
- Keeps the image pixel-perfect — same resolution, same quality.
- Optionally **bakes in the correct orientation** first, so photos never come out rotated.
- Optionally **keeps the color profile (ICC)** so colors don't shift.
- Optionally **converts** every image to one format (JPEG/PNG/WebP/AVIF/TIFF).
- Returns a per-image **report** of what metadata was found and removed.

### Use cases

- **Privacy & GDPR** — scrub location and personal data before publishing user-submitted photos.
- **Marketplaces & classifieds** — remove seller location data from listing images at scale.
- **Publishing & journalism** — clean source photos before they go on the web.
- **Real estate & agencies** — strip metadata from property and client images in bulk.
- **Dataset preparation** — normalize and de-identify image sets before sharing or training.

### Input

Provide one or more image URLs and choose your options.

```json
{
  "imageUrls": [
    "https://example.com/photo1.jpg",
    "https://example.com/photo2.png"
  ],
  "keepOrientation": true,
  "keepColorProfile": true,
  "outputFormat": "original"
}
```

| Field | Type | Description |
|---|---|---|
| `imageUrls` | array | Direct links to the images to clean (JPG, PNG, WebP, AVIF, TIFF, GIF). |
| `keepOrientation` | boolean | Bake rotation into the pixels before stripping, so images stay upright. Default `true`. |
| `keepColorProfile` | boolean | Preserve the ICC color profile so colors don't shift. Default `true`. |
| `outputFormat` | string | `original`, or convert all to `jpeg` / `png` / `webp` / `avif` / `tiff`. |

### Output

Each image becomes one dataset item, and the cleaned file is saved to your key-value store.

```json
{
  "sourceUrl": "https://example.com/photo1.jpg",
  "cleanedUrl": "https://api.apify.com/v2/key-value-stores/.../records/clean/0001-photo1.jpg",
  "format": "jpeg",
  "width": 4032,
  "height": 3024,
  "originalBytes": 3785412,
  "cleanedBytes": 3719004,
  "metadataRemoved": ["EXIF", "GPS", "XMP"],
  "hadMetadata": true,
  "ok": true
}
```

#### Output schema

| Field | Type | Description |
|---|---|---|
| `sourceUrl` | string (URL) | The original image URL. |
| `cleanedUrl` | string (URL) | Link to the cleaned image in your key-value store. |
| `format` | string | Detected image format. |
| `width` | integer | Image width in pixels. |
| `height` | integer | Image height in pixels. |
| `originalBytes` | integer | Original file size. |
| `cleanedBytes` | integer | Cleaned file size. |
| `metadataRemoved` | array | Which metadata blocks were removed (EXIF, IPTC, XMP, ICC…). |
| `hadMetadata` | boolean | Whether the original had any metadata. |
| `ok` | boolean | Whether the image was processed successfully. |

### FAQ

**Does it change how the image looks?**
No. The pixels, resolution and quality stay the same — only the hidden metadata is removed (and orientation is corrected if enabled).

**Does it remove GPS location?**
Yes. GPS coordinates live in EXIF, which is fully stripped.

**Can I convert formats at the same time?**
Yes — set `outputFormat` to convert every image to JPEG, PNG, WebP, AVIF or TIFF while cleaning it.

**What export formats are supported for the results?**
The dataset exports to JSON, CSV, Excel and XML; cleaned images are saved as files in the key-value store.

**Can I automate or integrate it?**
Yes. Connect it with almost any app via [integrations on the Apify platform](https://apify.com/integrations) — [Make](https://apify.com/integrations/make), [Zapier](https://apify.com/integrations/zapier), [Slack](https://docs.apify.com/platform/integrations/slack), [GitHub](https://docs.apify.com/platform/integrations/github), [Google Drive](https://docs.apify.com/platform/integrations/drive) and more, plus the [Apify API](https://docs.apify.com/api/v2) and [webhooks](https://docs.apify.com/platform/integrations/webhooks).

### Notes

Original clean-room implementation. You are responsible for how you use the processed images.

# Actor input Schema

## `imageUrls` (type: `array`):

Direct links to the images you want to clean (JPG, PNG, WebP, AVIF, TIFF, GIF). Each image is downloaded, stripped of metadata, and saved to your storage.

## `keepOrientation` (type: `boolean`):

Bake the photo's rotation into the pixels before removing metadata, so it still displays the right way up.

## `keepColorProfile` (type: `boolean`):

Preserve the embedded color profile so colors don't shift. Turn off for the smallest, most fully-stripped file.

## `outputFormat` (type: `string`):

Keep the original format or convert every image to one format.

## Actor input object example

```json
{
  "imageUrls": [
    "https://example.com/photo1.jpg",
    "https://example.com/photo2.png"
  ],
  "keepOrientation": true,
  "keepColorProfile": true,
  "outputFormat": "original"
}
```

# Actor output Schema

## `results` (type: `string`):

The cleaned images as dataset items.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "imageUrls": [
        "https://raw.githubusercontent.com/ianare/exif-samples/master/jpg/gps/DSCN0010.jpg"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("hipersoft/image-metadata-remover").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "imageUrls": ["https://raw.githubusercontent.com/ianare/exif-samples/master/jpg/gps/DSCN0010.jpg"] }

# Run the Actor and wait for it to finish
run = client.actor("hipersoft/image-metadata-remover").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "imageUrls": [
    "https://raw.githubusercontent.com/ianare/exif-samples/master/jpg/gps/DSCN0010.jpg"
  ]
}' |
apify call hipersoft/image-metadata-remover --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hipersoft/image-metadata-remover"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/ZLO1djfpINShEf7WF/builds/JFPvMLEhfeq5WIlUH/openapi.json
