# Changelog of Brave Videos Scraper (`searchapi/brave-videos-scraper`) Actor

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

## Changelog

All notable changes to the Brave Videos Scraper are documented here.

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

#### Added

- Single-query and fair multi-query modes with global and per-query limits.
- Structured SvelteKit hydration extraction with a safe, allowlisted AST decoder and DOM fallback.
- Stable query-specific IDs, source-backed metadata, duplicate removal, and 71-field dataset contract.
- Safe Search, platform, sorting, concurrency, retry, timeout, debug, and proxy inputs.
- Direct, Apify Residential, and custom proxy support with consistent browser sessions.
- Tests for input validation, filter mappings, URL validation, record normalization, and safe hydration parsing.

#### Changed

- Updated to Node.js 22, Apify SDK 3.7.2, Crawlee 3.18.1, Playwright 1.62.1, and matching Firefox image.
- Time filters now use Brave's current `tf` parameters and are verified after navigation.
- Duration and platform filters are enforced against extracted source metadata.
- Empty and unavailable optional values are omitted instead of stored as `null`, empty strings, or placeholders.
- Challenge and malformed-response handling now fails closed with bounded retries.
- Removed the ineffective second-page wait, reducing representative runs to seconds instead of the former 30-second delay.

#### Removed

- Unsupported resolution filtering. Non-empty legacy resolution input now fails validation rather than silently returning unfiltered data.
- Obsolete v2 canonical-normalization and filter modules.

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

#### Added

- **Schema expanded** from 32 to **55 fields**.
- **New fields**: `type`, `resultType`, `titleHtml`, `link`, `channelId`, `channelAvatar`, `uploader`, `uploaderUrl`, `date`, `thumbnailUrl`, `category`, `isAd`, `isSponsored`, `resolution`, `width`, `height`, `aspectRatio`, `query`, `searchUrl`, `market`, `searchMetadata`.
- **New view**: `fullDetails` — all 55 fields in a single table.
- **INPUT.json** added at project root for local validation.

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

#### Added

- **Identity & metadata**: `page`, `videoId`, `embedUrl`, `platform`.
- **Channel**: `channel`, `channelUrl`, `channelVerified`, `channelFollowers`, `uploaderVerified`.
- **Engagement**: `duration` + `durationSeconds`, `viewCount` + `views`, `likeCount`, `dislikeCount`, `commentCount`.
- **Dates**: `publishedAt`, `publishedAtRaw`.
- **Media**: `thumbnail`, `description`, `tags`.
- **Flags**: `isLive`, `isShort`, `qualityOptions`.
- **Shared validator/normalizer** wired to `_canonical/`.

#### Changed

- Handler normalizes every record before pushing through `normalizeVideoRecord`.

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

#### Added

- Initial production release of the Brave Videos 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.
