# Changelog of LinkedIn Company & Employee Search | X-Ray | No Login (`b2bdata/linkedin-people-search`) Actor

- **URL**: https://apify.com/b2bdata/linkedin-people-search/changelog.md
- **Full Actor documentation**: https://apify.com/b2bdata/linkedin-people-search.md

## Apify Actor Changelog

### v1.8 (2026-04-21) — Empty-Call Leak Fix

#### Breaking Changes

- **Removed `title` filter from employee search.** Pattern 1 previously built `allintitle:"Company" "Title"` queries, which required BOTH the company name AND the title keyword to appear in the LinkedIn profile title. This caused a 32.7% empty-result rate — users searching for "CEO at Grupo Salinas" got nothing because CEOs rarely have literal "CEO" in their profile title (they use "Presidente", "Managing Director", etc.).
- Employee search now returns **all employees** at the company — filter by role on your side.
- Removed fields: `title`, `bulkEmployeeKeyword`
- Bulk format changed: `CompanyName, Country` (was `CompanyName, Title, Country`)

#### Impact

- Empty-result rate: 33% → expected ~0% on valid companies
- Google CSE cost per call: unchanged
- Revenue per call: +500% on previously-empty queries (now return 100 items at $0.0025/item)

### v1.7 (2026-04-06) — Major Feature Release

#### New Features

##### Company Search

- New `service: "companies"` option
- Searches LinkedIn company pages via `/api/v1/companies`
- `keyword` — company name or search term
- `companyPattern` (1-4) — strictest to broadest (default: 4)
- `companyMaxResults` — per-service limit, default 10 (1 credit), max 100 (10 credits)
- Supports pagination, deduplication, incremental push

##### Country Filtering

- Dropdown with 100+ countries (ISO codes) — no more typing
- Global `country` field applies to all services as default
- **Per-line override in bulk modes:**
  - Bulk person: `Name, Company, Country` (e.g. `Tim Cook, Apple, us`)
  - Bulk employees: `Company, Title, Location, Country` (e.g. `Microsoft, Engineer, SF, de`)
- Per-line country overrides global; omit for global fallback

##### Bulk Person Search

- `bulkNames` textarea — up to 1000 names per run
- Format: `Name, Company, Country` (company and country optional)
- Each name = 1 credit, 1 API call
- Incremental push — partial results survive interruptions
- Errors logged per-line, batch continues
- `bulkIndex` field in output for matching input→output
- Configurable delay (`bulkDelayMs`, default 1500ms, min 500ms)

##### Bulk Employee Search

- `bulkCompanies` textarea — up to 50 companies per run
- Format: `Company, Title, Location, Country` (title/location/country optional)
- Each company = 1+ credits depending on `employeeMaxResults`
- Same incremental push + error resilience as bulk person

#### Changes

##### Service Isolation (Critical Fix)

- **`service` field is now the primary router** — stale fields from other services are completely ignored
- Previously, leftover `bulkNames` from a person search would hijack a company search
- Validation also scoped per-service — no short-circuit on stale fields

##### Per-Service Max Results

- Replaced single `maxResults` with `employeeMaxResults` and `companyMaxResults`
- Each lives in its own service section in the form
- Default: 10 (1 credit = 10 results)
- Max: 100 (10 credits = 10 API calls)
- Person search always returns all matches (usually 1-5), no limit needed

##### Load All Defaults to OFF

- `loadAll` now defaults to `false`
- Users get 1 credit by default, opt-in to paginate for more
- Descriptions explain credit cost: "Each 10 results = 1 credit"

##### Pricing

- Pay per result: $0.002 per profile returned
- Person search: returns up to 10 profiles per name
- Employee/company search: 10 results default, 100 max per country

#### Infrastructure

- Actor version: 1.7 (build 1.7.8)
- Apify CLI updated to latest
- `MASTER_API_KEY` env var must be set per-version (Apify doesn't copy secrets across versions)
- Current key set on v1.7 via API

#### Known Limitations

- **Apify console remembers ALL fields** from previous runs. Stale fields appear in JSON but are ignored by the actor. This is an Apify UI limitation, not a bug.
- No conditional field visibility in Apify INPUT\_SCHEMA — all fields show regardless of selected service.
- Future plan: split into 5 separate actors for clean UX + more Apify Store SEO surface.

#### Files Modified

| File | Changes |
|------|---------|
| `INPUT_SCHEMA.json` | Added companies service, country dropdown, bulk fields, per-service maxResults, credit descriptions |
| `src/main.js` | Added `searchCompany()`, `parseBulkNames()`, `parseBulkCompanies()`, `searchBulkPersons()`, `searchBulkEmployees()`, country passthrough, service-first routing, per-service validation |
| `.actor/actor.json` | Version bumped 1.5 → 1.7 |

#### API Endpoints Used

| Service | Endpoint | Method |
|---------|----------|--------|
| Person | `/api/v1/person` | POST |
| Employees | `/api/v1/employees` | POST |
| Companies | `/api/v1/companies` | POST |

All calls authenticated via `MASTER_API_KEY` header (`X-API-Key`).

#### Deployment

```bash
cd apify-actor && apify push
```

After push, verify `MASTER_API_KEY` env var exists on the new version:

```bash
curl -s -H "Authorization: Bearer <APIFY_TOKEN>" \
  "https://api.apify.com/v2/acts/<ACTOR_ID>/versions/1.7" \
  | python3 -c "import sys,json; print(json.load(sys.stdin)['data']['envVars'])"
```

#### Future Plans

- \[ ] Split into 5 separate actors (person, bulk person, employees, bulk employees, companies)
- \[ ] Each actor gets own Apify Store listing = more SEO
- \[ ] Publish to Apify Marketplace (need icon, screenshots, pricing config)
- \[x] Apify pricing set: $0.002 per result (can increase next month)
