# Changelog of LinkedIn Profile Scraper - No Login, No Cookies (`logiover/linkedin-profile-scraper`) Actor

- **URL**: https://apify.com/logiover/linkedin-profile-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/logiover/linkedin-profile-scraper.md

## Changelog

### 2026-09-01

- Fleet-wide health check. Verified against this Actor's real run history: 30-day success rate, output row counts, per-field fill rates, and peak memory against the configured memory limit.
- Reviewed for the failure patterns that have cost this fleet runs — unguarded proxy setup, retry loops that can outlast the run's own time budget, and full-page HTML parsing that can exhaust a small container.
- No change to input, output fields or scraping logic.

### 2026-08-11

- Maintenance release: refreshed the build and dependencies.
- Re-verified live execution, non-empty structured output and dataset field/type integrity.
- Reviewed reliability (retries, pagination) and output quality as part of a full-fleet QA pass.

### 2026-08-01

- Completed the August 2026 full health check: verified empty/programmatic default, Console UI default, and two source-informed alternative inputs on Apify.
- Confirmed successful live execution, non-empty structured output, dataset-field/type integrity, and logical sample quality within the 5-minute quality window.
- Replaced the field-level output schema with a canonical `results` dataset link so run results open correctly in the Apify Console.

### 2026-07-18

- Fixed field mixing between `education` and `companies`. LinkedIn's JSON-LD now files board memberships under `alumniOf` (e.g. Starbucks, The Business Council, Fred Hutch) and some schools under `worksFor` (e.g. University of Chicago); the parser previously mapped `alumniOf`→education and `worksFor`→companies blindly, so schools and board seats landed in the wrong arrays.
- Both source arrays are now pooled and each organisation is classified: schools (by JSON-LD `EducationalOrganization`/`CollegeOrUniversity` type, a `/school/` URL, or a school-name heuristic) go to `education`; everything else (employers and board roles) goes to `companies`. Results are de-duplicated per array.
- Output field keys and shapes are unchanged (`companies` keep `startDate`/`endDate`, `education` keep `startYear`/`endYear`); `currentCompany` and all core fields (name, headline, bio, location, followerCount, image, badges) are untouched.

### 2026-07-12

- Empty input now works: running with `{}` browses a popular default set of public profiles instead of erroring — the Actor always returns data out of the box.
- No filters are mandatory anymore (`profiles` is optional).
- Added a `maxResults` option (default 100) to bound large lists and the default run so it stays fast and cheap.
- Made the run graceful — the crawler is wrapped so an early stop is logged and already-scraped records are kept (run still finishes successfully).
- Default proxy group is now RESIDENTIAL (LinkedIn blocks datacenter IPs with HTTP 999) for far more reliable results out of the box.
- Added per-field titles/descriptions to the dataset schema for a clearer Dataset view and cleaner exports.

### 2026-06-28

- Health check passed — actor verified working end-to-end on Apify platform.
- Changelog refreshed for Store quality compliance.

### 2026-06-20

- Maintenance & reliability pass: re-verified end-to-end against live data and confirmed the Actor completes successfully within the 5-minute quality window on the default input.
- Refreshed the prefilled example input and tuned run defaults for faster, lower-cost runs.
