# Changelog of LinkedIn Email Finder (`lergassy/linkedin-email-finder`) Actor

- **URL**: https://apify.com/lergassy/linkedin-email-finder/changelog.md
- **Full Actor documentation**: https://apify.com/lergassy/linkedin-email-finder.md

## Changelog

### 2026-10-13

- "Max cost per run" is now respected: a profile is looked up only while your cap still pays for one more found e-mail, so the run finishes SUCCEEDED with a clear status message instead of being aborted by the platform; profiles not reached are listed in NOT_ATTEMPTED (not charged). A cap lower than the price of one e-mail opens no profile and returns one free notice row.

### 2026-10-09 (2)

- Main company for people with several current jobs: `company` is now the one named in the headline (or, when LinkedIn hides the headline, in the About text or the profile's website), then founder / CEO level, then the longest-held — before, the first listed position was taken (a side project for some founders). New fields `otherCurrentCompanies`, `companyChosenBy`, `emailCompany`. When the main company's mail server accepts any address, the one remaining mailbox check goes to the most likely address at the next current company (still at most 2 checks per person).

### 2026-10-09

- Mailbox verification: every work e-mail is now checked by an SMTP mailbox check (new fields `emailVerified`, `emailCatchAll`, `emailVerification` with status, score and time). The row is charged as an e-mail **only when the mailbox is verified**; addresses on catch-all domains and unconfirmed mailboxes come back in `emailGuess`, not charged as an e-mail. New `confidence: verified` and `emailStatus` values `mailbox-verified`, `catch-all`, `mailbox-unknown`, `mailbox-invalid`.
- Internal: cost-safety switches for the paid routes; run-health module updated (reports reliably when a run ends).

### 2026-10-05

- E-mail honesty: `emailStatus` now says what was really checked — `found-on-website`, `pattern-confirmed` or `unverified-guess` (domain failures keep `undeliverable` / `risky` / `unknown`); it no longer says "deliverable", because no mailbox check is made. The domain's DNS verdict moved to the new `emailDomainStatus`.
- New option "Minimum e-mail confidence", default **medium**: an address built only from the most common layout is no longer charged as a found e-mail — it goes to the new `emailGuess` field and the row is free. Choose "low" to be charged for such guesses as before.
- An input value that is not a profile URL now gets a free error row instead of being skipped silently.

### 2026-10-03

- Profiles hidden from logged-out visitors now go through an additional unblocking route before the heavier one, so more of them are read. Profiles that still do not open remain free.

### 2026-10-02

- Default run memory now scales with the number of profiles and the concurrency you set.

### 2026-10-01

- E-mails on a domain without mail servers, or whose mail check stays inconclusive, are no longer charged; the mail check retries with backup resolvers first.
- The company domain must now be confirmed before an address is built; unconfirmed domains and one-letter last names return a free row with the reason.
- Names are cleaned of titles and credentials (Dr., PhD, MBA, Jr., emoji and similar), and middle names no longer merge into the last name.
- More profiles are read successfully, with fallback routes for blocked profiles and no wasted retries on LinkedIn refusals.
- Runs stop shortly before their timeout and list unprocessed profiles as `NOT_ATTEMPTED`, and large company websites no longer crash the run.

### 2026-09-29

- Example profiles are no longer used as a hidden default when the input is left empty.

### 2026-09-23

- Initial release: takes LinkedIn profile URLs and returns the person's name, title, company, location and work e-mail with evidence and a confidence level; profiles without a found e-mail are free.
