# Changelog of India Tech Hiring Signals — Instahyre Jobs & Company Velocity (`foxlabs/india-tech-hiring-signals`) Actor

- **URL**: https://apify.com/foxlabs/india-tech-hiring-signals/changelog.md
- **Full Actor documentation**: https://apify.com/foxlabs/india-tech-hiring-signals.md

## Changelog

### 0.1 — 2026-09-10 — initial release

- `agencyFlag` / `agencySignals` removed before release. Instahyre lists an agency-posted role under the client company, so a self-description heuristic flagged none of 244 employers in testing, and a column that is always `false` would mislead.
- `foundedYear` returns `null` for Instahyre's `1900` placeholder (5 of 297 employers in testing).
- Two outputs from Instahyre's public job search: **companies** (one row per employer with hiring velocity — open roles, new roles in the last 7 days and in a 1–8 week window, function and skill mix, sample titles, headcount bucket, founded year, tagline, Instahyre page) and **jobs** (one PII-free row per listing, optional plain-text description and required experience).
- Filters mapped to Instahyre's own facets: locations, 19 categories / 107 job functions, skills, a company watch list, company size, 74 industries, experience years.
- Posting dates from Instahyre's job sitemap (earliest `lastmod` at or above each job ID). Checked on 2026-09-10 against job pages' own `datePosted`: 10 of 10 exact, and 11 of 12 in a second sample (the miss was a day late). If the sitemap cannot be read, velocity counts and `postedAt` are `null`, never a misleading `0`.
- Watch lists: a name Instahyre does not know is reported and skipped; the rest of the list still runs. Companies with no matching open role are named in the log and the `SUMMARY` record.
- A valid filter that matches nothing succeeds with one explanatory `SUMMARY` row; a rejected value (e.g. an unknown city) fails with the same explanation. `SUMMARY` rows are never billed.
- Rate limits: an HTTP 429 pauses every worker (5, 15, 30, then 60 s) and slows the rest of the run; network resets are retried on their own counter.
- Large result sets: every part of a scan stays inside Instahyre's 10,000-result window; a part that cannot be split further is read up to the window and flagged in the log instead of failing the run. A pick that mixes whole categories with single functions is checked with one combined function query, so it cannot come back falsely empty.
- `agencyFlag` is a narrow heuristic: `true` only when the employer describes itself as a staffing or recruitment business.
- Privacy: recruiter name, designation and profile fields never reach the dataset — the default path never requests them, and detail records (`includeDescriptions`) are reduced on arrival to description, experience, category, functions and the internship/active flags.
