Scrapers / Developer & File Tools

Image EXIF Injector
hipersoft/image-exif-injector
Bulk-write EXIF metadata into images: copyright, author, description, software and comments. Stamp ownership across photo sets in one run.
Total users
2Monthly users
0Total runs
83Per image tagged
$0.005Last rebuilt
Oct 26, 2026Overview
Write EXIF metadata into images in bulk — stamp copyright, author, caption, software and comments across an entire photo set in one run and get back tagged JPEG files ready to publish or deliver. The companion to stripping metadata: this one adds the ownership and attribution data you want images to carry.

What it does
- Writes copyright and author/artist into each image's EXIF.
- Adds a description/caption, software name and a free-text comment.
- Optionally keeps existing metadata and merges the new fields in.
- Corrects orientation and outputs clean, web-ready JPEGs.
- Returns a per-image report of which fields were written.
Use cases
- Photographers & studios — stamp copyright and author across thousands of exports before delivery.
- Stock & DAM pipelines — apply consistent attribution and captions to catalog images.
- Agencies & brands — mark ownership on campaign assets in bulk.
- Publishers — embed credit lines so attribution travels with the file.
Input
{
"imageUrls": ["https://example.com/photo1.jpg"],
"copyright": "© 2026 Acme Studio",
"artist": "Jane Doe",
"description": "Product shot — spring collection",
"software": "Acme Pipeline",
"userComment": "Do not redistribute",
"keepExisting": true
}
| Field | Type | Description |
|---|---|---|
imageUrls |
array | Direct links to the images to tag. |
copyright |
string | Copyright notice written to EXIF. |
artist |
string | Author / photographer name. |
description |
string | Image caption / description. |
software |
string | Software or pipeline name. |
userComment |
string | Free-text EXIF comment. |
keepExisting |
boolean | Merge with existing metadata instead of replacing. Default true. |
Output

Each image becomes one dataset item, and the tagged file is saved to your key-value store.
{
"sourceUrl": "https://example.com/photo1.jpg",
"taggedUrl": "https://api.apify.com/v2/key-value-stores/.../records/tagged-0001-photo1.jpg",
"fieldsWritten": ["Copyright", "Artist", "ImageDescription"],
"copyright": "© 2026 Acme Studio",
"artist": "Jane Doe",
"bytes": 512044,
"ok": true
}
Output schema
| Field | Type | Description |
|---|---|---|
sourceUrl |
string (URL) | The original image URL. |
taggedUrl |
string (URL) | Link to the tagged image in your key-value store. |
fieldsWritten |
array | EXIF fields written. |
copyright |
string | Copyright value applied. |
artist |
string | Author value applied. |
bytes |
integer | Output file size. |
ok |
boolean | Whether the image was processed successfully. |
FAQ
Which fields can I write? Copyright, author/artist, description/caption, software and a free-text user comment — the standard EXIF attribution fields.
Does it keep the existing metadata?
By default yes — the new fields are merged. Turn off keepExisting to write only your fields.
What format are the results? Tagged images are saved as JPEG in the key-value store; the report dataset exports to JSON, CSV, Excel and XML.
Can I automate or integrate it? Yes. Connect it with almost any app via integrations on the Apify platform — Make, Zapier, Slack, Google Drive and more, plus the Apify API.
Notes
Original clean-room implementation. You are responsible for how you use the processed images. Pairs with the Image Metadata Remover.
Input
| Field | Type | Description |
|---|---|---|
imageUrls requiredImage URLs | array | Direct links to the images to tag. Each image gets the metadata below written into it and is saved to your storage as JPEG. |
copyrightCopyright | string | Copyright notice, e.g. "© 2026 Acme Studio". |
artistAuthor / Artist | string | Creator or photographer name. |
descriptionDescription / Caption | string | Image caption or description. |
softwareSoftware | string | Software or pipeline name to record. |
userCommentUser comment | string | Free-text comment stored in the EXIF UserComment field. |
keepExistingKeep existing metadata | boolean | Merge with any metadata already on the image instead of replacing it. Default: true |
API
curl -X POST "https://api.apify.com/v2/acts/hipersoft~image-exif-injector/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"imageUrls": [
"https://raw.githubusercontent.com/ianare/exif-samples/master/jpg/Canon_40D.jpg"
],
"copyright": "© 2026 Acme Studio"
}'from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("hipersoft/image-exif-injector").call(run_input={
"imageUrls": [
"https://raw.githubusercontent.com/ianare/exif-samples/master/jpg/Canon_40D.jpg"
],
"copyright": "© 2026 Acme Studio"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('hipersoft/image-exif-injector').call({
"imageUrls": [
"https://raw.githubusercontent.com/ianare/exif-samples/master/jpg/Canon_40D.jpg"
],
"copyright": "© 2026 Acme Studio"
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);Pricing
| Event | Price | Paid plans from |
|---|---|---|
| Image tagged One image with EXIF metadata written and saved to your storage | $0.005 | $0.0025 |
You pay only for what the run returns. Set a maximum cost per run and it stops cleanly at that limit.
Related scrapers
Bulk Image Downloader
Download thousands of images from a list of URLs and store each in the key-value store with a public link. Returns content type, size, dimensions and SHA-256 per image. Bulk-ready. Great for datasets, backups and media pipelines.
8,102 runs · 103 users · $0.056 / url processedText to Speech
Convert any text to natural-sounding speech as an MP3 download. 300+ premium neural voices across 70+ languages, adjustable rate, pitch and volume. Great for voiceovers, videos, accessibility and audio content. No setup.
278 runs · 22 users · $0.01 / audio generatedGoogle Maps Email Extractor
Search Google Maps for businesses, then crawl each business website to extract emails, social profiles and extra phone numbers. Turns any Maps search into a ready lead list. No setup.
159 runs · 8 users · $0.006 / business lead scrapedWebsite Screenshot
Capture full-page or viewport screenshots of any URL as PNG or JPEG, at any device size. For monitoring, previews, thumbnails and automation workflows.
156 runs · 3 users · $0.004 / screenshot capturedBulk URL Status Checker
Check thousands of URLs over plain HTTP: status codes, broken links (404/410/5xx), full redirect chains, response time, content type, page title and SSL certificate expiry.
154 runs · 13 users · $0.002 / url checkedGoogle Search Scraper
Scrape Google Search results (organic listings) for any query: title, URL, displayed URL, snippet and position. Multi-query, per-country/language, pagination. Uses Google SERP proxy — reliable, no captcha, no setup.
121 runs · 8 users · $0.001 / result scrapedSend the site and the fields. We build it and you get it first.