> For the complete documentation index, see [llms.txt](https://docs.coresignal.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.coresignal.com/release-notes/august-2026.md).

# August 2026

{% updates format="full" %}
{% update date="2026-08-01" %}

## Base Company data: adding a new field

We are adding the `affiliated_company_id` field to a new Base Company data schema and backfilling the values.

| Data field                                 | Description                                                                | Data type |
| ------------------------------------------ | -------------------------------------------------------------------------- | --------- |
| `affiliated_pages[].affiliated_company_id` | Identification key relating to the company table for the affiliate company | Integer   |
| {% endupdate %}                            |                                                                            |           |

{% update date="2026-08-01" %}

## Multi-source Employee data: adding new fields

We are adding two new fields to the `experience` and `education` arrays to identify each entry.

| Data field        | Description                                                | Data type |
| ----------------- | ---------------------------------------------------------- | --------- |
| `experience[].id` | Profile hash ID uniquely identifying each experience entry | String    |
| `education[].id`  | Profile hash ID uniquely identifying each education entry  | String    |
| {% endupdate %}   |                                                            |           |

{% update date="2026-08-10" %}

## Base Jobs data: adding new fields

Adding `status_changed_at`, an array of structs that records when a job posting's status last changed (active, inactive, or deleted). This field supports job-duration and hiring-trend analytics.

| Data field                       | Description                                                                   | Data type        |
| -------------------------------- | ----------------------------------------------------------------------------- | ---------------- |
| `status_changed_at`              | Records when and how a job posting's status last changed                      | Array of structs |
| `status_changed_at[].status`     | Job status at the time of the change. Values: `active`, `inactive`, `deleted` | String           |
| `status_changed_at[].changed_at` | Timestamp of the status change                                                | Timestamp        |
| {% endupdate %}                  |                                                                               |                  |

{% update date="2026-08-18" %}

## Multi-source Jobs data: breaking changes

Breaking changes to Multi-source Jobs data: `employment_type` is changed to  `array<string>` with normalized values (`PER_DIEM` → `Temporary`, unmapped → `Other`), and `salary[].currency` now uses ISO 4217 codes instead of symbols.

#### Data type change

`employment_type` data type is changing to an array – update your flows accordingly.

| Data field        | Old data type | New data type    |
| ----------------- | ------------- | ---------------- |
| `employment_type` | String        | Array of strings |

#### Value normalization

Two data fields `employment_type` and `salary[].currency` values are now normalized.

**`employment_type`**

**Before:** A single value, selected via priority coalesce across contributing sources.

**After:** A distinct array of values aggregated from all contributing sources.

Value mapping changes:

| Before                    | After       |
| ------------------------- | ----------- |
| `PER_DIEM`                | `Temporary` |
| Missing / unmapped values | `Other`     |

**`salary[].currency`**

Data quality update to `salary[].currency` that can disrupt symbol-matching flows.

| Before                                                                    | After                                              |
| ------------------------------------------------------------------------- | -------------------------------------------------- |
| Raw currency symbol for Glassdoor-sourced entries (e.g. `$`, `£`, `k €`). | ISO 4217 currency code (e.g. `USD`, `GBP`, `EUR`). |
| {% endupdate %}                                                           |                                                    |

{% update date="2026-08-18" %}

## Glassdoor Jobs data: changing field values

`salary.currency` data field now has value normalization, where raw currency symbols are replaced with ISO 4217 codes.

| Before                             | After                                    |
| ---------------------------------- | ---------------------------------------- |
| Raw symbols (e.g. `$`, `£`, `k €`) | ISO 4217 code (e.g. `USD`, `GBP`, `EUR`) |
| {% endupdate %}                    |                                          |

{% update date="2026-08-18" %}

## Indeed Jobs data: field value normalization

Indeed Jobs data field `job_type` values are now normalized. Filters using raw source codes (e.g. `job_type = 'FULL_TIME'`) will stop matching, so you need to update your flows to match canonical enum values.

| Before                                                                                  | After                                                                                                                 |
| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| Raw source codes (e.g. `FULL_TIME`, schema.org variants, multilingual values) or absent | Canonical enum value (`Full-time`, `Part-time`, `Contract`, `Temporary`, `Internship`, `Volunteer`)+ `Other` fallback |
| Unmapped values                                                                         | `Other`                                                                                                               |
| {% endupdate %}                                                                         |                                                                                                                       |

{% update date="2026-08-14" %}

## Webhooks: Updated subscription limit

You can now set up to **500 webhook subscriptions** per account, each allowing a maximum of 300,000 IDs. Any attempts to exceed this limit will be rejected.
{% endupdate %}

{% update date="2026-08-11" %}

## Multi-source Employee API: adding new fields

**Adding new fields**&#x20;

Adding new fields to surface academic background, career trajectory, and activity signals.

<table data-search="false"><thead><tr><th>Data field</th><th>Description</th><th>Data type</th></tr></thead><tbody><tr><td><code>institution_ranking_score</code></td><td>Highest QS university ranking score across the employee's education institutions, matched by normalized institution name. <code>null</code> if no institution matches</td><td>Double</td></tr><tr><td><code>education[].institution_website</code></td><td>Institution's website URL</td><td>String</td></tr><tr><td><code>months_in_management</code></td><td>Total months spent in management-level roles. Calculated as the union of these positions, so overlapping roles aren't counted twice</td><td>Long</td></tr><tr><td><code>post_frequency_yearly</code></td><td>Count of professional network posts over the past 12 months</td><td>Double</td></tr><tr><td><code>posting_recency</code></td><td>Date of the employee's most recent post</td><td>Date</td></tr><tr><td><code>engagement_per_post</code></td><td>Average engagement (reactions and comments) per post</td><td>Double</td></tr><tr><td><code>influence_score</code></td><td>Composite 0–100 social-influence score: a weighted, log-scaled blend of post frequency (0.2), engagement per post (0.5), and follower count (0.3), each capped at a fixed, precomputed 99th-percentile threshold. Defaults to <code>0.0</code></td><td>Double</td></tr><tr><td><code>activity[].created_at</code></td><td>Creation timestamp of the activity item</td><td>Timestamp</td></tr><tr><td><code>activity[].updated_at</code></td><td>Last-updated timestamp of the activity item</td><td>Timestamp</td></tr><tr><td><code>processed_at</code></td><td>Exposes when data was processed on our side (reparsing, reloads, data quality fixes). Aligned to the delivery date – one day ahead of <code>updated_at</code></td><td>Timestamp</td></tr></tbody></table>

We are adding two new fields to the `experience` and `education` arrays to identify each entry.

| Data field                   | Description                                               | Data type |
| ---------------------------- | --------------------------------------------------------- | --------- |
| `experience[].id`            | Profile hash ID uniquely identifies each experience entry | String    |
| `education[].id`             | Profile hash ID uniquely identifies each education entry  | String    |
| `education[].institution_id` | Internal institution identifier for education records     | Long      |

**Adding a `tenure_stats` struct**

A new nested struct capturing per-company tenure statistics in months, derived from the employee's company-linked experience.

| Data field                       | Description                                                                                                                                                                                                                                              | Data type |
| -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- |
| `tenure_stats`                   | Per-company tenure statistics in months, with concurrent roles at the same company counted once. It presents raw data without plausibility checks, so some values might be unrealistic. `null` if the employee has no datable, company-linked experience | Struct    |
| `tenure_stats.avg_tenure_months` | Average total tenure per company                                                                                                                                                                                                                         | Double    |
| `tenure_stats.median_tenure`     | Median total tenure per company                                                                                                                                                                                                                          | Double    |
| `tenure_stats.current_tenure`    | Tenure at the current (active) position. `null` if not currently employed                                                                                                                                                                                | Double    |
| `tenure_stats.longest_tenure`    | Longest total tenure at a single company                                                                                                                                                                                                                 | Double    |

**Adding a `internal_promotion_rate` struct**

A new nested struct quantifying internal career progression. Promotions are inferred from position-title changes within the same company, ordered by start date.

| Data field                                         | Description                                                                                                                                                                                      | Data type |
| -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------- |
| `internal_promotion_rate`                          | Internal promotion metrics, derived from position-title changes within the same company, ordered by start date, counting only changes where the new role starts strictly after the previous role | Struct    |
| `internal_promotion_rate.promotion_count`          | Count of internal title changes (promotions). `0` if none                                                                                                                                        | Integer   |
| `internal_promotion_rate.avg_months_per_promotion` | Average months between consecutive promotions. `null` with fewer than two promotions                                                                                                             | Double    |
| `internal_promotion_rate.recently_promoted`        | True if a promotion occurred within the last 3 months                                                                                                                                            | Boolean   |
| {% endupdate %}                                    |                                                                                                                                                                                                  |           |

{% update date="2026-08-11" %}

## Multi-source Company API: adding new fields

Adding new fields to improve the granularity of HQ address data and to expose a full structured list of all company locations.

<table data-search="false"><thead><tr><th>Data field</th><th>Description</th><th>Data type</th></tr></thead><tbody><tr><td><code>hq_latitude</code></td><td>Geographic latitude coordinate of the company's headquarters</td><td>Double</td></tr><tr><td><code>hq_longitude</code></td><td>Geographic longitude coordinate of the company's headquarters</td><td>Double</td></tr><tr><td><code>hq_apartment</code></td><td>Apartment number or unit identifier for the HQ address, when applicable</td><td>String</td></tr><tr><td><code>hq_suite</code></td><td>Suite number or office designator for the HQ address, when applicable</td><td>String</td></tr><tr><td><code>company_locations_full[].city</code></td><td>City name of the company location</td><td>String</td></tr><tr><td><code>company_locations_full[].state</code></td><td>State of the company location</td><td>String</td></tr><tr><td><code>company_locations_full[].street</code></td><td>Street address of the company location</td><td>String</td></tr><tr><td><code>company_locations_full[].zip_code</code></td><td>Postal or ZIP code of the company location</td><td>String</td></tr><tr><td><code>company_locations_full[].latitude</code></td><td>Geographic latitude coordinate of the company location</td><td>Double</td></tr><tr><td><code>company_locations_full[].longitude</code></td><td>Geographic longitude coordinate of the company location</td><td>Double</td></tr></tbody></table>

**Adding `avg_tenure_by_seniority_months` struct**

We are adding `avg_tenure_by_seniority_months` struct which shows the average tenure in months for the company’s active employees, grouped by management level/seniority.

<table data-search="false"><thead><tr><th>Data field</th><th>Description</th><th>Data type</th></tr></thead><tbody><tr><td><code>avg_tenure_by_seniority_months</code> </td><td>Average tenure in months for active employees, grouped by management level/seniority</td><td>Struct</td></tr><tr><td><code>avg_tenure_by_seniority_months.owner</code></td><td>Average tenure in months for active employees in the owner seniority bucket</td><td>Float</td></tr><tr><td><code>avg_tenure_by_seniority_months.founder</code></td><td>Average tenure in months for active employees in the founder seniority bucket</td><td>Float</td></tr><tr><td><code>avg_tenure_by_seniority_months.clevel</code></td><td>Average tenure in months for active employees in the C-level seniority bucket</td><td>Float</td></tr><tr><td><code>avg_tenure_by_seniority_months.partner</code> </td><td>Average tenure in months for active employees in the partner seniority bucket</td><td>Float</td></tr><tr><td><code>avg_tenure_by_seniority_months.vp</code> </td><td>Average tenure in months for active employees in the VP seniority bucket</td><td>Float</td></tr><tr><td><code>avg_tenure_by_seniority_months.head</code></td><td>Average tenure in months for active employees in the head seniority bucket</td><td>Float</td></tr><tr><td><code>avg_tenure_by_seniority_months.director</code></td><td>Average tenure in months for active employees in the director seniority bucket</td><td>Float</td></tr><tr><td><code>avg_tenure_by_seniority_months.manager</code></td><td>Average tenure in months for active employees in the manager seniority bucket </td><td>Float</td></tr><tr><td><code>avg_tenure_by_seniority_months.senior</code></td><td>Average tenure in months for active employees in the senior seniority bucket</td><td>Float</td></tr><tr><td><code>avg_tenure_by_seniority_months.intern</code></td><td>Average tenure in months for active employees in the intern seniority bucket</td><td>Float</td></tr><tr><td><code>avg_tenure_by_seniority_months.specialist</code> </td><td>Average tenure in months for active employees in the specialist seniority bucket</td><td>Float</td></tr><tr><td><code>avg_tenure_by_seniority_months.other_management</code></td><td>Average tenure in months for active employees in the other management seniority bucket</td><td>Float</td></tr></tbody></table>

**Adding `avg_tenure_by_department_months` struct**

We are adding `avg_tenure_by_department_months` struct which shows the average tenure in months for the company’s active employees, grouped by department.

<table data-search="false"><thead><tr><th>Data field</th><th>Description</th><th>Data type</th></tr></thead><tbody><tr><td><code>avg_tenure_by_department_months</code></td><td>Average tenure in months for active employees, grouped by department</td><td>Struct</td></tr><tr><td><code>avg_tenure_by_department_months.medical</code></td><td>Average tenure in months for active employees in the medical department bucket</td><td>Float</td></tr><tr><td><code>avg_tenure_by_department_months.sales</code></td><td>Average tenure in months for active employees in the sales department bucket</td><td>Float</td></tr><tr><td><code>avg_tenure_by_department_months.hr</code></td><td>Average tenure in months for active employees in the HR department bucket</td><td>Float</td></tr><tr><td><code>avg_tenure_by_department_months.legal</code></td><td>Average tenure in months for active employees in the legal department bucket</td><td>Float</td></tr><tr><td><code>avg_tenure_by_department_months.marketing</code></td><td>Average tenure in months for active employees in the marketing department bucket</td><td>Float</td></tr><tr><td><code>avg_tenure_by_department_months.finance</code></td><td>Average tenure in months for active employees in the finance department bucket</td><td>Float</td></tr><tr><td><code>avg_tenure_by_department_months.technical</code></td><td>Average tenure in months for active employees in the technical department bucket</td><td>Float</td></tr><tr><td><code>avg_tenure_by_department_months.consulting</code> </td><td>Average tenure in months for active employees in the consulting department bucket</td><td>Float</td></tr><tr><td><code>avg_tenure_by_department_months.operations</code></td><td>Average tenure in months for active employees in the operations department bucket</td><td>Float</td></tr><tr><td><code>avg_tenure_by_department_months.product</code></td><td>Average tenure in months for active employees in the product department bucket </td><td>Float</td></tr><tr><td><code>avg_tenure_by_department_months.general_management</code></td><td>Average tenure in months for active employees in the general management department bucket</td><td>Float</td></tr><tr><td><code>avg_tenure_by_department_months.administrative</code></td><td>Average tenure in months for active employees in the administrative department bucket</td><td>Float</td></tr><tr><td><code>avg_tenure_by_department_months.customer_service</code></td><td>Average tenure in months for active employees in the customer service department bucket</td><td>Float</td></tr><tr><td><code>avg_tenure_by_department_months.project_management</code></td><td>Average tenure in months for active employees in the project management department bucket</td><td>Float</td></tr><tr><td><code>avg_tenure_by_department_months.design</code></td><td>Average tenure in months for active employees in the design department bucket</td><td>Float</td></tr><tr><td><code>avg_tenure_by_department_months.research</code></td><td>Average tenure in months for active employees in the research department bucket</td><td>Float</td></tr><tr><td><code>avg_tenure_by_department_months.trades</code></td><td>Average tenure in months for active employees in the trades department bucket</td><td>Float</td></tr><tr><td><code>avg_tenure_by_department_months.real_estate</code></td><td>Average tenure in months for active employees in the real estate department bucket</td><td>Float</td></tr><tr><td><code>avg_tenure_by_department_months.education</code></td><td>Average tenure in months for active employees in the education department bucket</td><td>Float</td></tr><tr><td><code>avg_tenure_by_department_months.other_department</code></td><td>Average tenure in months for active employees in the other department bucket</td><td>Float</td></tr></tbody></table>
{% endupdate %}

{% update date="2026-08-19" %}

## Agentic Search API updates

The response shape for Agentic Search API `/fast` and `/reasoning` endpoints are changing from a static preview to a dynamic, query-aware response. Also, we are decreasing the maximum count of returned results in `"return_data":true` mode and removing `"limit"` parameter.

### **What is changing**

* **Updating structure of the response**: Data fields are now displayed in two types: Fixed fields, Dynamic 1 (root fields) and Dynamic 2 (nested fields). Any integration relying on a fixed, predictable field set beyond fixed fields will need to be updated to handle a variable response shape determined by query parameters.

  * **Fixed fields:** A fixed, small set of identifying fields is always returned for every request, regardless of the query.

  | **Company**  | <p><code>id</code>, <br><code>company\_name</code>, <code>professional\_network\_url</code>, <code>\_score</code></p>                                                                                                                        |
  | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
  | **Employee** | <p><code>id</code>, <br><code>full\_name</code>, <code>professional\_network\_url</code>, <code>active\_experience\_title</code>, <code>active\_experience\_company\_id</code>, <br><code>company\_name</code>, <br><code>\_score</code></p> |
  | **Jobs**     | <p><code>id</code>, <br><code>company\_name</code>, <br><code>title</code>, <br><code>\_score</code></p>                                                                                                                                     |

  * **Dynamic fields (query-aware):** In addition to the fixed set of fields, the additional returned fields now vary based on the prompt. They may include root-level fields and matched nested fields, such as specific experiences, funding rounds, or job sources that align with the prompt. Any integration that relies on a static, predictable field set must be updated to handle a response shape that varies with the prompt.
* **Query transparency:** The response now always includes the underlying Elasticsearch DSL query that produced the results.
* **`/fast` endpoint response change**: the response format `/fast` endpoint returns is changing:

| Mode                  | Old format                        | New format                                   |
| --------------------- | --------------------------------- | -------------------------------------------- |
| `"return_data":false` | `{"query": {...}, "sort": [...]}` | `{"query": {"query": {...}, "sort": [...]}}` |
| `"return_data":true`  | `[{...}]`                         | `{"query": {...}, "data": [{...}]}`          |

* **Results count:** `"return_data":true` mode now returns up to 20 results. Pricing logic remains the same.
* **Removing `"limit"` parameter**: `"limit"` parameter is removed because the maximum result count is 20, and pricing isn't affected by it.
  {% endupdate %}

{% update date="2026-08-19" %}

## Search Preview: increasing results count

Search Preview endpoints now support pagination up to **50 pages**, giving access to up to **1,000 results** per search.

What stays the same:

* Each page still returns 20 results
* Pagination is accessed the same way, via the `page` query parameter
* **Pricing is unchanged**: each additional page consumed still costs the same amount of credits as before
  {% endupdate %}
  {% endupdates %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.coresignal.com/release-notes/august-2026.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
