# UK Gender Pay Gap Records — Employer Reports (`nexgensignal/uk-gender-pay-gap-records`) Actor

Keyless, pay-per-record UK gender pay gap reports — one row per employer per year with mean/median hourly and bonus gaps and pay-quartile splits. OGL v3.0; aggregate only, no person/address data.

- **URL**: https://apify.com/nexgensignal/uk-gender-pay-gap-records.md
- **Developed by:** [NexGen Signal](https://apify.com/nexgensignal) (community)
- **Categories:** Business, News, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $33.50 / 1,000 pay-gap records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## UK Gender Pay Gap Records — Employer Reports

**Keyless. Pay per record. Every UK employer's gender pay gap, as officially reported.**

This actor turns the **UK Gender Pay Gap Service** into clean, per-employer records — the official, mandatory disclosures of how large employers' pay differs between men and women. Each run reads the government service's keyless CSV for the reporting year you choose and delivers one row per employer: the mean and median hourly gaps, the bonus gaps, the male/female split across all four pay quartiles, the employer size band, and the submission dates. Employer/organization grain, structured for engineering use, under the Open Government Licence, with a **hard person-gate: the responsible-person name, employer address, postcode, and every free-text/URL field are structurally excluded and never emitted.**

### What this is, in one paragraph

UK employers with 250 or more staff must report their gender pay gap every year. This actor reads the official service's published data for a reporting year and flattens each employer's return into a single analysis-ready record: the headline mean and median hourly pay gaps, the mean and median bonus gaps, the proportion of men and women receiving a bonus, and the male/female representation in the lower, lower-middle, upper-middle, and top pay quartiles — plus the employer's size band and when it submitted. Values are exactly as reported by employers. You are billed only for records actually delivered.

### Who buys this and for what job

- **DEI, HR-analytics, and benchmarking products** that need every employer's gender-pay-gap figures as clean rows to compare against a client's own numbers.
- **ESG and investment-research teams** scoring companies on disclosed pay equity across years and size bands.
- **Journalists and researchers** studying pay-gap trends by sector, size, and time.
- **Data engineers** who want the official figures without downloading and reshaping the yearly CSV — with the person and address fields already stripped.

### Open Government Licence — free commercial reuse

One licence rider travels on every record. UK gender pay gap data is published under the **Open Government Licence v3.0 (OGL v3.0)** — free to copy, publish, distribute, and adapt, **including commercially**, with the required attribution: "Contains public sector information licensed under the Open Government Licence v3.0." One honest caveat rides every record too: a pay gap is a workforce-composition statistic and is **not in itself evidence of unequal pay**; figures are as self-reported by employers.

### Hard person-gate — no responsible person, no address

The raw file carries a **ResponsiblePerson** field — a named individual, often with an email address — plus the employer's street **Address**, **PostCode**, and a free-text information **URL**. This actor emits **none** of them. Those columns are not in the field map at all (structural exclusion), a person-key guard runs on every record as a backstop, and the acceptance suite feeds a record whose ResponsiblePerson, address, postcode, and URL are populated and asserts none of it can ever appear in output. What remains is the employer entity (name, Companies House number, SIC) and the aggregate pay-gap statistics.

### Pricing

| Event | Free plan | Bronze | Silver | Gold / Platinum / Diamond |
|-------|-----------|--------|--------|---------------------------|
| `pay_gap_record` | $0.05 | $0.045 | $0.04 | $0.0335 |

Delivered before charged. Blocked runs and empty results cost nothing.

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `year` | integer | 2024 | Reporting year (e.g. 2024 for the 2024/25 reporting year). |
| `employerSize` | string | — | Optional. Keep only employers in this size band (e.g. "1000 to 4999"). |
| `maxRecords` | integer | 500 | Ceiling on records delivered and billed. |

### Output

One JSON object per employer per reporting year. Real example (values as reported):

```json
{
  "record_id": "19070-2024",
  "employer_id": "19070",
  "employer_name": "ABERYSTWYTH UNIVERSITY",
  "company_number": "RC000641",
  "reporting_year": 2024,
  "employer_size": "1000 to 4999",
  "diff_mean_hourly_percent": 9.17,
  "diff_median_hourly_percent": 2.9,
  "diff_mean_bonus_percent": 7.5,
  "male_top_quartile": 53.62,
  "female_top_quartile": 46.38,
  "submitted_after_deadline": "False",
  "due_date": "2025/04/05 00:00:00",
  "date_submitted": "2025/03/28 09:02:53",
  "source": "UK Gender Pay Gap Service",
  "licence": "UK gender pay gap data ... Open Government Licence v3.0 ...",
  "disclaimer": "Employer gender-pay-gap figures ... aggregate ... responsible-person ... excluded ...",
  "observed_at": "2026-08-21T00:00:00Z"
}
```

An unbilled `RUN_RECEIPT` records the robots check, the reporting year, the filters, rows seen and delivered, and whether charged equals delivered.

### Field reference

Each record is one employer's return for one reporting year. Identity: `record_id` (employer id + year), `employer_id`, `employer_name`, `current_name`, `company_number`, and `sic_codes`. Context: `reporting_year` and `employer_size`. Hourly gaps: `diff_mean_hourly_percent` and `diff_median_hourly_percent`. Bonus gaps: `diff_mean_bonus_percent`, `diff_median_bonus_percent`, `male_bonus_percent`, and `female_bonus_percent`. Quartile representation: `male_`/`female_` `lower_quartile`, `lower_middle_quartile`, `upper_middle_quartile`, and `top_quartile`. Submission: `submitted_after_deadline`, `due_date`, and `date_submitted`. Provenance: `source`, `source_url`, `licence`, `attribution`, `disclaimer`, and `observed_at`.

### How a run works

A run first re-reads the source host's robots posture from your runtime — the service serves no robots file, a no-policy posture — and re-proves the download door for your chosen reporting year. If the service returns a 5xx (it has a history of transient 502s), the actor **defers cleanly** — it reports the status and stops rather than delivering partial or nothing-charged garbage. On a healthy 200, it reads the year's CSV and flattens each employer to one record — reading only the employer entity and the aggregate statistics, **never** the responsible-person, address, postcode, or URL fields — delivered **before** it is charged, so a blocked or empty run costs you nothing. The actor stops at your `maxRecords` ceiling and records `charge_equals_delivered` in the receipt.

### Coverage and scope

A single reporting year holds on the order of **11,000+ employer returns** across every sector and size band from 250 staff upward. Because each record carries `reporting_year` and `employer_id`, year-over-year comparison is a simple join on employer id, and size-band filtering isolates the segment you care about. Pull one year to benchmark, or several years to build a trend for a set of employers.

### Cost guidance

One `pay_gap_record` per delivered employer return: cost = returns delivered × your plan's per-record price. Scope with `employerSize` or `maxRecords` to keep runs bounded. A whole year is ~11,000 returns; 1,000 returns is **$50** (Free) / **$33.50** (Gold).

### Honest limitations

- **Not evidence of unequal pay.** A gender pay gap reflects workforce composition across roles and seniority; it is not, by itself, evidence of men and women being paid differently for the same work.
- **As self-reported.** Figures are submitted by employers; this actor reformats, it does not audit.
- **Employer grain, per year.** One row is one employer's return for one reporting year.
- **Defers on outage.** If the service is returning 5xx, the actor defers rather than delivering partial data.
- **No person data** — responsible-person, address, postcode, and free-text/URL fields are excluded.

### Differentiation

This is a **net-new** category for the NexGenData fleet — no existing fleet actor covers UK gender-pay-gap disclosures. It is distinct from the fleet's UK company cells (which carry company status, filings, and control, not pay-gap statistics) and from any HR or jobs cell. Its specific job is the **official UK gender-pay-gap employer return** — the mandated pay-equity statistics, per employer, per year, with the person and address fields removed.

### The NexGen Signal family

Part of the NexGen Signal family of pay-per-record data products:

- [UK Tariff Commodity Records — HS Codes & Taxonomy](https://apify.com/nexgensignal/uk-tariff-commodity-records)
- [UK Contract Opportunity Records](https://apify.com/nexgensignal/uk-contract-opportunity-records)
- [EU Regulatory Change Records — CELLAR](https://apify.com/nexgensignal/eu-regulatory-change-records)
- [Organization Sanctions & LEI Risk](https://apify.com/nexgensignal/organization-sanctions-lei-risk)
- [Grant Opportunity Records — US Grants.gov](https://apify.com/nexgensignal/grant-opportunity-records)

*Source: UK Gender Pay Gap Service (gender-pay-gap.service.gov.uk). Contains public sector information licensed under the Open Government Licence v3.0 — free to reuse, including commercially, with attribution. Aggregate employer statistics only; a pay gap is not in itself evidence of unequal pay. Reformatted to employer records; the responsible-person name, address, postcode, and free-text/URL fields are structurally excluded and never emitted.*

# Actor input Schema

## `year` (type: `integer`):

Reporting year (e.g. 2024 for the 2024/25 reporting year).

## `employerSize` (type: `string`):

Optional. Keep only employers in this size band (e.g. '1000 to 4999', '250 to 499').

## `maxRecords` (type: `integer`):

Maximum records delivered and billed.

## Actor input object example

```json
{
  "year": 2024,
  "maxRecords": 500
}
```

# Actor output Schema

## `results` (type: `string`):

Delivered records.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "year": 2024,
    "maxRecords": 500
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgensignal/uk-gender-pay-gap-records").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "year": 2024,
    "maxRecords": 500,
}

# Run the Actor and wait for it to finish
run = client.actor("nexgensignal/uk-gender-pay-gap-records").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "year": 2024,
  "maxRecords": 500
}' |
apify call nexgensignal/uk-gender-pay-gap-records --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nexgensignal/uk-gender-pay-gap-records"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/bPhKcXKZ5eUN1tk6o/builds/RnRSzrUU2i09Nf2Fr/openapi.json
