# Changelog of DuckDuckGo Images Scraper (`searchapi/duckduckgo-images-scraper`) Actor

- **URL**: https://apify.com/searchapi/duckduckgo-images-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/searchapi/duckduckgo-images-scraper.md

## Changelog

### \[3.0.0] - 2026-08-29

#### Changed

- Replaced the browser-only response listener with fast API-first extraction from DuckDuckGo's public structured image-data endpoint.
- Added fair multi-query processing, bounded pagination/concurrency/retries/timeouts, stable query-specific IDs, exact website filter context, and a truthful 50-field schema.
- Switched to the lightweight Node Actor image and deterministic `npm ci` build.

#### Fixed

- Proxy input is now honored; direct access remains the default and `GOOGLE_SERP` is rejected as incompatible.
- Corrected DuckDuckGo country-language locale metadata.
- HTTP status, content type, JSON shape, pagination URL, challenge state, and malformed payloads are validated before use.
- Removed browser fingerprint hacks, CAPTCHA retry guidance, unused browser/error/selector modules, raw transport-field risk, and three high-severity production dependency findings.

All notable changes to the DuckDuckGo Images Scraper are documented here.

### \[2.0.1] - 2026-06-13

#### Verified

- End-to-end run against `duckduckgo.com` (`?iax=images&ia=images`) for query "artificial intelligence" returned **20/20 records** with all fields populated:
  - 20/20 have `imageUrl`, `thumbnailUrl`, `sourceUrl`, `title`, `width`, `height`, `fileFormat`
  - `sourceDomain` correctly extracted from the host page URL (e.g. `cdn.mos.cms.futurecdn.net`, `myriverside.sd43.bc.ca`)
  - `discoveredAt` (discovery date) parses correctly from Microsoft .NET 7-decimal datetime format
- API intercept (`/i.js?o=json`) approach in `main.js` is working as designed.

### \[2.0.0] - 2026-06-12

#### Added

- **Schema expanded** from 24 to **48 fields**.
- **New fields**: `resultType`, `alt`, `url`, `link`, `thumbnail`, `originalUrl`, `orientation`, `format`, `mimeType`, `size`, `dominantColor`, `colorPalette`, `safeSearch`, `hostPageUrl`, `domain`, `hostPageDomain`, `favicon`, `photographer`, `copyright`, `tags`, `query`, `searchUrl`, `market`, `searchMetadata`.
- **New view**: `fullDetails` — all 48 fields.
- **INPUT.json** added at project root for local validation.

### \[2.0.0] - 2026-06-12 (DDG refactor)

#### Added

- **Identity & metadata**: `position`, `page`.
- **Image**: `title`, `altText`, `imageUrl`, `thumbnailUrl`, `width`, `height`, `aspectRatio`, `fileFormat`, `fileSize`.
- **Flags**: `isAnimated`, `color`, `isAdult`.
- **Source**: `sourceUrl`, `sourceDomain`, `creator`, `creatorUrl`, `license`.
- **Run context**: `searchQuery`, `country`, `language`, `scrapedAt`.
- **Shared validator/normalizer** wired to `_canonical/`.

### \[1.0.0] - 2025-05-20

#### Added

- Initial production release of the DuckDuckGo Images Scraper.
- `PlaywrightCrawler`-based architecture using Firefox (`apify/actor-node-playwright-firefox`).
- Modular project structure.
- `validate-datasets.js` for local dataset output validation.
- `Dockerfile` using `apify/actor-node-playwright-firefox` image.
- `README.md` with full Apify usage guide.
