# Changelog of Meta Ads Library · Creatives by Page (`corent1robert/facebook-ads-library-scraper`) Actor

- **URL**: https://apify.com/corent1robert/facebook-ads-library-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/corent1robert/facebook-ads-library-scraper.md

## Changelog

All notable changes to the Facebook Ads Library Scraper are documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).

### \[1.6] - 2026-09-07

#### Added

- **Actor Standby:** HTTP lookup `GET`/`POST /lookup` — ads for **one** Facebook page or query, hard cap **5 ads**. Console **Start** still writes the bulk dataset.
- OpenAPI spec for the Standby tab (`web_server_openapi.json`)

#### Changed

- `url` is no longer schema-required so Standby can boot with empty INPUT. Console **Start** still exits if no page is provided.

### \[1.5] - 2026-08-19

#### Changed

- Store / input description: no email. Categories: `SOCIAL_MEDIA`, `MARKETING`, `LEAD_GENERATION`.

### \[1.4] - 2026-08-19

#### Changed

- **Free plan cap:** 20 ads per run (`APIFY_USER_IS_PAYING`). Status: `Free plan: 20 ads. Upgrade for bulk.`
- Anonymous Try-without-account runs disabled (`isAnonymouslyRunnable: false`).

### \[1.3] - 2026-08-18

#### Changed

- Store title/SEO: `Meta Ads Library · Creatives by Facebook Page`; README Who / Quick start / pricing; email removed from Store description.

### \[1.2] - 2026-08-18

#### Added

- **12 published tasks** (Staycation, Nike, Coca-Cola, Airbnb, Booking, Sephora, IKEA, Decathlon, Spotify, Netflix, Tesla, McDonald's).

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

#### Added

- **`src/lib/adLibraryPure.js`** — helpers Relay / page ID sans effet de bord, partagés avec **`npm test`**.
- **`test/`** — suite **`node --test`** : `adLibraryPure.test.js` (extraction ID, merge variables, Relay `v`), `networkSniff.test.js` (`matchesAdLibraryGraphqlPost`, corps POST fictifs).
- **English README** — benefit-focused copy, quick start, output fields, and operational notes (residential proxies on Apify).
- **CHANGELOG.md** for store releases.
- **Actor interface** — `input_schema.json` reorganised into clear steps (what to enter → filters → limits) with client-oriented descriptions.
- **Key-Value Store schema** — `RUN_LOG` documented for live progress in the Apify console.
- **Dataset view** — “Ads — Overview” simplified view for CRM / reporting exports.
- **Progress & ETA** — console progress bar with `%`, items collected vs target, and estimated time remaining (listing + metrics phases).
- **`Actor.setStatusMessage`** on Apify — high-level status (e.g. collecting ads, enriching metrics) visible on the run page.
- **RUN_LOG** — console output mirrored to the key-value store (same pattern as Outreacher reference actors).
- **Local `input.json` merge** — `input.json` always merges over default input when running locally (CLI JSON/url still overrides).
- **`actor.json`** — `readme`, `changelog`, `key_value_store` wiring; higher default memory for browser session.

#### Changed

- **Defaults** — `country` omitted → **all countries** (`ALL`); `maxAds` omitted → **0** (no per-page cap within Actor limits); **active ads only** (no `activeStatus` input). Minimal `input.json` is URL-only.
- **GraphQL country** — Meta’s API rejects `countries: ["ALL"]`; when input is `ALL`, listing/detail calls use **`FR`** (documented in README / input schema).
- **GraphQL variables** — `AdLibrarySearchPaginationQuery` variables are **merged** from the browser-intercepted JSON (Relay shape) with patches for `viewAllPageID`, `countries`, `cursor`, etc.; replacing the whole object caused `missing_required_variable_value`.
- **Relay merge** — when `country` is left empty (default ALL), **do not** overwrite `activeStatus` / `mediaType` / `sortData` from intercept — only sanitize `countries` (`ALL`→`FR`); overwriting defaults fixed empty `edges` while HTTP stayed 200.
- **Session URL** — `bootstrapLibrarySession` used `country=ALL` in the Ads Library URL while GraphQL used `FR`, producing **0 edges**; the loaded page now uses **`graphqlCountryCode`** (and lowercase `ad_type` / `media_type` in the query string) so it matches a working UI like `country=FR`.
- **Input UX** — primary field is **Facebook Page URL** (`url`); **Page ID** is optional/advanced. Resolution order and docs updated; if both URL and Page ID are set, **URL wins** (no silent fallback to Page ID when `url` is present).
- **Logs** — user-facing run messages moved to **English** for consistency with the README and Apify Store.
- **Local CSV** — UTF-8 with BOM for Excel compatibility.
- **`package.json`** version aligned with actor minor release.

#### Fixed

- **Pagination merge** — when reusing an intercepted GraphQL body, `doc_id` from Facebook is no longer overwritten by a static constant (keeps front-end alignment).

***

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

#### Added

- Initial release: Facebook Ads Library scraping by `pageId` / URL / Ads Library link, GraphQL pagination, optional reach/spend enrichment, Apify residential proxy support, local `output.csv` export.
