# Changelog of TikTok Commercial Content Library Ads Scraper (`datascraperes/tiktok-ads-commercial-library`) Actor

- **URL**: https://apify.com/datascraperes/tiktok-ads-commercial-library/changelog.md
- **Full Actor documentation**: https://apify.com/datascraperes/tiktok-ads-commercial-library.md

## Changelog

### 2026-09-14

- Show live collection progress and accurate final outcomes in the run log and status message, without internal diagnostics.

- Remove internal connection metadata from Dataset records, exports and summaries.

- Use customer-safe error messages without internal endpoint or provider details.

- Retry temporary busy responses once after a short delay.

- Deduplicate ad IDs across countries before delivery, so repeated ads do not
  falsely stop the run at a charge limit.

- Fail clearly when all searches fail and retry transient connection errors once.

- Validate that each detail response contains the requested ad and usable metadata.

- Expose detail success/failure counters and enrichment status in the summary and UI.

- Stop after three consecutive detail failures; fail the run after this cutoff
  or when all attempted details fail, retaining collected results and summary.

- Preserve anonymous session cookies when reconnecting and bootstrap location
  when requesting configuration for a new region or language.

- Add a bounded live canary and fail-fast local validation gates.

- Fix reproducible detail failures after search when `includeDetails` is enabled.

- Complete the public location bootstrap before renewing each detail's configuration.

- Read landing pages and public profile links from the current detail response,
  and prefer enriched metadata over search summaries.

### 0.1.10

- Removed the unused raw-payload diagnostic path from runtime configuration,
  Dataset output and normalization.

### 0.1.9

- Removed the owner/API-only `includeRawPayloads` option from the public input
  schema and validation input.

### 0.1.8

- Add safe Apify pay-per-event support through the `ad-result` event at `$0.001` per saved ad.
- Do not charge diagnostic, duplicate or rejected dataset records.
- Stop immediately when the user's maximum charge limit prevents the next ad from being saved.
- Fail fast on missing, incorrect or double-charge-prone PPE configuration.

### 0.1.7

- Hide the owner/API-only `includeRawPayloads` diagnostic switch from the normal Apify form.

### 0.1.6

- Replace free-text country and language inputs with Apify multiselect/select controls.
- Make `locale: auto` the default and resolve one regional language per selected country.
- Keep manual language overrides for users who want all detail responses in one language.
- Record `locale` and `resolvedLocales` in the run summary.

### 0.1.5

- Align the HTTP-only detail flow with the current public CCL web app: regional language tags, detail referer and language-scoped `support-regions` bootstrap.
- Keep anonymous response cookies in the `curl_cffi` session and renew `X-CCL-STR` before every detail request; this removes the reproducible Apify `HTTP_421 system busy` failure seen with a cached bootstrap.
- Normalize regional locale input such as `en-US` while preserving the simple `en`/`es` defaults.
- Apify canaries improved from 3-5/12 details to 12/12 on ES and DE with 0 detail 421s.

### 0.1.4

- Use pinned `curl_cffi` with Chrome TLS impersonation and explicit HTTP/2 for the HTTP-only runtime.
- Keep the actor browser-free: no Chromium, Playwright or rendered page is installed.
- Apify canary comparison improved detail completion from 3/12 with the previous HTTP client to 4/12 and 5/12 on repeated HTTP/2 runs, but `HTTP_421 system busy` remains a best-effort limitation of the upstream route.

### 0.1.3

- Hide internal request delay and timeout settings from the public input.
- Set the HTTP-only actor default and minimum memory to 128 MB after a 100-ad detailed Apify load test; cap selectable memory at 256 MB.
- Simplify the public input by keeping connection settings internal.

### 0.1

- Initial HTTP-only Commercial Content Library Actor.
- Public search and detail requests without login or API keys.
- Bounded recovery from temporary connection failures.
- Country, keyword, advertiser, date, type, status, age, reach and gender filters.
- Dataset views for ads and diagnostic records.
