# Job Description Bias And Risk Auditor (`trovevault/jd-bias-compliance-risk-auditor`) Actor

Audits job descriptions for bias, pay transparency, location clarity, legal-risk signals, rewrites, and evidence. Export data, run via API, schedule and monitor runs, or integrate with other tools.

- **URL**: https://apify.com/trovevault/jd-bias-compliance-risk-auditor.md
- **Developed by:** [Trove Vault](https://apify.com/trovevault) (community)
- **Categories:** Jobs, AI, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.70 / 1,000 job descriptions

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Job Description Bias And Risk Auditor

Review job descriptions for observable bias, pay transparency, location clarity, and compliance risk signals before they are published.

This Actor helps recruiting teams, HR operators, job boards, agencies, and compliance reviewers turn draft job descriptions into structured review findings. It highlights potentially exclusionary language, vague compensation wording, unclear remote or location requirements, risky legal phrasing, and missing job basics. Each result includes evidence snippets, severity, rewrite suggestions, and recommended next steps for human review.

It does not certify legal compliance. It surfaces wording and disclosure signals that may deserve HR, legal, DEI, or recruiting-ops review.

### What It Checks

- Bias and exclusionary wording, including age-coded phrases, native-speaker requirements, culture-fit phrasing, and informal coded labels such as "rockstar" or "ninja"
- Pay transparency signals, including missing salary ranges and vague compensation phrases such as "competitive salary"
- Location clarity, including missing remote, hybrid, onsite, timezone, travel, and eligibility details
- Legal-risk wording, including physical requirements, citizenship language, background-check wording, and unbounded work-hour expectations
- JD clarity, including missing responsibilities, requirements, employment type, or mismatched seniority and experience requirements

### Inputs

#### Job Description

Paste the full job description into the large text area. The Actor returns one output row with findings, evidence, and rewrite suggestions.

Include the title, responsibilities, requirements, location, work mode, pay range, benefits, and employment type when available. Short or incomplete drafts can still be checked, but the Actor may warn that missing-field findings could reflect incomplete input.

#### Dataset ID

Optionally append results to an existing Apify dataset in addition to the default run dataset. This is useful for recurring recruiting audits, agency workflows, or job-board moderation pipelines.

#### Run ID

Optionally pass an upstream workflow, client, or batch ID. The Actor copies it to each output row.

### Output

The dataset returns one row per job description run.

Example fields:

```json
{
  "jobTitle": "Senior Growth Rockstar",
  "overallRiskScore": 100,
  "riskLevel": "critical",
  "biasFindings": [
    {
      "category": "bias",
      "severity": "high",
      "issue": "Age-coded language may discourage older candidates or imply age preference.",
      "evidence": "looking for a young and energetic digital native to join our fast-paced team",
      "suggestedRewrite": "Describe the skill or experience needed without age-coded wording..."
    }
  ],
  "payTransparencyFindings": [
    {
      "category": "payTransparency",
      "severity": "medium",
      "issue": "Compensation wording appears incomplete or vague.",
      "evidence": "Competitive salary",
      "suggestedRewrite": "Use a specific range, such as \"GBP 55,000-70,000 base salary plus bonus eligibility\"."
    }
  ],
  "locationFindings": [],
  "legalRiskFindings": [],
  "clarityFindings": [],
  "suggestedRewrites": [],
  "recommendedActions": [
    "Review high-severity findings before publishing or sending the job description to candidates."
  ],
  "evidenceSnippets": [],
  "warnings": [],
  "analysisStatus": "success",
  "runId": "weekly-review",
  "checkedAt": "2026-05-15T10:00:00.000Z"
}
````

### Risk Score

The Actor assigns an observable risk score from 0 to 100.

- `low`: few or no visible review signals
- `medium`: wording or missing information should be reviewed before publishing
- `high`: several material findings or at least one high-severity issue
- `critical`: many findings across multiple categories, requiring human review before publishing

Scores are designed for triage. They are not legal determinations.

### Common Use Cases

- Review job descriptions before they go live
- Audit a batch of job postings for pay transparency and wording risk
- Build a recruiting quality-control workflow in Apify
- Give agencies or HR teams evidence-backed rewrite suggestions
- Track recurring JD issues across roles, teams, or clients
- Moderate job-board submissions before publication

### API Example

Run the Actor from another system with a normal Apify API call:

```bash
curl "https://api.apify.com/v2/acts/trovevault~jd-bias-compliance-risk-auditor/runs" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "jobDescription": "Customer Success Manager\n\nWe are hiring a full-time Customer Success Manager in London. Salary range: GBP 45,000-55,000. You will onboard customers, manage renewals, and partner with product teams. Hybrid role, two office days per week.",
    "runId": "weekly-jd-review"
  }'
```

### Daily Test Behavior

The default input contains a synthetic job description that intentionally includes several review signals. This lets Apify daily tests run without external credentials, paid APIs, or private HR data while still producing a non-empty dataset.

For real use, replace the sample with your own job descriptions.

### Limitations

- The Actor reviews text supplied in the input. It does not fetch ATS records or scrape job boards in this version.
- Bias, clarity, and disclosure findings are global review signals. Local, sector, union, or role-specific requirements may still be stricter.
- It detects observable wording and missing disclosure signals. It cannot certify that a job description is legally compliant.
- Rewrite suggestions should be reviewed by the responsible HR, legal, DEI, or recruiting team before publication.
- Very short drafts can trigger missing-information findings because the Actor cannot know whether omitted sections exist elsewhere.

### Tips For Better Results

- Paste the complete JD, not only the requirements section.
- Include compensation, location, work mode, travel, benefits, employment type, and work authorization language when available.
- Run the Actor before publication and again after material edits.
- Use `runId` to connect results to your ATS, job board, agency client, or internal review workflow.

# Actor input Schema

## `jobDescription` (type: `string`):

Paste the full public or draft job description, including title, location, compensation, requirements, responsibilities, and benefits when available. The actor returns findings, evidence, and rewrite suggestions for this JD.

## `datasetId` (type: `string`):

ID of an existing Apify dataset to append audit results to, in addition to the default run dataset. Use this for recurring recruiting, job-board, or HR review pipelines. Leave blank to write only to the default run dataset.

## `runId` (type: `string`):

ID of an upstream audit, client job, or scheduled workflow to associate with results. The actor copies this value into output rows so external systems can connect findings to their own pipeline. Leave blank for standalone runs.

## Actor input object example

```json
{
  "jobDescription": "Senior Growth Rockstar\n\nWe are looking for a young and energetic digital native to join our fast-paced team in London. The ideal candidate is a native English speaker who can work long hours under pressure, travel at short notice, and thrive in a work-hard-play-hard culture. Must have 10+ years of SaaS experience and be able to lift office equipment when needed. Competitive salary. Remote friendly."
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# 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 = {
    "jobDescription": `Senior Growth Rockstar

We are looking for a young and energetic digital native to join our fast-paced team in London. The ideal candidate is a native English speaker who can work long hours under pressure, travel at short notice, and thrive in a work-hard-play-hard culture. Must have 10+ years of SaaS experience and be able to lift office equipment when needed. Competitive salary. Remote friendly.`
};

// Run the Actor and wait for it to finish
const run = await client.actor("trovevault/jd-bias-compliance-risk-auditor").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 = { "jobDescription": """Senior Growth Rockstar

We are looking for a young and energetic digital native to join our fast-paced team in London. The ideal candidate is a native English speaker who can work long hours under pressure, travel at short notice, and thrive in a work-hard-play-hard culture. Must have 10+ years of SaaS experience and be able to lift office equipment when needed. Competitive salary. Remote friendly.""" }

# Run the Actor and wait for it to finish
run = client.actor("trovevault/jd-bias-compliance-risk-auditor").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "jobDescription": "Senior Growth Rockstar\\n\\nWe are looking for a young and energetic digital native to join our fast-paced team in London. The ideal candidate is a native English speaker who can work long hours under pressure, travel at short notice, and thrive in a work-hard-play-hard culture. Must have 10+ years of SaaS experience and be able to lift office equipment when needed. Competitive salary. Remote friendly."
}' |
apify call trovevault/jd-bias-compliance-risk-auditor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=trovevault/jd-bias-compliance-risk-auditor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Job Description Bias And Risk Auditor",
        "description": "Audits job descriptions for bias, pay transparency, location clarity, legal-risk signals, rewrites, and evidence. Export data, run via API, schedule and monitor runs, or integrate with other tools.",
        "version": "0.1",
        "x-build-id": "ereLmLhKXWwcNwmkI"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/trovevault~jd-bias-compliance-risk-auditor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-trovevault-jd-bias-compliance-risk-auditor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/trovevault~jd-bias-compliance-risk-auditor/runs": {
            "post": {
                "operationId": "runs-sync-trovevault-jd-bias-compliance-risk-auditor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/trovevault~jd-bias-compliance-risk-auditor/run-sync": {
            "post": {
                "operationId": "run-sync-trovevault-jd-bias-compliance-risk-auditor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "jobDescription"
                ],
                "properties": {
                    "jobDescription": {
                        "title": "Job Description",
                        "type": "string",
                        "description": "Paste the full public or draft job description, including title, location, compensation, requirements, responsibilities, and benefits when available. The actor returns findings, evidence, and rewrite suggestions for this JD."
                    },
                    "datasetId": {
                        "title": "Dataset ID (optional)",
                        "type": "string",
                        "description": "ID of an existing Apify dataset to append audit results to, in addition to the default run dataset. Use this for recurring recruiting, job-board, or HR review pipelines. Leave blank to write only to the default run dataset."
                    },
                    "runId": {
                        "title": "Run ID (optional)",
                        "type": "string",
                        "description": "ID of an upstream audit, client job, or scheduled workflow to associate with results. The actor copies this value into output rows so external systems can connect findings to their own pipeline. Leave blank for standalone runs."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
