# Changelog of LinkedIn Profile Scraper | No Cookies | $2–$1.2/1K (`apivault_labs/linkedin-profile-scraper-no-cookies`) Actor

- **URL**: https://apify.com/apivault\_labs/linkedin-profile-scraper-no-cookies/changelog.md
- **Full Actor documentation**: https://apify.com/apivault\_labs/linkedin-profile-scraper-no-cookies.md

## Changelog

### 2.4.8 — 2026-08-14

- Switched production extraction to the faster primary channel after controlled
  tests: 9/10 profiles with 16.7s p50 (the secondary channel scored 0/10).

### 2.4.0 — 2026-08-14

- Added canonical URL recovery from renderer metadata, HTML canonical links, redirects and a conservative search fallback after a complete miss.
- Added completeness score, missing sections, partial-profile flag and counts.
- Added direct JSON-LD posts/articles with dates and reaction counts.
- Expanded flat CRM/CSV output and six purpose-built dataset views.

### 2.3.0 — 2026-08-14

- Added structured certifications, volunteer experience, projects, publications,
  honors and awards, languages, recommendations, activity, authored articles
  and courses from sections already present on public pages.
- Added source, fetchedAt, experienceMasked and sectionsAvailable metadata.
- Fixed activity extraction across LinkedIn's embedded sign-in modal headings.

### 2.2.0 — 2026-08-14

- Added `country` derived from structured profile location.
- Hardened auth-wall rejection so sign-up pages cannot become profile rows.
- Fixed education parsing for guest HTML whose class attributes contain literal
  angle brackets.
- Added an opt-in, bounded diagnostic dump for fallback HTML; normal runs never
  store raw pages.

### 2.1.0 — 2026-08-14

- Added a second independent extraction source: profiles the primary renderer
  cannot serve (login-wall or masked work history) are retried through a
  separate direct pipeline and merged — more profiles with complete data.
- Pacing between render requests to avoid burst throttling.

### 2.0.0 — 2026-08-14

- Replaced the extraction engine with a new direct fetch stack: the previous
  upstream renderer stopped serving LinkedIn, causing empty runs.
- Same input, same output fields, same billing contract
  (`apify-default-dataset-item`): only successful profiles are billed.
- Faster and cheaper runs; per-profile retries with fresh fetch on retry.
- Profiles whose work history LinkedIn serves masked are retried; if the mask
  persists, the profile is still returned with identity/audience fields.

### 1.0.0 — 2026-08-14

- Upgraded basic profiles to full profiles: current role/company, work history,
  education, skills, connections, followers, website and profile image.
- Added free intelligence fields: seniority, decision-maker flag, experience,
  tenure, open-to-work and job-change signals, lead score/tier and reasons.
- Added full and flat CRM export modes, username input, deduplication and
  `{ "url": "...", "id": "crm-id" }` correlation objects.
- Added output schema and Profiles / Lead intelligence dataset views.
- Preserved the existing `apify-default-dataset-item` billing contract: only
  successful profiles are pushed and billed; failures remain free.
- Treat source-wide LinkedIn fetch failures as transient, retry them, and finish
  empty runs without a false Actor failure or billed diagnostic rows.

All notable changes to this Actor will be documented here.

### \[0.4] — 2026-06-30 — Price update ($2/1K base, cheaper on higher tiers)

#### Changed

- Pricing raised: free-plan users pay the base rate ($2/1K, same as Bronze);
  higher subscription tiers get progressively cheaper down to $1.2/1K (Diamond).
- README, store title and SEO updated to the new $2/1K headline; refreshed
  hero banner.

### \[0.3] — 2026-06-30 — SEO, README banner, tiered pricing

#### Added

- Branded README hero banner and an SEO-rewritten README (keyword H1,
  competitor comparison, use cases, integrations, FAQ, disclaimer).
- Fair tiered pricing (Free $1.2/1K down to Diamond $0.6/1K) — pay only for
  profiles successfully scraped.

#### Fixed

- Store `seoDescription` no longer mismatched the Actor (it previously quoted
  the wrong price and fields copied from another scraper).

### \[0.2] — 2026-06-30 — Cleaner output (handles + numeric fields)

#### Fixed

- **Username** is now always the real LinkedIn handle (taken from the profile
  URL). The upstream source occasionally returned the display name in this
  field instead of the handle.
- **Numeric fields** (`followerCount`, `followingCount`, `postCount`) are now
  returned as integers instead of strings, and empty numbers come back as
  `null` — so downstream tools and the dataset table view get real numbers.

### \[0.1] — 2026-06-18 — Reliability: retries + no blank rows

#### Fixed

- Profiles occasionally came back empty due to a transient upstream miss. The
  Actor now retries a profile up to 2 extra times before giving up, which
  removes most intermittent empty results.
- Empty extractions are no longer saved as "successful" blank rows — a profile
  that yields no data is reported as failed and is **not charged**.

### \[0.0] — initial release

- Public LinkedIn profile fields (name, bio, location, followers, …), no login.
