# Changelog of Youtube Monetization Checker (`aitooolsmax/youtube-monetization-checker`) Actor

- **URL**: https://apify.com/aitooolsmax/youtube-monetization-checker/changelog.md
- **Full Actor documentation**: https://apify.com/aitooolsmax/youtube-monetization-checker.md

## Changelog

All notable changes to this project will be documented in this file.

### \[Unreleased]

#### Added

- **Channel URL resolution**: Support for channel URLs that require resolution via backend id-finder:
  - `youtube.com/@handle`
  - `youtube.com/c/customname`
  - `youtube.com/user/username`
- **Output field**: `resolvedChannelId` (present only when a handle/name URL is resolved to a UC channel ID).
- **Error code**: `CHANNEL_ID_NOT_FOUND` when id-finder returns an empty `channelId`.
- **Console polish**: `resolvedChannelId` displayed in the default dataset overview table.

#### Notes

- In `v1.0.0`, `UNSUPPORTED_URL` included `/@`, `/c/`, and `/user/` channel URLs. These formats are supported starting with this Unreleased set of changes.

### \[1.0.0] - 2026-01-04

Initial public release.

#### Features

- **URL Processing**: Parse YouTube videos, shorts, and channels from various URL formats
  - `youtube.com/watch?v=VIDEO_ID`
  - `youtu.be/VIDEO_ID`
  - `youtube.com/shorts/VIDEO_ID`
  - `youtube.com/channel/UCXXXXXX`

- **Monetization Detection**: Returns monetization status for each URL
  - `FULL` - Fully monetized
  - `PARTIAL` - Partially monetized (video only)
  - `NONE` - Not monetized
  - `UNKNOWN` - Cannot determine

- **Concurrent Processing**: Process up to 10 URLs in parallel (configurable)
  - Rate limited to 10 requests/second to protect backend
  - Full jitter backoff for retries

- **Mode Filtering**: Optionally restrict to only videos or only channels
  - Returns `MODE_MISMATCH` error for non-matching URLs

- **Run Summary**: OUTPUT record with statistics written to key-value store
  - Counts by type, monetization level, and error code
  - Abort handling with reason tracking

- **Robustness**: Production-grade error handling
  - 30s fetch timeout with automatic retries
  - Input validation (max 10,000 URLs, max 2048 chars each)
  - Sanitized logging (no sensitive data exposed)
  - Graceful abort on authentication errors

#### Error Codes

| Code | Description |
|------|-------------|
| `INVALID_INPUT` | URL malformed or unsupported |
| `MODE_MISMATCH` | URL type doesn't match `mode` field |
| `BACKEND_AUTH` | 401/403 from API |
| `NOT_FOUND` | 404 from API |
| `RATE_LIMITED` | 429 from API |
| `BACKEND_ERROR` | 5xx from API |
| `NETWORK_ERROR` | Connection failure or timeout |
| `PROCESSING_ERROR` | Unexpected internal processing error |
