Alt Text Generator - Batch Image Descriptions avatar

Alt Text Generator - Batch Image Descriptions

Pricing

from $5.20 / 1,000 alt text generateds

Go to Apify Store
Alt Text Generator - Batch Image Descriptions

Alt Text Generator - Batch Image Descriptions

Generate descriptive alt text for hundreds of images at once with AI vision. Output is JSON ready for CMS bulk-update and covers both SEO ranking and WCAG accessibility compliance — built for product catalogs, media libraries and social captions.

Pricing

from $5.20 / 1,000 alt text generateds

Rating

0.0

(0)

Developer

Daniel Carter

Daniel Carter

Maintained by Community

Actor stats

0

Bookmarked

24

Total users

8

Monthly active users

11 days ago

Last modified

Security

Limited permissions

Share

Alt Text Batch Generator

Batch-process multiple images to generate AI-powered alt text descriptions for web accessibility using Anthropic Claude vision (Claude Haiku 5.5).

Free plan (preview)Paid Apify plan (Starter and up)
Images described per run1 (the first URL)every URL you enter (up to 500 a run)
The other imagescounted in a free-plan-preview row: how many were queued, and an estimate (BRONZE price) of a paid run of the same inputdescribed
Pricesame eventssame events, with plan discounts: BRONZE 20% off, SILVER 35% off, GOLD and up 48% off

A free run ends as SUCCEEDED with a status message that says how many images were left out. Run the same input again on a paid plan for all of them.

Overview

This Actor processes up to 500 images in a single run and generates alt text descriptions suitable for screen readers and accessibility compliance. Each successfully processed image is charged at $0.01 (pay-per-event pricing).

Key Features

  • Batch Processing: Process up to 500 images per run
  • AI-Powered: Uses Claude Haiku 5.5 vision through the Anthropic Messages API
  • Flexible Output: Choose between concise (WCAG-compliant max 125 chars) or detailed (2-3 sentence) descriptions
  • Multi-Language: Supports 10 languages (English, Korean, Japanese, Chinese, Spanish, French, German, Italian, Portuguese, Russian)
  • Pay-Per-Event: $0.01 per generated alt text; $0.002 for an image URL whose host refuses it (see Pricing)
  • Error Resilience: Continues processing even if individual images fail
  • Detailed Logging: Track processing time and confidence scores per image

Input

Provide an array of publicly accessible image URLs:

{
"urls": [
"https://example.com/image1.jpg",
"https://example.com/image2.png",
"https://example.com/image3.webp"
],
"language": "en",
"style": "concise",
"maxUrls": 500
}

Input Parameters

ParameterTypeDefaultRequiredDescription
urlsarray—✓Array of image URLs (1-500 items)
languagestringen—Language code: en, ko, ja, zh, es, fr, de, it, pt, ru
stylestringconcise—Output style: concise (≤125 chars) or detailed (2-3 sentences)
maxUrlsinteger500—Safety limit on processing count (1-500)

Output

Each image produces one dataset record:

{
"url": "https://example.com/image1.jpg",
"status": "success",
"altText": "A fluffy orange tabby cat sitting on a wooden windowsill",
"detailedDescription": null,
"language": "en",
"model": "claude-haiku-5-5",
"processingTimeMs": 2450,
"confidence": 0.85,
"error": null,
"code": null
}

Output Fields

FieldTypeDescription
urlstringOriginal image URL
statusstringsuccess or error
altTextstringGenerated alt text (concise style)
detailedDescriptionstring|nullDetailed description (detailed style only)
languagestringOutput language code
modelstringAI model name (claude-haiku-5-5)
processingTimeMsintegerProcessing time in milliseconds
confidencenumberAI confidence score (0-1)
errorstring|nullError message if failed
codestring|nullError code: INVALID_URL, TIMEOUT, API_ERROR, etc.

Usage Examples

Example 1: Basic Batch Processing (English, Concise)

{
"urls": [
"https://picsum.photos/id/237/400/300.jpg",
"https://upload.wikimedia.org/wikipedia/commons/1/18/Dog_Breeds.jpg"
],
"language": "en",
"style": "concise"
}

Cost: $0.02 (2 images × $0.01)

Example 2: Large Batch with Detailed Descriptions (Korean)

{
"urls": [
"https://example.com/image1.jpg",
"https://example.com/image2.jpg",
"https://example.com/image3.jpg",
"...up to 500 images..."
],
"language": "ko",
"style": "detailed",
"maxUrls": 500
}

Cost: $0.03 - $5.00 depending on successes (1-500 images × $0.01)

Pricing

EventPrice (FREE tier list price)When it is charged
alt-text-generated$0.01once per image whose alt text row is delivered
image-checked$0.002once per image URL that was checked without an alt text: its host answered with an HTTP error, a non-image or an empty body (code: "IMAGE_UNREACHABLE", errorSide: "target", reason, httpStatus), or the input itself could not be used — an invalid URL (INVALID_URL/INVALID_INPUT), a file Claude cannot take, or an image Claude refuses (errorSide: "input"). Charged only once this event is on the live price list

Who is behind a failed URL. When the URL's own host answers 401, 403, 404 or 410, the check is done and the answer is the host's: errorSide: "target" with reason (login-required, forbidden, not-found, gone) and httpStatus, charged as image-checked. When it answers 429, 503 or another temporary code, the Actor waits briefly and asks once more; the same kind of answer again is the host's own state: reason: "temporarily-unavailable" with the HTTP code, charged the same way. Our side is never charged: our time limit, a host that never answered, errors of the Claude vision service or of our own key and cost cap (errorSide: "service"); a file Claude cannot take (not a JPEG/PNG/GIF/WebP image, over 7 MB or 8000 px) is errorSide: "input", charged as image-checked like an invalid URL.

If the platform restarts a run, the new run life reads the run's own dataset and the platform's charge counts: inputs already answered are not processed, delivered or charged again. If the dataset cannot be read back, the run stops without processing or charging anything more.

Not charged: TIMEOUT, API_ERROR, PROCESSING_ERROR, EXCEPTION rows (errorSide: "service" — our side) and notice rows. INVALID_URL/INVALID_INPUT rows are the input's own answer and are charged as image-checked. Plan discounts: BRONZE 20%, SILVER 35%, GOLD and up 48%.

The run stops when its maximum charge is reached: no further image is sent to Claude, a charge-limit-reached notice row says how many images were not processed, and the run ends as SUCCEEDED. If our vision service fails 3 images in a row, the run stops with a free service-unavailable notice row instead of spending your run time on the rest.

Cost Examples

ImagesSuccessCost
1010$0.10
5048 (2 failed)$0.48
10095 (5 failed)$0.95
500500$5.00

Timeout & Rate Limiting

  • Per-image timeout: 180 seconds, and never longer than the time the run has left
  • Batch timeout: the run timeout you set in Run options (default 1 hour). Images take about 5 seconds each, so 500 images need about 40 minutes — set a longer run timeout for big batches
  • Near the run timeout: the run stops starting new images, keeps every result already delivered, and adds one free time-budget-reached notice row listing how many inputs were not processed — re-run with the remaining URLs
  • Rate limit: 100ms delay between requests (built-in throttling)

Error Codes

CodeMeaningRecovery
INVALID_INPUTMissing/invalid URL parameterCheck URL format
INVALID_URLURL not HTTP(S) or malformedVerify URL is valid and public
TIMEOUTRequest exceeded the per-image limit (up to 180 seconds)Image too large or service overloaded
IMAGE_UNREACHABLEThe image host answered with an error (401/403/404/410, or 429/503 twice — reason and httpStatus say which), not an image, or emptyCheck that the URL opens publicly
API_ERRORAI service returned errorCheck service status
PROCESSING_ERROROther processing failureCheck image format/size
EXCEPTIONUnhandled exceptionContact support

Image Source Responsibility

  • You must only submit images that you own or have explicit permission to analyze.
  • You are responsible for complying with the source website's Terms of Service and robots.txt.
  • Do not use this tool to analyze images from stock photo sites (Getty, Shutterstock) without a valid license.
  • Generated alt text descriptions are not derivative works of the original images.
  • However, fetching images from third-party URLs may violate the source site's Terms of Service.
  • We assume no liability for third-party intellectual property claims arising from your use.

WCAG Compliance

  • AI-generated alt text is a starting point, NOT a guarantee of WCAG 2.1 or ADA compliance.
  • All generated descriptions must be reviewed by a human before production use.
  • This tool assists accessibility efforts but does not replace professional accessibility auditing.

AI Limitations

  • Descriptions may contain inaccuracies or miss important context.
  • Specialized images (medical, technical, charts) require professional review.

Data Processing

  • Images are fetched temporarily by the Actor and sent to Anthropic (United States) for analysis through the Anthropic API. Do not submit images you are not allowed to send to a third-party AI provider.
  • Anthropic is the AI provider and processes the image under its own API terms. This Actor is not affiliated with or endorsed by Anthropic.
  • No images are stored, cached, or redistributed by the Actor.

Technical Details

AI Service Integration

  • Model: Claude Haiku 5.5 (claude-haiku-5-5) via the Anthropic Messages API (base64 image block)
  • Request Timeout: up to 180 seconds per image
  • Supported Formats: JPEG, PNG, WebP, GIF (the type is read from the file, not from the host)
  • Max Image Size: 7 MB and 8000 x 8000 px; larger images are answered with an errorSide: "input" error row charged as image-checked. Claude downscales big images itself, so the cost of one image is bounded

Environment Variables (Optional)

AI_REQUEST_TIMEOUT=180000
ANTHROPIC_API_KEY=... # the Actor owner's key; without it every image is an uncharged error row

The model cost of one run is capped (US$2). The cap protects the owner, not the customer: customers pay only the events above.

Processing Pipeline

  1. Validate input array and language/style parameters
  2. For each URL:
    • Validate URL format
    • Fetch the image from its own host, then ask Claude vision with an optimized prompt
    • Collect response (alt text or error)
    • Push to dataset
    • Charge on success (or image-checked when the host refused the URL or the input could not be used); stop at the run's maximum charge
  3. Log summary (success/error counts, total cost)

Limitations

LimitationValue
Max images per run500 on paid plans, 1 on the free plan
Timeout per image180 seconds (shorter when the run is nearly out of time)
Total batch timeoutYour run timeout (Apify default 1 hour)
Concurrent requestsSequential (100ms between)
Supported formatsJPEG, PNG, WebP, GIF

Support

For issues or questions:

  1. Check error codes and logs in run output
  2. Verify all image URLs are publicly accessible
  3. Confirm language code is supported
  4. Review AI service status

Version History

  • v1.0.0 (2026-03-30): Initial release
    • Batch processing (up to 500 images)
    • Concise and detailed styles
    • Multi-language support
    • Pay-per-event billing

Last Updated: 2026-03-30 Maintainer: ntriq Engineering License: Apache 2.0


Build your data pipeline with the ntriqpro Actor suite:

⭐ Love it? Leave a Review

Your rating helps other professionals discover this actor. Rate it here.